Введение
Этот учебник предоставляет исчерпывающее руководство по запуску образа Docker и управлению контейнерами Docker. Вы изучите основы Docker, познакомитесь с образами Docker и их областями применения, а также освоите методы извлечения, управления и взаимодействия с контейнерами Docker. Кроме того, учебник охватывает продвинутые темы управления контейнерами, такие как Docker volumes, сети, Compose и Swarm, чтобы помочь вам эффективно развертывать и управлять своими приложениями с помощью Docker.
Основы Docker
Что такое Docker?
Docker — это мощная технология контейнеризации, которая революционизирует развертывание и разработку приложений. Она позволяет разработчикам упаковывать приложения со всеми их зависимостями в стандартизированные единицы, называемые контейнерами, обеспечивая согласованную производительность в различных вычислительных средах.
Основные понятия Docker
Технология контейнеризации
Контейнеризация позволяет приложениям работать в изолированных средах, предоставляя несколько ключевых преимуществ:
| Функция | Описание |
|---|---|
| Изоляция | Каждый контейнер работает независимо |
| Переносимость | Контейнеры могут работать на любой системе, поддерживающей Docker |
| Эффективность | Легковесный по сравнению с традиционными виртуальными машинами |
graph TD
A[Код приложения] --> B[Контейнер Docker]
B --> C[Операционная система хоста]
C --> D[Инфраструктура]
Архитектура Docker
Docker использует архитектуру клиент-сервер с ключевыми компонентами:
- Демон Docker
- Клиент Docker
- Реестр Docker
- Образы Docker
- Контейнеры Docker
Установка на Ubuntu 22.04
## Обновить индекс пакетов
sudo apt update
## Установить зависимости
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Добавить официальный ключ GPG Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## Настроить стабильный репозиторий
echo "deb [arch=$(dpkg --print-architecture)] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Установить Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Основные команды Docker
## Проверить версию Docker
docker --version
## Скачать образ
docker pull ubuntu:latest
## Список образов
docker images
## Запустить контейнер
docker run -it ubuntu:latest /bin/bash
Ключевые преимущества Docker
- Согласованные среды разработки
- Более быстрое развертывание
- Эффективное использование ресурсов
- Масштабируемость
- Упрощенное управление конфигурацией
Работа с образами Docker
Понимание образов Docker
Образы Docker — это шаблоны только для чтения, используемые для создания контейнеров. Они содержат код приложения, среду выполнения, библиотеки и системные инструменты, необходимые для запуска приложения.
graph LR
A[Dockerfile] --> B[Образ Docker]
B --> C[Контейнер Docker]
Команды управления образами
| Команда | Описание |
|---|---|
| docker images | Список локальных образов |
| docker pull | Загрузка образов из реестра |
| docker rmi | Удаление образов |
| docker tag | Разметка образов для версионирования |
Создание Dockerfile
## Базовый образ
FROM ubuntu:22.04
## Метаданные
LABEL maintainer="your-email@example.com"
## Обновление системы
RUN apt-get update && apt-get install -y \
python3 \
pip
## Установка рабочей директории
WORKDIR /app
## Копирование файлов приложения
COPY . /app
## Установка зависимостей
RUN pip install -r requirements.txt
## Экспонирование порта
EXPOSE 5000
## Запуск приложения
CMD ["python3", "app.py"]
Сборка образов Docker
## Сборка образа
docker build -t myapp:v1 .
## Сборка со специфической меткой
docker build -t myapp:latest .
## Сборка с аргументами сборки
docker build --build-arg VERSION=1.0 -t myapp:v1 .
Слои образа Docker
graph TD
A[Базовый образ] --> B[Системные обновления]
B --> C[Установка зависимостей]
C --> D[Копирование кода приложения]
D --> E[Определение команды запуска]
Хранение и совместное использование образов
## Вход в Docker Hub
docker login
## Публикация образа в реестр
docker push username/myapp:v1
## Скачивание образа из реестра
docker pull username/myapp:v1
Рекомендованные практики
- Минимизация размера образа
- Использование многоступенчатой сборки
- Использование кэширования
- Избегание установки ненужных пакетов
Docker на практике
Сетевое взаимодействие контейнеров
Docker предоставляет несколько режимов сетевого взаимодействия для контейнеров:
| Режим сети | Описание |
|---|---|
| Bridge | По умолчанию режим сети |
| Host | Прямой доступ к сети хоста |
| None | Отсутствие сетевого подключения |
## Создание пользовательской сети
docker network create mynetwork
## Запуск контейнера в определенной сети
docker run --network=mynetwork ubuntu
Docker Compose
version: "3"
services:
web:
image: nginx
ports:
- "8080:80"
database:
image: postgres
environment:
POSTGRES_PASSWORD: secret
Рабочий процесс оркестрации контейнеров
graph TD
A[Разработка] --> B[Контейнеризация]
B --> C[Тестирование]
C --> D[Предварительный просмотр]
D --> E[Развертывание в производство]
Масштабирование приложений
## Масштабирование сервисов
docker-compose up -d --scale web=3
## Мониторинг ресурсов контейнера
docker stats
Стратегии развертывания в производство
## Поэтапное обновление
docker service update \
--image myapp:v2 \
--update-parallelism 2 \
--update-delay 10s \
myservice
Мониторинг контейнеров
## Просмотр журналов контейнера
docker logs mycontainer
## Использование ресурсов в реальном времени
docker top mycontainer
Расширенные сети
## Создание сети на основе overlay
docker network create \
-d overlay \
--subnet 10.0.0.0/24 \
my_overlay_network
Практики безопасности
| Практика | Описание |
|---|---|
| Ограничения ресурсов | Ограничение CPU/памяти |
| Файловая система только для чтения | Предотвращение изменений |
| Пользователи, отличные от root | Снижение привилегий контейнера |
Резюме
К концу этого руководства вы получите глубокое понимание того, как запускать образы Docker, управлять контейнерами Docker и использовать передовые методы управления контейнерами для более эффективного развертывания и управления вашими приложениями. Полученные в этом руководстве знания позволят вам использовать преимущества Docker, такие как согласованность, масштабируемость и переносимость, в ваших процессах разработки и развертывания программного обеспечения.



