Введение
Это исчерпывающее руководство по Docker предоставляет разработчикам и системным администраторам базовые знания для понимания и внедрения технологий контейнеризации. Изучая основные концепции, архитектуру и практическое применение Docker, обучающиеся приобретут критически важные навыки в области современной развертки программного обеспечения и управления инфраструктурой.
Основы Docker
Что такое Docker?
Docker — это мощная технология контейнеризации, которая позволяет разработчикам упаковывать, распространять и запускать приложения согласованно в различных вычислительных средах. Как фундаментальный инструмент в современной разработке программного обеспечения, Docker упрощает развертывание приложений и повышает эффективность системы.
Основные концепции контейнеризации
Контейнеризация позволяет изолировать приложения и запускать их независимо со своими собственными зависимостями. В отличие от традиционных виртуальных машин, контейнеры используют ядро хост-системы, что делает их легкими и быстрыми.
graph TD
A[Код приложения] --> B[Контейнер Docker]
B --> C[Общее ядро хоста]
B --> D[Изолированная среда]
Архитектура Docker
| Компонент | Описание |
|---|---|
| Docker Daemon | Фоновый сервис, управляющий контейнерами |
| Docker Client | Командная строка для взаимодействия с Docker |
| Docker Images | Читаемые шаблоны для создания контейнеров |
| Docker Containers | Запускаемые экземпляры 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) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(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
## Скачать официальный образ Ubuntu
docker pull ubuntu:latest
## Запустить интерактивный контейнер
docker run -it ubuntu:latest /bin/bash
## Внутри контейнера, проверить среду
cat /etc/os-release
Этот пример демонстрирует, как загрузить образ Ubuntu и запустить интерактивный контейнер, демонстрируя простоту Docker в создании изолированных сред.
Управление контейнерами
Операции жизненного цикла контейнера
Docker предоставляет полные команды для управления жизненным циклом контейнеров, позволяя разработчикам эффективно создавать, запускать, останавливать и удалять контейнеры.
graph LR
A[Создать контейнер] --> B[Запустить контейнер]
B --> C[Запущенный контейнер]
C --> D[Остановить контейнер]
D --> E[Удалить контейнер]
Основные команды управления контейнерами Docker
| Команда | Функция | Пример |
|---|---|---|
| docker create | Создать новый контейнер | docker create ubuntu:latest |
| docker start | Запустить остановленный контейнер | docker start container_id |
| docker stop | Остановить запущенный контейнер | docker stop container_id |
| docker rm | Удалить контейнер | docker rm container_id |
| docker ps | Список запущенных контейнеров | docker ps |
| docker ps -a | Список всех контейнеров | docker ps -a |
Пример управления контейнерами
## Создать новый контейнер
docker create --name web_server nginx:latest
## Запустить контейнер
docker start web_server
## Список запущенных контейнеров
docker ps
## Остановить контейнер
docker stop web_server
## Удалить контейнер
docker rm web_server
Управление ресурсами контейнера
## Запустить контейнер с ограничениями ресурсов
docker run -d \
--name limited_container \
--memory=512m \
--cpus=1.5 \
nginx:latest
Этот пример демонстрирует настройку ограничений памяти и процессора для контейнера, обеспечивая контролируемое использование ресурсов.
Расширенный просмотр контейнера
## Подробная информация о контейнере
docker inspect web_server
## Логи контейнера
docker logs web_server
## Статистика контейнера в реальном времени
docker stats web_server
Расширенные методы работы с контейнерами
Настройка сети контейнеров
Docker предоставляет гибкие сетевые опции для сложных архитектур приложений.
graph LR
A[Сеть хоста] --> B[Мостовая сеть]
B --> C[Пользовательская сеть]
C --> D[Сеть наложения]
Типы сетей
| Тип сети | Описание | Сценарий использования |
|---|---|---|
| Мостовая | По умолчанию | Взаимодействие изолированных контейнеров |
| Хоста | Прямая сеть хоста | Высокопроизводительные сценарии |
| Наложения | Сеть для нескольких хостов | Распределённые системы |
Создание пользовательской сети
## Создать пользовательскую сеть
docker network create --driver bridge my_custom_network
## Запустить контейнер в пользовательской сети
docker run -d \
--name web_app \
--network my_custom_network \
nginx:latest
Управление томами
## Создать постоянный том
docker volume create app_data
## Подмонтировать том к контейнеру
docker run -d \
--name database \
-v app_data:/var/lib/database \
postgres:latest
Оркестрация контейнеров с Docker Compose
version: "3"
services:
web:
image: nginx:latest
ports:
- "8080:80"
database:
image: postgres:latest
environment:
POSTGRES_PASSWORD: secret
Мониторинг производительности
## Метрики контейнеров в реальном времени
docker stats
## Использование ресурсов контейнера
docker top container_name
## Профилирование производительности
docker run \
--rm \
-it \
--privileged \
ubuntu:latest \
perf top
Резюме
Docker представляет собой революционный подход к упаковке и развертыванию приложений, предлагая лёгкие, переносимые и эффективные решения для контейнеризации. Овладев основными техниками Docker, разработчики могут оптимизировать свой рабочий процесс, обеспечить согласованность сред и повысить масштабируемость систем на различных вычислительных платформах.



