← Назад к вопросам

Какие сущности должны быть в Docker

1.3 Junior🔥 191 комментариев
#Docker и контейнеризация

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сущности в Docker: От образов до оркестрации

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

1. Образы (Images)

Это неизменяемые шаблоны или "чертежи", содержащие все необходимое для запуска приложения: код, runtime, библиотеки, переменные среды и конфигурационные файлы.

  • Структура: Состоят из слоев (layers), каждый из которых представляет изменение файловой системы. Это обеспечивает эффективное кэширование и повторное использование.
  • Создание: Определяются через Dockerfile — текстовый файл с инструкциями сборки.
# Пример Dockerfile для Python-приложения
FROM python:3.9-slim  # Базовый образ - первый слой
WORKDIR /app           # Установка рабочей директории
COPY requirements.txt .# Копирование файла зависимостей
RUN pip install --no-cache-dir -r requirements.txt  # Слой с установленными пакетами
COPY . .              # Копирование кода приложения
CMD ["python", "app.py"] # Команда запуска контейнера

2. Контейнеры (Containers)

Это работающие экземпляры образов. Если образ — это класс, то контейнер — его объект в runtime.

  • Изоляция: Каждый контейнер имеет свою изолированную файловую систему, сетевой стек и пространство процессов, но разделяет ядро ОС хоста.
  • Жизненный цикл: Создаются, запускаются, останавливаются, удаляются. Их состояние по умолчанию эфемерно — изменения в файловой системе контейнера, не записанные в образ, теряются после его удаления.
# Базовые операции с контейнерами
docker run -d --name my-app -p 8080:80 nginx:alpine  # Запустить контейнер из образа в фоне
docker ps                                           # Показать работающие контейнеры
docker exec -it my-app bash                         # Войти в запущенный контейнер
docker stop my-app                                  # Остановить контейнер

3. Тома (Volumes)

Механизм сохранения данных, генерируемых и используемых контейнерами. Это предпочтительный способ управления состоянием, так как том существует вне жизненного цикла контейнера.

  • Назначение: Сохранение баз данных, конфигураций, логов, пользовательских загрузок.
  • Типы: Именованные тома (управляются Docker), связывание папок хоста (bind mounts), tmpfs (в памяти).
# Создание и использование тома для базы данных
docker volume create db-data
docker run -d --name postgres -v db-data:/var/lib/postgresql/data postgres:13

4. Сети (Networks)

Изолированные виртуальные сетевые пространства, к которым подключаются контейнеры. Позволяют управлять коммуникацией между контейнерами и внешним миром.

  • Драйверы: bridge (сеть по умолчанию для одиночного хоста), host (использует сеть хоста напрямую), overlay (для связи контейнеров на разных хостах в Swarm/Kubernetes), macvlan.
  • Сервисное обнаружение: Docker предоставляет встроенный DNS, позволяющий контейнерам общаться по именам в пределах одной пользовательской сети.
# Создание сети и запуск контейнеров в ней
docker network create my-network
docker run -d --name frontend --network my-network nginx
docker run -d --name backend --network my-network my-api-image
# Контейнер 'frontend' теперь может обратиться к 'backend' по имени

5. Dockerfile

Фундаментальная сущность для автоматизации сборки образов. Каждая инструкция создает новый слой.

  • Ключевые инструкции: FROM (базовый образ), RUN (выполнить команду), COPY/ADD (добавить файлы), WORKDIR (установить рабочую папку), EXPOSE (объявить порт), CMD/ENTRYPOINT (определить запускаемую команду).

6. Docker Compose (Сторонний инструмент, но критически важный)

Инструмент для определения и управления multi— контейнерными приложениями на одном хосте. Описывает все сервисы, сети и тома в декларативном YAML.

  • Сущности в docker-compose.yml: services (контейнеры), networks, volumes, configs, secrets.
# Упрощенный пример docker-compose.yml для веб,
приложения и БД
version: '3.8'
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    depends_on:
      - db
    networks:
      - app-net

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - app-net

volumes:
  postgres_data:

networks:
  app-net:
    driver: bridge

7. Docker Registry / Репозиторий

Система хранения и распространения образов. Центральный публичный registry — Docker Hub. Можно развернуть приватные (Harbor, GitLab Container Registry).

  • Именование образов: [registry_hostname:port/][namespace/]repository:tag (например, mycompany.azurecr.io/team/api:v1.2).

Заключение

Понимание этих сущностей и их взаимодействия — основа работы с Docker. Образ — это шаблон. Контейнер — это запущенный процесс. Тома и сети обеспечивают сохранность данных и коммуникацию. Dockerfile и Compose — инструменты для декларативного описания всей этой инфраструктуры. В современных продакшн-средах эти сущности становятся строительными блоками для оркестраторов, таких как Kubernetes, которые управляют сотнями и тысячами контейнеров, их масштабированием, сетевым взаимодействием и отказоустойчивостью.