Расчетное время чтения: 7 минут
Вы можете запустить Compose в macOS, Windows и 64-битной Linux.
Docker Compose использует Docker Engine для любой значимой работы, поэтому убедитесь, что Docker Engine установлен локально или удаленно, в зависимости от ваших настроек
PS D:\docker> docker-compose up Pulling my-test (hello-world:)… latest: Pulling from library/hello-world 1b930d010525: Pull complete Creating docker_my-test_1 … done Attaching to docker_my-test_1 my-test_1 | my-test_1 | Hello from Docker! my-test_1 | This message shows that your installation appears to be working correctly. my-test_1 | my-test_1 | To generate this message, Docker took the following steps: my-test_1 | 1. The Docker client contacted the Docker daemon. my-test_1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. my-test_1 | (amd64) my-test_1 | 3. The Docker daemon created a new container from that image which runs the my-test_1 | executable that produces the output you are currently reading. my-test_1 | 4. The Docker daemon streamed that output to the Docker client, which sent it my-test_1 | to your terminal. my-test_1 | my-test_1 | To try something more ambitious, you can run an Ubuntu container with: my-test_1 | $ docker run -it ubuntu bash my-test_1 | my-test_1 | Share images, automate workflows, and more with a free Docker ID: my-test_1 | [[https://hub.docker.com/|https://hub.docker.com/]] my-test_1 | my-test_1 | For more examples and ideas, visit: my-test_1 | [[https://docs.docker.com/get-started/|https://docs.docker.com/get-started/]] my-test_1 | docker_my-test_1 exited with code 0
Что делает Docker:
Этот простой тест демонстрирует одно из главных преимуществ Docker Compose — способность запускать и закрывать всю группу Docker-контейнеров одновременно.
my-test: image: hello-world
PS D:\docker> docker-compose up -d Starting docker_my-test_1 … done..Ответ придет в фоновом режиме
PS D:\docker> docker-compose ps<code>
Name Command State Ports
</code>
——————————————- docker_my-test_1 /hello Exit 0 Например, это указывает на то, что контейнер helloworld_my-test_1 остановлен:
docker-compose stop
Если вы изменяли настройки в контейнерах которые предварительно нужно собирать, то такие контейнеры нужно пересобрать, команда для пересборки проекта на лету (минуя ввод команд остановки, пересборки и запуска) -
docker-compose up -d –force-recreate –build
version: '3.1' services: db: build: ./db command: --default-authentication-plugin=mysql_native_password restart: always environment: MYSQL_ROOT_PASSWORD: 2619192 volumes: - ./databases:/var/lib/mysql adminer: build: ./adminer restart: always ports: - 6080:8080
$ docker-compose build Building db Step 1/1 : FROM mysql —> 81f094a7e4cc Successfully built 81f094a7e4cc Successfully tagged docker_db:latest Building adminer Step 1/1 : FROM adminer —> e2d2c89239b2 Successfully built e2d2c89239b2 Successfully tagged docker_adminer:latest $ docker-compose up -d Recreating docker_db_1 … done Recreating docker_adminer_1 … done
$ docker-compose rm db Going to remove docker_db_1 Are you sure? [yN] y Removing docker_db_1 … done
# Файл 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