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.