Подготовка простого проекта Docker Compose с контекстом сборки
На этом шаге мы подготовим простой проект Docker Compose, включающий контекст сборки. Контекст сборки — это набор файлов в указанном расположении (PATH или URL), которые передаются демону Docker для построения образа. Это важно, потому что Dockerfile и все необходимые ему файлы (например, код приложения) должны находиться в контексте сборки.
Сначала создадим директорию для нашего проекта. Назовём её my-watch-app
.
mkdir ~/project/my-watch-app
cd ~/project/my-watch-app
Теперь создадим простой файл приложения. Используем базовый скрипт на Python, который выводит сообщение.
nano app.py
Добавим следующее содержимое в app.py
:
print("Hello from the Docker container!")
Сохраним и закроем файл (Ctrl+X, Y, Enter).
Далее создадим Dockerfile, который будет собирать образ для нашего приложения. Dockerfile скопирует наш Python-скрипт в образ и запустит его.
nano Dockerfile
Добавим следующее содержимое в Dockerfile:
FROM python:3.9-slim
WORKDIR /app
COPY app.py .
CMD ["python", "app.py"]
Этот Dockerfile использует облегчённый образ Python 3.9 в качестве основы, устанавливает рабочую директорию /app
, копирует app.py
в директорию /app
и задаёт команду для запуска скрипта при старте контейнера.
Наконец, создадим файл docker-compose.yaml
для определения нашего сервиса. Этот файл укажет Docker Compose, как собрать и запустить наше приложение.
nano docker-compose.yaml
Добавим следующее содержимое в docker-compose.yaml
:
version: "3.8"
services:
myapp:
build: .
volumes:
- .:/app
Этот файл docker-compose.yaml
определяет сервис с именем myapp
. Инструкция build: .
указывает Docker Compose собрать образ, используя Dockerfile в текущей директории (наш контекст сборки). Строка volumes: - .:/app
монтирует текущую директорию (.
) на хосте в директорию /app
внутри контейнера. Это важно для docker compose watch
, так как позволяет изменениям на хосте отражаться в контейнере.
Теперь соберём и запустим наш сервис с помощью Docker Compose, чтобы убедиться, что всё настроено правильно. Поскольку Docker Compose не установлен заранее, сначала установим его.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Теперь можем использовать docker-compose
.
docker-compose up --build
Вы должны увидеть вывод, указывающий на сборку образа и запуск контейнера с сообщением "Hello from the Docker container!". Нажмите Ctrl+C
, чтобы остановить контейнер.