суббота, 18 февраля 2017 г.

Docker-compose networking

По умолчанию докер-компоуз всегда создает отдельную сеть типа мост, давая ей имя текущей директории с постфиксом _default. Чтобы дать определенное, можно либо определить системную переменную COMPOSE_PROJECT_NAME, либо указать имя проекта через ключ
$ docker-compose --project-name myProject up -d



Мы можем создаться также явно сети внутри компоуз-файла, и подключать сервисы к нескольким сетям одновременно.
version: 2
services:
  a:
    image: some/img
    networks:
      - frontend
      - backend
  b:
    image: other/img
    networks:
      - backend
  c:
    image: another/img
    networks:
      - frontend
networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

Присвоение псевдонимов для сервиса в разных сетях

Сервис может представляться под разными именами в разных сетях:

...
  a:
    image: some/img
    networks:
      frontend:
        aliases:
          - a_name_in_fe_network
      backend:
        aliases:
          - a_name_in_be_network

...
Теперь к сервису в разных сетях нужно обращаться по раным указанным хостнеймам

В первой версии компоуза, когда мы линковали один контейнер к другому, это означало, что мы получали доступ ко второму по указанному имени и они соединялись в одну сеть. Но во 2-й версии, если сервисы не привязаны к одной сети явно, этого не произойдет, даже если они залинкованы.

Сервис может дать собственные имена другим сервисам в сетях, к которым он подключен

  a:
    image: some/img
    networks:
      - frontend
      - backend
    external_links:
      - b:when_my_app_was_codding_dev_suggested_that_b_should_be_named_as_this_name_and_Idont_want_to_change_the_code
      - c:and_c_expected_to_be_this_name_devop_is_lazy_and_dont_want_tochange_name_inside_the_code_of_a

Подколючение к уже существущей(созданной в ручную) сети

Допустим для чего-то нам нужно было создать сеть руками(допустим нам нужно развернуть кластер севисов, обслуживамых компоузом, на хосте, где работают контейнеры, которые подняты без компоуза).
Тогда в секции networks мы указываем, что сеть наружная(ее создавать не нужно, а попытаться ее найти и к ней подключиться)
$ docker network create --driver bridge superbridge 
docker-compose.yml
...
networks:
   superbridge:
     external: true 
Или если нужно к ней обращаться в кластере, представленом компоузом, под другим именем
networks:
   someservices_already_written_for_such_name:
     external: 
       name: superbridge

Другое

Есть еще кучу всего связанного с сетью.
Мы можем сервису в конкретной сети указать статический 4 или/и 6 ip-адреса.

Или в нашем кластере еще нужен внешний сервис, который не писали создатели нашего мульсервисного приложения, то мы можем какой-то внейший айпи представить под удобным для нас хостнеймом
  extra_hosts:
    - google.com:goo
    - 52.64.175.16: nameconvertorservice 

Также можем указать dns сервера и другое.

Комментариев нет:

Отправить комментарий