Docker - это платформа для контейнеризации приложений, которая позволяет упаковывать код, зависимости и конфигурации в изолированные контейнеры. В отличие от виртуальных машин, контейнеры используют общее ядро операционной системы, что делает их легковесными и быстрыми. Для разработчиков Docker решает ключевую проблему: "на моей машине работает". Вы можете гарантировать, что приложение будет вести себя одинаково на локальной машине, сервере разработки и в продакшене. Docker также упрощает развертывание микросервисов, интеграцию в CI/CD пайплайны и масштабирование. Согласно опросу Stack Overflow 2024, Docker используют более 60% профессиональных разработчиков, что делает его must-have навыком.
Для начала работы скачайте Docker Desktop с официального сайта (docker.com/products/docker-desktop). Установка интуитивна: запустите установщик и следуйте инструкциям. После установки откройте терминал и проверьте версию:
docker --version
docker compose version
Для Linux (Ubuntu/Debian) используйте менеджер пакетов:
sudo apt update
sudo apt install docker.io docker-compose-v2
sudo systemctl start docker
sudo systemctl enable docker
Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo каждый раз:
sudo usermod -aG docker $USER
# выйдите и зайдите заново или выполните: newgrp docker
Начнем с создания простого приложения. Создайте файл Dockerfile в корне проекта:
# Используем официальный образ Node.js
FROM node:20-alpine
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем package.json и устанавливаем зависимости
COPY package*.json ./
RUN npm install --production
# Копируем исходный код
COPY . .
# Открываем порт
EXPOSE 3000
# Команда запуска
CMD ["node", "server.js"]
Теперь соберем образ и запустим контейнер:
docker build -t my-node-app .
docker run -d -p 3000:3000 --name my-app my-node-app
Проверьте работу: откройте браузер на http://localhost:3000. Для просмотра логов:
docker logs my-app
Остановить и удалить контейнер:
docker stop my-app && docker rm my-app
Docker Compose позволяет запускать многоконтейнерные приложения. Создайте файл compose.yml для приложения с базой данных PostgreSQL:
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_URL=postgres://user:password@db:5432/mydb
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Запустите все сервисы одной командой:
docker compose up -d
Для остановки: docker compose down. Чтобы пересобрать образы: docker compose up -d --build.
Создайте файл .github/workflows/deploy.yml в вашем репозитории:
name: Build and Push Docker Image
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v5
with:
push: true
tags: yourdockerhub/your-app:latest
Не забудьте добавить секреты DOCKER_USERNAME и DOCKER_TOKEN в настройках репозитория (Settings -> Secrets and variables -> Actions).
Для оптимизации образов используйте многоступенчатую сборку (multi-stage builds):
# Этап сборки
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Финальный образ
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Также полезно настроить healthcheck в Dockerfile:
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
Docker - это не просто утилита, а целая экосистема, которая меняет подход к разработке и деплою. Мы рассмотрели установку, создание Dockerfile, работу с Compose для многоконтейнерных приложений и интеграцию с CI/CD. Освоив эти базовые, но мощные техники, вы сможете автоматизировать развертывание, улучшить воспроизводимость среды и сократить время на отладку. Рекомендую изучить Docker Swarm или Kubernetes для оркестрации, а также практиковаться на реальных проектах. Помните: контейнеры - это стандарт современной разработки, и инвестиции в их изучение окупаются многократно.
Комментариев пока нет