Если вы видите что-то необычное, просто сообщите мне. Skip to main content

Docker-compose файл.

Docker-compose - инструмент для совместного запуска несколких контенеров. Основой для docker-compoes является yaml-файл с настройками. Удобство заключается в том, что единожды написанный docker-compose.yml можно легко перенести с устройства на устройство.

Установка

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

Третья строчка скрипта дает нам возможность использовать docker-compose от имени сисетмы, если этот команда не будет выполнена. команда docker-compose потребует указания полноценного пути расположения.

Пример написания docker-compose

Пример взят с docs.microsoft.com

version: "3.7"

services:
  app:
    image: node:12-alpine
    #build: .
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos
    networks:
      app_net:

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment: 
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos
    networks:
      app_net:

volumes:
  todo-mysql-data:
  
networks:
  app_net:
    driver: bridge

Ключевые слова используемые в docker-compose:

Ключи Применение
build Указывает путь откуда брать Dockerfile для создания образа
args Указание аргументов билда которые требуются во время создания образа
command Переписывает CMD указанную в Dockerfile
devices Мапирование физических устройств в рабочий контейнер
depends_on Указание зависимости сервисов друг от друга. Зависимый сервис будет запускаться последний
dns Указанный в ручуню DNS сервер
entrypoint Переписывает ENTRYPOINT директиву из Dockerfile
env_file Добавление переменных с помощью файла переменных окружения
environment Явное указание переменных в контейнер
expose Выставление портов контейнера, они будут доступны только linked сервисам, могут быть указаны только внутренние порты.
image Указание образа, который будет взят для старта контейнера
links Связывание контейнеров разных сервисах
logging Настройки логирования для сервиса.
networks Сеть к которой будет присоденен сервис
ports Маирование портов из контейнера в хост систему
volumes Мапирование папок из хост системы в контенер

Docker-compose cli

Сборка контенера, имеет смысл если в yaml файле присутствует директива build. Можно использовать ключ --no-cache, в таком случае игнорируются кэшированные образы.

docker-compose build

Запуск приложения. В запуск можно добавить --build ключ, тогда docker-compose перебилдит незакешированные шаги.

docker-compose up

Docker-compose останавливает и удаляет запущенные контенеры, согласно yaml конфигурации. То есть выполянется 2 команды docker: docker stop и docker rm

docker-compose stop

Отображает запущенные контейнеры принадлежащие yaml файлу.

docker-compose  ps

ВНИМАНИЕ! Выполенение команда, в отличии от docker, должно быть с в папке с yaml файлом. Команда docker может выполнятся из любой папки.