Docker произвел революцию в области контейнеризации, предоставив мощные инструменты для создания и управления контейнерными приложениями.
Две основные концепции в Docker – это Dockerfile и Docker Compose.
Несмотря на то, что оба они необходимы, они служат разным целям.
Dockerfile используется для определения образа одного контейнера, в то время как Docker Compose упрощает управление несколькими контейнерами.
🐳 Выбор между Docker Compose и Docker Swarm
Dockerfile и Docker Compose
Dockerfile – это скрипт, содержащий набор инструкций для создания образа Docker.
В нем указывается базовый образ, зависимости, конфигурации и команды, необходимые для создания среды.
Docker Compose, с другой стороны, – это инструмент, определяющий и запускающий многоконтейнерные приложения Docker с помощью файла docker-compose.yml.
Он помогает организовать работу нескольких контейнеров с сетью, томами и переменными окружения.
Примечание: приведенные ниже примеры не являются полностью функциональными приложениями.
Они служат в качестве базового скелета для понимания концепций Dockerfile и Docker Compose.
Пример 1: Создание простого веб-приложения с помощью Dockerfile
В этом примере мы создадим веб-приложение Flask на основе Python с помощью Dockerfile.
Dockerfile для приложения Flask: Ниже приведен простой Dockerfile для приложения Flask на Python.
# Use an official Python runtime as base image FROM python:3.9 # Set the working directory WORKDIR /app # Copy application files COPY . . # Install dependencies RUN pip install -r requirements.txt # Define the command to run the app CMD ["python", "app.py"]
Этот Dockerfile извлекает образ Python, настраивает окружение, копирует файлы приложения, устанавливает зависимости и запускает приложение.
Пример 2: Использование Docker Compose для управления несколькими контейнерами
Теперь давайте посмотрим, как можно использовать Docker Compose для управления приложением Flask с базой данных PostgreSQL.
docker-compose.yml для Flask и PostgreSQL: Ниже приведена конфигурация Docker Compose для приложения Flask и базы данных PostgreSQL.
version: '3.8' services: web: build: . ports: - "5000:5000" depends_on: - db db: image: postgres:13 environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydatabase
Эта настройка определяет две службы:
- web: Это служба приложения Flask. Директива build: . указывает Docker Compose на сборку образа с использованием Dockerfile, находящегося в том же каталоге. Это означает, что он выполнит все шаги, определенные в Dockerfile, включая настройку окружения, установку зависимостей и определение того, как должно работать приложение.
- db: Это служба базы данных PostgreSQL. Вместо того чтобы создавать собственный образ, он берет официальный образ PostgreSQL из Docker Hub. Переменные окружения задают пользователя базы данных, пароль и имя базы данных.
Директива depends_on гарантирует, что веб-сервис запустится только после того, как будет запущен контейнер базы данных.
Заключение
Понимание разницы между Dockerfile и Docker Compose очень важно для эффективного развертывания контейнерных приложений.
Используйте Dockerfile, когда вам нужно определить и собрать образ, и используйте Docker Compose для оркестровки нескольких контейнеров с сетью и зависимостями.
см. также:
- 🐳 Docker ADD и COPY: в чем разница?
- 🐳 Как переопределить ENTRYPOINT с помощью docker run
- 🐳 Интерактивный режим Docker после выполнения скрипта
- 🐳 Предпочтительнее использовать compose.yaml, чем docker-compose.yml