Docker для разработчиков: образы, контейнеры и Compose

DevOps2026-10-09TryQuickToolBox

Вы, вероятно, слышали о Docker и контейнерах, но, возможно, не уверены, как они вписываются в ваш повседневный рабочий процесс разработки. Или, возможно, вы пробовали Docker, но концепции образов, контейнеров и Compose кажутся запутанными. Это руководство проведет вас через основы с практическими примерами, чтобы вы могли начать эффективно использовать Docker в своих проектах.

Что такое Docker-образы и контейнеры?

Представьте Docker-образ как чертеж вашего приложения. Он содержит все необходимое для запуска вашего кода: операционную систему, среду выполнения, библиотеки и файлы вашего приложения. Образы неизменяемы и создаются из Dockerfile.

Контейнер — это запущенный экземпляр образа. Когда вы запускаете контейнер, Docker создает изолированную среду из образа. Вы можете запустить несколько контейнеров из одного образа, каждый со своим состоянием.

Ключевые различия

Образ Контейнер
Шаблон только для чтения Запускаемый экземпляр
Создается из Dockerfile Создается из образа
Хранится в реестре Работает на хосте
Неизменяемый Эфемерный (можно остановить, запустить, удалить)

Создание вашего первого Docker-образа

Давайте создадим простое Node.js-приложение и контейнеризируем его. Начните с Dockerfile в корне вашего проекта:

# Use an official Node.js runtime as a parent image
FROM node:18-alpine

# Set the working directory
WORKDIR /app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm ci --only=production

# Copy the rest of the application code
COPY . .

# Expose the port the app runs on
EXPOSE 3000

# Define the command to run the app
CMD ["node", "server.js"]

Соберите образ с помощью:

docker build -t my-node-app .

Запустите контейнер из образа:

docker run -p 3000:3000 -d my-node-app

Теперь ваше приложение доступно по адресу http://localhost:3000.

Управление контейнерами

Вот основные команды для управления контейнерами:

Упрощение многоконтейнерных приложений с помощью Docker Compose

Реальные приложения часто требуют нескольких сервисов: веб-сервер, база данных, кэш и т.д. Управлять ими с помощью отдельных команд docker run утомительно. Docker Compose позволяет определять и запускать многоконтейнерные приложения с помощью YAML-файла.

Создайте docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production
      - DB_HOST=db
    depends_on:
      - db
  db:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=mydb
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

Запустите все сервисы с помощью:

docker compose up -d

Остановите и удалите их с помощью:

docker compose down

Лучшие практики для разработки

Часто задаваемые вопросы

В чем разница между образом и контейнером?

Образ — это шаблон только для чтения, который определяет приложение и его зависимости. Контейнер — это запущенный экземпляр образа с записываемым слоем сверху.

Можно ли использовать Docker Compose в production?

Docker Compose в первую очередь предназначен для разработки и тестирования. Для production рассмотрите инструменты оркестрации, такие как Kubernetes или Docker Swarm.

Как сохранить данные в Docker?

Используйте тома или bind mounts. Тома управляются Docker и являются предпочтительным способом сохранения данных, создаваемых контейнерами.

Готовы контейнеризировать ваше приложение? Если вам нужно преобразовать документацию или руководства в PDF для вашей команды, попробуйте наш конвертер Word в PDF, чтобы делиться отточенными документами.