GNU/Linux >> Znalost Linux >  >> Linux

Nastavení názvu hostitele v Docker Compose

Zajímá vás, jak nastavit název hostitele v Docker Compose? Ukážu vám to.

Můžete ji definovat pod službou takto:

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

Ale opravdu to potřebujete? Obecným cílem názvu hostitele je, aby se počítače v síti navzájem znaly a komunikovaly tak mezi sebou.

Podobně je zde hlavním cílem zajistit, aby kontejnery mohly mezi sebou úspěšně komunikovat v rámci sítě Docker.

Budu diskutovat o dvou způsobech, jak to umožnit:

Metoda 1:Neexplicitní komunikace

V rámci sítě Docker lze názvy služeb definované v souboru Docker Compose použít k testování, zda mohou kontejnery mezi sebou komunikovat.

Vezměte si například následující konfiguraci reverzního proxy:

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

Všimněte si, že dva názvy služeb jsou nginx-proxy a letsencrypt . Pomocí těchto názvů můžete otestovat, zda mohou kontejnery mezi sebou komunikovat či nikoli. To může být velmi užitečné při řešení situací.

Nejprve nainstalujte ping do kontejneru Nginx Reverse Proxy:

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

Nyní můžete pomocí příkazu ping uvnitř tohoto kontejneru zkontrolovat, zda může komunikovat s kontejnerem Let's Encrypt Container (používá se pro 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

Jak můžete vidět výše, reverzní proxy kontejner „vidí“ druhý kontejner SSL, který odešle odpověď zpět! V nginx-proxy_letsencrypt_1.net , nginx-proxy_letsencrypt_1 je název kontejneru SSL a net je naše vlastní síť.

Pojďme si to rychle ověřit:

[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

K ověření sítě můžete použít docker network ls příkaz.

[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

Metoda 2:Explicitní komunikace

Řekněme, že z nějakého důvodu chcete explicitně zadat název hostitele kontejneru. Docker Compose vám to také umožňuje!

Pomocí hostname možnost konfigurace, můžete nastavit jiný název hostitele pro jakoukoli službu definovanou v souboru Docker Compose, jak jsem to udělal pro službu Let's Encrypt níže:

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

Zde si všimněte, že jsem výslovně přidal hostname: ledocker uvnitř definice služby Let's Encrypt. Chci použít ledocker jako název hostitele pro kontejner SSL.

Ale počkat, můžeme znovu zkontrolovat pomocí příkazu 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

Vskutku ano. Funguje to!

Toužíte po dalších znalostech v tomto ohledu? Podívejte se na toto extrémně informativní vlákno GitHubu.

Doufám, že se vám tento rychlý tip líbil! Jakékoli dotazy, pochybnosti nebo návrhy můžete zanechat v sekci komentářů níže.


Linux
  1. Jak používat Docker Compose

  2. Co je nového v Docker Compose v2?

  3. Docker skládat svazek Oprávnění linux

  1. Rychlý průvodce používáním Docker Compose

  2. Jak nainstalovat Docker Compose na Ubuntu 18.04

  3. Nainstalujte WordPress s Docker Compose, Nginx, Apache s SSL

  1. Co je Docker Compose

  2. Jak nainstalovat Docker Compose na Ubuntu 18.04

  3. Nastavení názvu hostitele:FQDN nebo krátký název?