wtw24
8/19/2019 - 8:32 AM

Docker Compose

Docker Compose

FROM — указывает название образа (image), который будет взят за основу.
ENV — устанавливает переменную среды
RUN — запустить команду в контейнере (все команды исполняются с полными правами в пределах контейнера)
ADD — добавить файл в контейнер
VOLUME — указать монтируемые директории (их можно монтировать на хост машину или на другие контейнеры)
EXPOSE — указать транслируемые порты (их можно транслировать на хост машину или на другие контейнеры)
CMD — запустить процесс (это и будет процесс, вокруг которого построен контейнер)

для запуска в фоновом режиме:

sudo docker-compose up -d 

удалить образ:

sudo docker-compose down

если были внесены изменения в образы(перестроенна конфигурация):

sudo docker-compose up -d --build

Масштабирование сервисов:

sudo docker-compose up -d --scale mysql=<кол-во образов>

синхронизировать с каталогом проекта: (синхронизация):

sudo docker run -p 80:80 -v /home/devartem/dockers/php/src/:/var/www/html/ hello-world

перестроить контейнер:

sudo docker build -t hello-world .
sudo docker-compose exec proxy sh
nslookup app
sudo docker-compose scale app=4

Команда docker pull служит для скачивания Docker-образов из регистра.

sudo docker run --name database1 -e MYSQL_ROOT_PASSWORD=secret -d mysql/mysql-server:5.6

запуск mysql из образа:

sudo docker exec -it database1 mysql -wroot -psecret

запущенные контейнеры

docker-compose ps

логи

docker-compose logs server

запускаю bash

docker-compose exec server bash
# Файл docker-compose должен начинаться с тега версии.
# Мы используем "3" так как это - самая свежая версия на момент написания этого кода.

version: "3"

# Следует учитывать, что docker-composes работает с сервисами.
# 1 сервис = 1 контейнер.
# Сервисом может быть клиент, сервер, сервер баз данных...
# Раздел, в котором будут описаны сервисы, начинается с 'services'.

services:

  # Как уже было сказано, мы собираемся создать клиентское и серверное приложения.
  # Это означает, что нам нужно два сервиса.
  # Первый сервис (контейнер): сервер.
  # Назвать его можно так, как нужно разработчику.
  # Понятное название сервиса помогает определить его роль.
  # Здесь мы, для именования соответствующего сервиса, используем ключевое слово 'server'.

  server:
 
    # Ключевое слово "build" позволяет задать
    # путь к файлу Dockerfile, который нужно использовать для создания образа,
    # который позволит запустить сервис.
    # Здесь 'server/' соответствует пути к папке сервера,
    # которая содержит соответствующий Dockerfile.

    build: server/

    # Команда, которую нужно запустить после создания образа.
    # Следующая команда означает запуск "python ./server.py".

    command: python ./server.py

    # Вспомните о том, что в качестве порта в 'server/server.py' указан порт 1234.
    # Если мы хотим обратиться к серверу с нашего компьютера (находясь за пределами контейнера),
    # мы должны организовать перенаправление этого порта на порт компьютера.
    # Сделать это нам поможет ключевое слово 'ports'.
    # При его использовании применяется следующая конструкция: [порт компьютера]:[порт контейнера]
    # В нашем случае нужно использовать порт компьютера 1234 и организовать его связь с портом
    # 1234 контейнера (так как именно на этот порт сервер 
    # ожидает поступления запросов).

    ports:
      - 1234:1234

  # Второй сервис (контейнер): клиент.
  # Этот сервис назван 'client'.

  client:
    # Здесь 'client/ соответствует пути к папке, которая содержит
    # файл Dockerfile для клиентской части системы.

    build: client/

    # Команда, которую нужно запустить после создания образа.
    # Следующая команда означает запуск "python ./client.py".
 
    command: python ./client.py

    # Ключевое слово 'network_mode' используется для описания типа сети.
    # Тут мы указываем то, что контейнер может обращаться к 'localhost' компьютера.

    network_mode: host

    # Ключевое слово 'depends_on' позволяет указывать, должен ли сервис,
    # прежде чем запуститься, ждать, когда будут готовы к работе другие сервисы.
    # Нам нужно, чтобы сервис 'client' дождался бы готовности к работе сервиса 'server'.
 
    depends_on:
      - server
build:
  context: .
  dockerfile: Dockerfile-alternate
args:
  password: secret
command: bundle exec thin -p 3000
container_name: my-web-container
depends_on:
  - db
dns:
  - 8.8.8.8
  - 9.9.9.9
dns_search:
  - dc1.example.com
  - dc2.example.com
tmpfs: # Mount a temporary file system inside the container. Can be a single value or a list.
  - /run
  - /tmp
  
# Override the default entrypoint.
~~~
entrypoint: /code/entrypoint.sh
~~~

~~~
entrypoint:
    - php
    - -d
    - zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so
    - -d
    - memory_limit=-1
    - vendor/bin/phpunit
~~~


https://docs.docker.com/compose/compose-file/