Как связать один сервис Docker с другим сервисом Docker? - PullRequest
0 голосов
/ 27 августа 2018

У меня 12 докеров.Когда я работаю индивидуально, я могу использовать --link для подключения некоторых из них, например, ссылку на веб-приложение с mysql db.Но когда я запускаю их как сервис в Docker Swarm (например, Docker Create Service), я не могу связать их, потому что --link не доступен с командой docker service create.Если я использую файл docker-compose.yml для запуска всего контейнера, я могу соединиться.Но здесь другая проблема.Предположим, у меня есть 12 различных контейнеров (компонентов) в файле docker-compose или в стеке docker. Как я могу обновить один контейнер или компоненты?Нужно ли повторно развертывать весь стек докеров?

1 Ответ

0 голосов
/ 27 августа 2018

Вам нужно только поместить свои контейнеры в одну и ту же сеть в каждом файле docker-compose.yml.

Сначала вам нужно будет создать сеть с помощью docker:

docker network create -d bridge custom 

Послевам нужно будет изменить сеть в ваших файлах docker-compose на новую сеть, и при желании вы можете использовать external_links, как в примере:

файл примера 1:

version: '3'
services:
  php-server:
    container_name: myphp
    image: devilxatoms/taproject:latest
    ports:
     - "9000:9000"
    external_links:
      - mysql:mysql
    networks:
      - custom

networks:
  custom:
    external: true

файл примера 2:

version: '3'
    services:
      mysql:
        container_name: mydb
        image: mysql:latest
        restart: always
        environment:
          - MYSQL_ROOT_PASSWORD=root
        ports:
         - "3306:3306"
        networks:
          - custom

    networks:
      custom:
        external: true

Чтобы проверить это, я получил доступ только к bash моего контейнера mysql и отправил ping в другой контейнер:

MySQL Container:

# ping php-server
PING php-server (172.26.0.3) 56(84) bytes of data.
64 bytes from myphp.custom (172.26.0.3): icmp_seq=1 ttl=64 time=0.124 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=2 ttl=64 time=0.368 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=3 ttl=64 time=0.071 ms
64 bytes from myphp.custom (172.26.0.3): icmp_seq=4 ttl=64 time=0.136 ms
^C
--- php-server ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3094ms
rtt min/avg/max/mdev = 0.071/0.174/0.368/0.115 ms

Контейнер PHP:

# ping mysql
PING mysql (172.26.0.2) 56(84) bytes of data.
64 bytes from mydb.custom (172.26.0.2): icmp_seq=1 ttl=64 time=0.075 ms
64 bytes from mydb.custom (172.26.0.2): icmp_seq=2 ttl=64 time=0.107 ms
64 bytes from mydb.custom (172.26.0.2): icmp_seq=3 ttl=64 time=0.109 ms
^C
--- mysql ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2094ms
rtt min/avg/max/mdev = 0.075/0.097/0.109/0.015 ms

Для обновления определенных сервисов вы можете обновить файл docker-compose с вашими изменениями и сообщить docker-compose, какие из ваших сервисов необходимо обновить с помощью этой строки:

docker-compose up -d --no-deps <service_name> 

-d находится в режиме «Отдельно»: запускать контейнеры в фоновом режиме, печатать новые имена контейнеров.

- no-deps не будет запускать связанные сервисы.

ссылки: https://docs.docker.com/compose/compose-file/#external_links

...