Рубрики
Uncategorized

Контейнерные сети с Docker Compose

Одна из лучших вещей в Docker-это то, что в контейнерах есть встроенные функции для подключения с одним … Tagged с Docker, DevOps.

Одна из лучших вещей в Docker-это то, что в контейнерах есть встроенные функции для подключения к одному. Таким образом, если я хотел создать сложную систему, которая состоит из нескольких различных компонентов (базы данных, микросервисов и т. Д.), То Docker дает мне удобный способ очень быстро настройки этой системы. Именно здесь появляется Docker Compose, дополнение к Docker, которое позволяет нам создавать несколько контейнеров одновременно в предварительно настроенной манере.

Установка Docker Compose

Как уже упоминалось, Docker Compose является дополнением и по умолчанию не поставляется с Docker. Вы можете установить его со следующей командой на Linux ( или проверить другие методы установки ):

sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

Docker Compose Files

Просто с обычными контейнерами Docker позволяет нам использовать файлы, чтобы определить, как мы хотим создать наши контейнерные сети. Мы должны создать для этого файлы составления, которые основаны на стандарте, называемом YAML. Ямл, для более простых терминов, можно рассматривать как JSON, но с отступом вместо скобок. Вы можете использовать вкладки или пространства, но вам нужно убедиться, что вы оставались последовательными. Вот простой пример, который, я надеюсь, получает идею:

my_object:
  my_values: helloworld
  my_list_of_values:
    - value1
    - value2

Docker Compose File File должен следовать определенной структуре. В верхней части файла нам нужно определить, какую версию Compose мы будем использовать. Затем нам нужно определить объект Services, который является списком всех различных контейнеров, которые мы хотим использовать в нашей композиции. Наконец, мы собираемся определить сети, которые облегчают нам определить, какие услуги могут поговорить друг с другом.

Docker Compose Commands

Docker Compose также поставляется со своим собственным набором команд. Вот два наиболее важных:

Docker составить Начинает строить и настраивать контейнеры на основе файла COMPOSE в каталоге, указанном в качестве аргумента. Если пусто, смотрите в текущем каталоге.
Докер-составной сборка Строит все контейнеры в указанном каталоге. Если пусто, ищите файл в текущем каталоге.

Создание нашего первого сервиса

Для начала, давайте включим версию Compose, которую мы будем использовать (прямо сейчас, последняя версия 3):

version: "3"

Далее мы хотим определить наш первый сервис. Для этого примера я собираюсь создать простую настройку WordPress с базой данных MySQL. Давайте начнем с базы данных, так как это может в значительной степени стоять самостоятельно.

version: "3"
services:
  db:
    container_name: mariadb
    image: mariadb:10.4.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mydb
    ports:
      - 3306:3306

Если вы прочитаете мой Предыдущий учебник В командной строке Docker многие из этих терминов будут довольно знакомы. Это связано с тем, что то, что мы здесь делаем, очень похоже на создание одного контейнера и настраивая его, установив различные доступные параметры (открытые порты, переменные среды и т. Д.). Мы видим, что у нас есть объект услуг, и внутри мы определяем услугу, которую я назвал «DB». Я даю ему имя «mariadb», так что когда я начинаю свою компоненту, я могу обратиться к нему, используя это имя (например, используя команду «Docker Stop Maria», чтобы остановить контейнер). Я также определяю изображение для контейнера, устанавливаю переменные среды и т. Д. Единственная часть, которую мы не можем установить через командную строку, — это атрибут «перезапуск». Установка этого на «всегда» означает, что всякий раз, когда мы используем команду для создания и запуска нашего сочинения, контейнер Maria, который в настоящее время работает, останавливается и перезапускается (в отличие от игнорирования). Давай попробуем! Зайдите в новую папку, скопируйте код в файл с именем docker-compose.yaml и выполните Docker-Compose Up командование Вы должны увидеть, что новый экземпляр контейнера MariaDB запускается!

Добавление второго сервиса

Мы только что увидели, как можно использовать файл составления для создания одного контейнера, и для некоторых более сложных конфигураций часто может иметь смысл использовать файлы Compose, если вы просто пытаетесь запустить один контейнер, несмотря на то, что он предназначен для начала нескольких сразу. Но теперь вы увидите, как легко начать два из них! Мы добавим простую конфигурацию WordPress. Мы также собираемся заглянуть в сети и как они полезны. Во -первых, давайте посмотрим на код:

version: "3"
services:
  db:
    container_name: mariadb
    image: mariadb:10.4.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mydb
    ports:
      - 3306:3306
    networks:
      - wpsite
  wordpress:
    depends_on:
      - db
    container_name: wp
    image: wordpress:php7.2
    ports:
      - "9000:80"
    expose:
      - 9000
    restart: always
    volumes: [".:/var/www/html"]
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: mydb
      WORDPRESS_DB_PASSWORD: password
    networks:
      - wpsite
networks:
  wpsite:

Вы заметите, что я добавил службу WordPress. Первое, что я делаю, это указывает на то, что наш сервер WordPress зависит от базы данных, это означает, что наш контейнер с базой данных всегда будет создан и начинается первым. Помимо сопоставления портов, я также выставляю порт 9000 на хост -машину, чтобы мы могли фактически увидеть работа WordPress Server. Я также настраиваю громкость, который просто собираюсь отобразить файлы конфигурации WordPress в тот же каталог, который мы выполняем нашу команду Compose. Переменные среды используются для настройки соединения с базой данных. Обратите внимание, как наш WordPress_db_host использует DB: 3306 в качестве значения, а не что -то вроде 127.0.0.1. Это связано с тем, что контейнеры в одной и той же сети (подробнее об этом немного) знают друг о друге и могут называть их именами услуг.

Наконец, теперь мы видим, что обе услуги имеют новый атрибут сетей, в котором оба имеют значение «wpsite». Внизу документа у нас есть еще один объект «сети» и определение «wpsite». Благодаря этому мы говорим Docker Comose, что хотим создать сеть (соединение между контейнерами) и позволяет нам указать, какие контейнеры должны знать друг о друге. Если сети не определены, то контейнер является частью глобальной сети и, следовательно, может быть доступен любыми контейнерами — это, как правило, не очень большая практика, поскольку он может привести к нежелательным побочным эффектам для более крупных композиций.

Теперь давайте попробуем это! Запустить Docker-Compose Up Снова и вуаля! В LocalHost: 9000 мы видим, что наш сервер WordPress сейчас работает.

Оригинал: «https://dev.to/marcbeaujean/container-networks-with-docker-compose-51e4»