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

DevOps2026-10-01TryQuickToolBox

Как разработчик, вы, вероятно, сталкивались с разочарованием из-за несоответствия окружений: «У меня это работает!» Docker решает эту проблему, упаковывая приложения в контейнеры. Это руководство объясняет Docker-образы, контейнеры и Compose, чтобы помочь вам создавать, доставлять и запускать приложения согласованно.

Что такое Docker?

Docker — это платформа для разработки, доставки и запуска приложений в контейнерах. Контейнеры — это легковесные, автономные, исполняемые пакеты, которые включают всё необходимое для запуска программного обеспечения: код, среду выполнения, системные инструменты, библиотеки и настройки.

Образы vs. контейнеры

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

Работа с образами

Образы создаются из Dockerfile — текстового файла с инструкциями. Вот простой пример для Node.js:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

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

docker build -t my-app .

Список образов: docker images

Запуск контейнеров

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

docker run -d -p 3000:3000 --name my-container my-app

Это запускает контейнер в отсоединённом режиме (-d), сопоставляет порт 3000 и называет его my-container.

Список запущенных контейнеров: docker ps

Остановить контейнер: docker stop my-container

Удалить контейнер: docker rm my-container

Зачем использовать Docker Compose?

Когда ваше приложение зависит от нескольких сервисов (база данных, кэш и т. д.), управление отдельными контейнерами становится утомительным. Docker Compose позволяет определять и запускать многоконтейнерные приложения с помощью YAML-файла.

Пример файла Compose

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

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

Запустить все сервисы: docker compose up -d

Остановить и удалить: docker compose down

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

Шпаргалка по основным командам

КомандаОписание
docker build -t name .Собрать образ из Dockerfile
docker run -p host:container imageЗапустить контейнер и сопоставить порты
docker ps -aПоказать все контейнеры
docker exec -it container bashОткрыть оболочку внутри запущенного контейнера
docker compose upЗапустить сервисы, определённые в файле Compose
docker compose logs -fСледить за логами всех сервисов

FAQ

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

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

Когда следует использовать Docker Compose?

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

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

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

Готовы оптимизировать свой рабочий процесс с Docker? Попробуйте наш Nginx Log Analyzer для быстрой отладки логов контейнеров.