docker compose up — команда, которой запускается процесс сборки и запуска контейнеров, согласно правилам в файле docker-compose.yml в текущем каталоге. Рассмотрим примеры запуска контейнеров и синтаксис файла.
docker compose up и пример запуска Docker контейнеров через docker-compose
docker compose является отдельным пакетом предназначенным для организации совместной работы нескольких контейнеров и управлении ими.
В простейшем случае отдельные контейнеры запускаются из консоли с определенными параметрами. Но чаще, используется Dockerfile
Рассмотрим запуск простого приложения в контейнере с использованием docker compose
Сначала создается Dockerfile с информацией по контейнеру
mcedit Dockerfile
FROM php:7.0-apache
COPY index.html /var/www/html
EXPOSE 80
RUN mkdir /test && echo "
hello world"
> /test/greeting
В нем указание на то, что за основу берется образ php:7.0-apache c Dockerhub. В контейнер копируется файл index.html из текущего каталога, снаружи открывается порт 80, пробрасывать его на хост машину будем позднее через docker-compose.
Последней строкой выполняется команда, создающая каталог и файл с добавлением в последний строки hello world
mcedit docker-compose.yml
version: '3'
services:
website:
build: .
ports:
— "
5001:80"
docker-compose up
--
build -d
Building website
Step 1/5 : FROM php:7.0-apache
—> e18e9bf71cab
Step 2/5 : COPY index.html /var/www/html
—> Using cache
—> a0d54730e1ad
Step 3/5 : EXPOSE 80
—> Using cache
—> 0aba8373a592
Step 4/5 : RUN mkdir /test && echo «hello world» > /test/greeting
—> Using cache
—> 9a54369708fc
Step 5/5 : VOLUME /test
—> Using cache
—> 8218d0e69365
Successfully built 8218d0e69365
Successfully tagged 1_website:latest
Starting 1_website_1 …
Starting 1_website_1 … done
Контейнер успешно создан и запущен, в выводе docker ps его можно увидеть и в него можно зайти
docker ps | grep php
acb5f4b93aa2 1_website «docker-php-entrypoi…» About an hour ago Up About an hour 0.0.0.0:5001->80/tcp 1_website_1
Попасть внутрь контейнера можно с указанием оболочки /bin/bash
docker exec -it acb5f4b93aa2 /bin/bash
Внутри контейнера можно выполнить команду ls и увидеть файл index.html, который был скопирован с хост машины командой COPY из Dockerfile
root@acb5f4b93aa2:/var/www/html# ls
index.html
На хост машине можно теперь увидеть запущенный на порту 5001 сервис, если обратиться по публичному IP адресу на порт 5001 будет отображено содержимое index.html в Docker контейнере
Запущенная служба отображается в выводе netstat
netstat -nltp | grep 5001
tcp6 0 0 :::5001
Далее можно настроить проксирование при помощи Nginx на порт 5001 для какого-то определенного доменного имени.