GNU/Linux >> Belajar Linux >  >> Linux

Mengatur Hostname di Docker Compose

Ingin tahu bagaimana cara mengatur nama host di Docker Compose? Saya akan tunjukkan itu.

Anda dapat mendefinisikannya di bawah layanan seperti ini:

...
letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    hostname: ledocker
    ...

Tetapi apakah Anda benar-benar membutuhkan itu? Tujuan umum dari nama host adalah agar komputer di jaringan saling mengenal dan dengan demikian berkomunikasi di antara mereka sendiri.

Demikian pula, tujuan utama di sini adalah untuk memastikan bahwa kontainer dapat berkomunikasi satu sama lain dengan sukses dalam jaringan Docker.

Saya akan membahas dua cara untuk mewujudkannya:

Metode 1:Komunikasi Non-eksplisit

Dalam jaringan Docker, nama layanan yang ditentukan dalam file Docker Compose dapat digunakan untuk menguji apakah container dapat berkomunikasi satu sama lain.

Ambil contoh konfigurasi proxy terbalik berikut:

version: '3.7'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./dhparam:/etc/nginx/dhparam
      - ./vhost:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    env_file:
      - ./letsencrypt.env
    depends_on:
      - nginx-proxy
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

networks:
  net:
    external: true

Perhatikan bahwa kedua nama layanan tersebut adalah nginx-proxy dan letsencrypt . Anda dapat menggunakan nama-nama ini untuk menguji apakah wadah dapat berkomunikasi satu sama lain atau tidak. Ini bisa menjadi sangat membantu selama situasi pemecahan masalah.

Pertama, instal ping di dalam wadah Nginx Reverse Proxy:

[email protected]:~/nginx-proxy$ docker-compose exec nginx-proxy bash -c "apt update && apt install -y iputils-ping"

Sekarang, Anda dapat menggunakan perintah ping di dalam wadah ini untuk memeriksa apakah wadah tersebut dapat berkomunikasi dengan Wadah Let's Encrypt (digunakan untuk SSL).

[email protected]:~/nginx-proxy$ sudo docker-compose exec nginx-proxy ping letsencrypt
PING letsencrypt (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.066 ms
64 bytes from nginx-proxy_letsencrypt_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms
^C
--- letsencrypt ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 37ms

Seperti yang Anda lihat di atas, wadah proxy terbalik "melihat" wadah SSL kedua yang mengirimkan respons kembali! Di nginx-proxy_letsencrypt_1.net , nginx-proxy_letsencrypt_1 adalah nama wadah SSL dan net adalah jaringan kustom kami.

Ayo segera verifikasi:

[email protected]:~/nginx-proxy$ sudo docker ps
CONTAINER ID   IMAGE                                    COMMAND                  CREATED         STATUS         PORTS     NAMES
a9ef56e22f58   jrcs/letsencrypt-nginx-proxy-companion   "/bin/bash /app/entr…"   7 minutes ago   Up 7 minutes             nginx-proxy_letsencrypt_1
563133f5d039   jwilder/nginx-proxy                      "/app/docker-entrypo…"   7 minutes ago   Up 7 minutes             nginx-proxy_nginx-proxy_1

Untuk memverifikasi jaringan, Anda dapat menggunakan docker network ls perintah.

[email protected]:~/nginx-proxy$ sudo docker network ls
NETWORK ID     NAME                DRIVER    SCOPE
018c50dc4fdc   bridge              bridge    local
27fd2370e735   net                 bridge    local
38ce8d11227b   host                host      local
2440210d0fc5   none                null      local

Metode 2:Komunikasi Eksplisit

Katakanlah, untuk beberapa alasan, Anda ingin secara eksplisit menentukan nama host ke sebuah wadah. Docker Compose memungkinkan Anda melakukannya juga!

Menggunakan hostname opsi konfigurasi, Anda dapat mengatur nama host yang berbeda untuk layanan apa pun yang ditentukan dalam file Docker Compose, seperti yang telah saya lakukan untuk layanan Let's Encrypt di bawah ini:

version: '3.7'

services:

  nginx-proxy:
    image: jwilder/nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./html:/usr/share/nginx/html
      - ./dhparam:/etc/nginx/dhparam
      - ./vhost:/etc/nginx/vhost.d
      - ./certs:/etc/nginx/certs:ro
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf
    labels:
      - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
    restart: always
    networks:
      - net

  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    hostname: ledocker
    env_file:
      - ./letsencrypt.env
    depends_on:
      - nginx-proxy
    volumes:
      - ./certs:/etc/nginx/certs:rw
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always
    networks:
      - net

networks:
  net:
    external: true

Di sini, perhatikan bahwa saya telah secara eksplisit menambahkan hostname: ledocker di dalam definisi layanan Let's Encrypt. Saya ingin menggunakan ledocker sebagai nama host untuk penampung SSL.

Tapi tunggu dulu, bisa kita cek ulang dengan perintah ping?

[email protected]:~/nextcloud$ sudo docker-compose exec nginx-proxy ping ledocker
PING ledocker (172.18.0.3) 56(84) bytes of data.
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=1 ttl=64 time=0.034 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=2 ttl=64 time=0.079 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=3 ttl=64 time=0.061 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=4 ttl=64 time=0.093 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=5 ttl=64 time=0.078 ms
64 bytes from nginx-proxy_nginx-proxy_1.net (172.18.0.3): icmp_seq=6 ttl=64 time=0.075 ms
^C
--- ledocker ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 129ms
rtt min/avg/max/mdev = 0.034/0.070/0.093/0.018 ms

Memang, ya. Ini berhasil!

Lapar untuk lebih banyak pengetahuan dalam hal ini? Lihat utas GitHub yang sangat informatif ini.

Semoga Anda menikmati tip cepat ini! Anda dapat meninggalkan pertanyaan, keraguan, atau saran di bagian komentar di bawah.


Linux
  1. Cara Menggunakan Tulis Docker

  2. Cara Menginstal Docker Compose di Ubuntu 18.04

  3. Docker menulis volume Izin linux

  1. Apa yang Baru di Docker Compose v2?

  2. Panduan Cepat untuk Menggunakan Docker Compose

  3. Instal WordPress dengan Docker Compose, Nginx, Apache dengan SSL

  1. Apa itu Docker Compose?

  2. Cara Menginstal Docker Compose di Ubuntu 18.04

  3. Mengatur nama host:FQDN atau nama pendek?