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/