Docker и docker-compose: основы и примеры
Введение в Docker и docker-compose
Docker — это платформа для разработки, доставки и запуска приложений в изолированных контейнерах. Контейнеры позволяют упаковать приложение с его зависимостями и запускать его в любом окружении. Это делает Docker идеальным инструментом для разработки, тестирования и развертывания приложений. Контейнеры обеспечивают изоляцию, что позволяет избежать конфликтов между различными версиями библиотек и зависимостей. Это особенно полезно в средах, где требуется стабильность и предсказуемость.
docker-compose — это инструмент для определения и запуска многоконтейнерных Docker-приложений. С помощью файла docker-compose.yml
можно описать конфигурацию всех сервисов, сетей и томов, необходимых для вашего приложения, и запустить их одной командой. Это упрощает управление сложными приложениями, состоящими из нескольких взаимосвязанных сервисов. Например, веб-приложение может состоять из веб-сервера, базы данных и кэш-сервиса, и все эти компоненты можно легко управлять с помощью docker-compose.
Установка и настройка Docker
Установка Docker
Для установки Docker на вашу систему следуйте официальной документации для вашей операционной системы:
- Windows: Установка Docker на Windows
- macOS: Установка Docker на macOS
- Linux: Установка Docker на Linux
Процесс установки может немного отличаться в зависимости от операционной системы, но в целом он достаточно прост и хорошо документирован. На Windows и macOS установка включает Docker Desktop, который предоставляет удобный графический интерфейс для управления Docker-контейнерами. На Linux установка может потребовать выполнения нескольких команд в терминале, но это также несложно.
Проверка установки
После установки Docker, убедитесь, что он работает корректно, выполнив команду:
docker --version
Вы должны увидеть версию Docker, установленную на вашем компьютере. Это подтверждает, что Docker установлен и готов к использованию. Если команда не работает, проверьте, правильно ли вы следовали инструкциям по установке и не пропустили ли какой-либо шаг.
Установка docker-compose
docker-compose можно установить с помощью менеджера пакетов вашей операционной системы или скачать бинарный файл с официального сайта:
- Windows и macOS: docker-compose устанавливается вместе с Docker Desktop.
- Linux: Следуйте инструкциям на официальном сайте.
Проверьте установку, выполнив команду:
docker-compose --version
Вы должны увидеть версию docker-compose, установленную на вашем компьютере. Это подтверждает, что docker-compose установлен и готов к использованию. Если команда не работает, проверьте, правильно ли вы следовали инструкциям по установке и не пропустили ли какой-либо шаг.
Основные команды Docker: создание и управление контейнерами
Создание контейнера
Для создания контейнера используется команда docker run
. Например, чтобы запустить контейнер с Nginx, выполните:
docker run -d -p 80:80 nginx
Эта команда скачает образ Nginx (если он еще не скачан), запустит контейнер в фоновом режиме (-d
) и пробросит порт 80 на ваш локальный порт 80 (-p 80:80
). Это позволяет вам получить доступ к веб-серверу Nginx через ваш браузер по адресу http://localhost
. Вы можете использовать другие образы и настраивать порты и параметры в зависимости от ваших нужд.
Управление контейнерами
Список запущенных контейнеров:
shСкопировать кодdocker ps
Эта команда выводит список всех запущенных контейнеров, включая их идентификаторы, имена, образы и статус. Это полезно для мониторинга состояния ваших контейнеров и управления ими.
Остановка контейнера:
shСкопировать кодdocker stop <container_id>
Эта команда останавливает контейнер с указанным идентификатором. Вы можете использовать идентификатор контейнера, полученный из команды
docker ps
. Остановка контейнера позволяет освободить ресурсы, которые он использует.Удаление контейнера:
shСкопировать кодdocker rm <container_id>
Эта команда удаляет остановленный контейнер с указанным идентификатором. Удаление контейнера освобождает дисковое пространство и позволяет вам управлять количеством контейнеров на вашем компьютере.
Список всех контейнеров (включая остановленные):
shСкопировать кодdocker ps -a
Эта команда выводит список всех контейнеров, включая остановленные. Это полезно для получения полной картины всех контейнеров, которые были созданы на вашем компьютере.
Создание и использование docker-compose.yml
Структура файла docker-compose.yml
Файл docker-compose.yml
используется для определения конфигурации всех сервисов вашего приложения. Пример файла для простого веб-приложения на Nginx и Redis:
version: '3'
services:
web:
image: nginx
ports:
– "80:80"
redis:
image: redis
В этом примере определены два сервиса: web
и redis
. Сервис web
использует образ Nginx и пробрасывает порт 80 на локальный порт 80. Сервис redis
использует образ Redis. Вы можете добавлять дополнительные сервисы и настраивать их параметры в зависимости от ваших нужд.
Запуск сервисов
Для запуска всех сервисов, определенных в docker-compose.yml
, выполните команду:
docker-compose up
Эта команда запустит все сервисы в текущем терминале и выведет их логи. Для запуска в фоновом режиме добавьте флаг -d
:
docker-compose up -d
Это позволяет вам продолжать работать в терминале, пока сервисы работают в фоновом режиме. Вы можете использовать эту команду для запуска всех сервисов вашего приложения с одной команды.
Остановка и удаление сервисов
Остановка всех сервисов:
shСкопировать кодdocker-compose down
Эта команда останавливает все сервисы, определенные в
docker-compose.yml
, и удаляет их контейнеры. Это полезно для освобождения ресурсов и завершения работы всех сервисов.Удаление всех контейнеров, сетей и томов, созданных docker-compose:
shСкопировать кодdocker-compose down --volumes
Эта команда дополнительно удаляет все тома, созданные docker-compose. Это полезно для полного удаления всех данных, связанных с вашими сервисами.
Примеры использования Docker и docker-compose в реальных проектах
Пример 1: Веб-приложение на Node.js и MongoDB
Создадим файл docker-compose.yml
для веб-приложения на Node.js с базой данных MongoDB:
version: '3'
services:
web:
image: node:14
volumes:
– .:/app
working_dir: /app
command: npm start
ports:
– "3000:3000"
depends_on:
– mongo
mongo:
image: mongo
ports:
– "27017:27017"
В этом примере определены два сервиса: web
и mongo
. Сервис web
использует образ Node.js версии 14, монтирует текущую директорию в контейнер и запускает команду npm start
. Сервис mongo
использует образ MongoDB и пробрасывает порт 27017 на локальный порт 27017. Сервис web
зависит от сервиса mongo
, что означает, что MongoDB будет запущен перед запуском веб-приложения.
Пример 2: Использование Docker в GitHub Actions
Для автоматизации CI/CD процессов можно использовать Docker в GitHub Actions. Пример workflow для сборки и тестирования приложения:
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
– name: Checkout code
uses: actions/checkout@v2
– name: Set up Docker Buildx
uses: docker/setup-buildx-action@v1
– name: Build and push Docker image
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: user/app:latest
– name: Run tests
run: docker run user/app:latest npm test
Этот workflow запускается при каждом пуше в репозиторий. Он выполняет следующие шаги: проверяет код, настраивает Docker Buildx, собирает и пушит Docker-образ, а затем запускает тесты внутри контейнера. Это позволяет автоматизировать процесс сборки и тестирования вашего приложения, обеспечивая стабильность и предсказуемость.
Пример 3: Многоконтейнерное приложение с Nginx, Flask и PostgreSQL
Создадим файл docker-compose.yml
для многоконтейнерного приложения с Nginx, Flask и PostgreSQL:
version: '3'
services:
web:
image: flask-app
build: ./web
ports:
– "5000:5000"
depends_on:
– db
db:
image: postgres
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydatabase
nginx:
image: nginx
ports:
– "80:80"
volumes:
– ./nginx.conf:/etc/nginx/nginx.conf
depends_on:
– web
В этом примере определены три сервиса: web
, db
и nginx
. Сервис web
использует образ Flask-приложения и пробрасывает порт 5000 на локальный порт 5000. Сервис db
использует образ PostgreSQL и настраивает параметры базы данных через переменные окружения. Сервис nginx
использует образ Nginx и пробрасывает порт 80 на локальный порт 80. Сервис nginx
зависит от сервиса web
, что означает, что Flask-приложение будет запущено перед запуском Nginx.
Эти примеры помогут вам начать работу с Docker и docker-compose. Надеюсь, они будут полезны для ваших проектов! 🚀