📝 BLOG

Docker и контейнеризация: основные концепции и использование

Docker упаковывает приложения в контейнеры для согласованного и переносимого развёртывания. Это руководство охватывает основы Docker, написание Dockerfile и управление контейнерами.

Обновлено:

Подготовлено: Gsetsoft

Docker и контейнеризация: основные концепции и использование

Что такое Docker?

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

VM vs Container: виртуальные машины запускают полную операционную систему (ГБ). Контейнеры разделяют ядро ОС хоста и занимают МБ.

Согласованность: решает проблему 'на моей машине работает'. Среды разработки, тестирования и производства используют один и тот же контейнер.

Переносимость: контейнеры работают на любой платформе, поддерживающей Docker (Linux, Windows, Mac, cloud).

Основные концепции Docker

Image: шаблон для контейнера. Хранится в виде слоёв только для чтения. Собирается из Dockerfile.

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

Dockerfile: текстовый файл, определяющий, как собрать образ. Содержит инструкции, такие как FROM, RUN, COPY, CMD.

Registry: репозиторий, хранящий и распространяющий образы. Docker Hub — самый популярный публичный registry.

Volume: хранилище для сохранения данных контейнера. Данные сохраняются даже при удалении контейнера.

Написание Dockerfile

FROM node:18-alpine: используйте Node.js 18 (Alpine Linux) как базовый образ. Alpine — это образ базы небольшого размера.

WORKDIR /app: установите рабочую директорию на /app. Все последующие команды выполняются в этой директории.

COPY package*.json ./: скопируйте package.json и package-lock.json. Установите зависимости с помощью RUN npm install.

COPY . .: скопируйте весь исходный код. Создайте production build с помощью RUN npm run build.

EXPOSE 3000: укажите, что контейнер слушает порт 3000. Определите команду для запуска при старте контейнера с помощью CMD ["npm", "start"].

Основные команды Docker

docker build -t myapp:1.0 .: соберите образ из Dockerfile. Присвойте тег образу с помощью -t (имя:версия).

docker run -p 3000:3000 myapp:1.0: запустите контейнер. Сопоставьте порт хоста с портом контейнера с помощью -p.

docker ps: выведите список запущенных контейнеров. docker ps -a: выведите все контейнеры (включая остановленные).

docker stop <container_id>: остановите контейнер. docker rm <container_id>: удалите контейнер.

docker images: выведите список локальных образов. docker rmi <image_id>: удалите образ.

Docker Compose

Docker Compose — это инструмент для определения и управления мультиконтейнерными приложениями. Настраивается с помощью файла docker-compose.yml.

Сервисы: каждый сервис — это контейнер. Определите сервисы, такие как web (frontend), api (backend), db (база данных).

Volumes: определите volumes для сохранения данных. networks: создайте сети для межсервисной коммуникации.

docker compose up: запустите все сервисы. docker compose down: остановите и удалите все сервисы.

docker compose up -d: запустите в фоновом режиме (detached mode). docker compose logs -f: следите за логами.

Лучшие практики

Маленькие образы: используйте базовые образы Alpine или distroless. Удаляйте build-зависимости из финального образа с помощью multi-stage build.

Layer caching: COPY зависимости (редко меняющиеся) сначала, код (часто меняющийся) позже. Это оптимизирует build cache.

.dockerignore: игнорируйте ненужные файлы (node_modules, .git, logs). Это уменьшает build context.

Безопасность: используйте non-root пользователя вместо root. Создайте пользователя с помощью RUN adduser --disabled-password appuser.

Health check: используйте инструкцию HEALTHCHECK для проверки здоровья контейнера. Docker автоматически перезапускает unhealthy контейнеры.

Ваш выбор конфиденциальности

Необходимые cookie обеспечивают безопасность и сеансы. Базовые визиты учитываются; с вашего разрешения включается дополнительная аналитика. Политика cookie