Введение
Это исчерпывающее руководство по Docker предоставляет разработчикам и ИТ-специалистам необходимые знания о технологии контейнеров. Узнайте, как установить Docker на Ubuntu, освойте основные концепции и используйте контейнеризацию для согласованного развертывания приложений в различных вычислительных средах.
Основы Docker
Введение в технологию Docker
Docker — это мощная платформа для технологии контейнеров, которая революционизирует развертывание программного обеспечения и виртуализацию. Как инструмент с открытым исходным кодом, Docker позволяет разработчикам упаковывать, распространять и запускать приложения согласованно в различных вычислительных средах.
Основные концепции Docker
Что такое Docker?
Docker — это лёгкая технология виртуализации, которая позволяет разработчикам создавать, развертывать и запускать приложения с помощью контейнеров. В отличие от традиционных виртуальных машин, контейнеры используют ядро хост-системы, что делает их более эффективными и быстрыми в запуске.
Архитектура контейнеров
graph TD
A[Двигатель Docker] --> B[Выполнение контейнеров]
A --> C[Образы Docker]
B --> D[Контейнер приложения]
C --> D
Ключевые компоненты 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=amd64 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
## Проверить версию Docker
docker --version
## Проверить установку Docker
docker run hello-world
## Список запущенных контейнеров
docker ps
## Список всех контейнеров
docker ps -a
Преимущества Docker
Docker предоставляет значительные преимущества для современной разработки программного обеспечения:
- Согласованная среда разработки и производства
- Более быстрое развертывание приложений
- Улучшенное использование ресурсов
- Упрощённое управление зависимостями
- Улучшенная масштабируемость и переносимость
Создание образов Docker
Понимание образов Docker
Образы Docker — это шаблоны только для чтения, используемые для создания контейнеров. Они содержат код приложения, среду выполнения, библиотеки, переменные окружения и конфигурационные файлы, необходимые для запуска приложения.
Основы Dockerfile
Dockerfile — это текстовый документ, содержащий инструкции для сборки образа Docker. Каждая инструкция создаёт новый слой в образе.
Структура Dockerfile
graph TD
A[Базовый образ] --> B[Установка зависимостей]
B --> C[Копирование кода приложения]
C --> D[Установка переменных окружения]
D --> E[Определение команды запуска]
Общие инструкции Dockerfile
| Инструкция | Назначение | Пример |
|---|---|---|
| FROM | Указать базовый образ | FROM ubuntu:22.04 |
| RUN | Выполнить команды | RUN apt-get update |
| COPY | Скопировать файлы в образ | COPY ./app /application |
| WORKDIR | Установить рабочую директорию | WORKDIR /application |
| CMD | Определить команду запуска | CMD ["python", "app.py"] |
Создание простого образа веб-приложения Python
Пример Dockerfile
## Использовать официальный образ Python как базовый
FROM python:3.9-slim
## Установить рабочую директорию
WORKDIR /app
## Скопировать файл requirements
COPY requirements.txt .
## Установить зависимости
RUN pip install --no-cache-dir -r requirements.txt
## Скопировать код приложения
COPY . .
## Экспонировать порт
EXPOSE 5000
## Определить команду запуска
CMD ["python", "app.py"]
Сборка образа Docker
## Собрать образ с тегом
docker build -t hello-world-app .
## Список локальных образов
docker images
## Запустить созданный образ
docker run -p 5000:5000 hello-world-app
Команды управления образами
## Удалить определённый образ
docker rmi hello-world-app
## Удалить все неиспользуемые образы
docker image prune
## Скачать образ с Docker Hub
docker pull ubuntu:22.04
Рекомендации
- Использовать минимальные базовые образы
- Минимизировать количество слоёв
- Избегать установки ненужных пакетов
- Использовать многоэтапную сборку для создания более компактных образов
- Эффективно использовать кэш сборки
Управление контейнерами
Обзор жизненного цикла контейнеров
Контейнеры Docker имеют определённый жизненный цикл с несколькими состояниями, от создания до завершения. Понимание этих состояний имеет решающее значение для эффективного управления контейнерами.
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
Основные операции с контейнерами
Команды управления контейнерами
| Команда | Функция | Пример |
|---|---|---|
| docker create | Создать контейнер | docker create nginx |
| docker start | Запустить контейнер | docker start container_id |
| docker stop | Остановить работающий контейнер | docker stop container_id |
| docker restart | Перезапустить контейнер | docker restart container_id |
| docker rm | Удалить контейнер | docker rm container_id |
Запуск контейнеров
## Запустить контейнер в фоновом режиме
docker run nginx
## Запустить контейнер в фоновом режиме
docker run -d nginx
## Запустить контейнер с отображением порта
docker run -p 8080:80 nginx
## Запустить контейнер с пользовательским именем
docker run --name web-server nginx
Проверка и мониторинг контейнеров
## Список работающих контейнеров
docker ps
## Список всех контейнеров
docker ps -a
## Просмотр логов контейнера
docker logs container_id
## Просмотр подробностей о контейнере
docker inspect container_id
## Мониторинг использования ресурсов контейнера
docker stats
Сети контейнеров
## Список сетей Docker
docker network ls
## Создание пользовательской сети
docker network create mynetwork
## Подключение контейнера к сети
docker network connect mynetwork container_id
Расширенное управление контейнерами
Ограничения ресурсов контейнера
## Ограничение ЦП и памяти
docker run -d \
--cpus="1.5" \
--memory="512m" \
nginx
Масштабирование контейнеров
## Создание нескольких экземпляров контейнеров
docker run -d -p 8001:80 nginx
docker run -d -p 8002:80 nginx
docker run -d -p 8003:80 nginx
Стратегии развертывания контейнеров
Управление постоянными данными
## Создание тома
docker volume create myvolume
## Подмонтирование тома к контейнеру
docker run -v myvolume:/app/data nginx
Настройка окружения
## Установка переменных окружения
docker run -e DATABASE_URL=localhost nginx
Резюме
Docker революционизирует разработку программного обеспечения, предоставляя лёгкие и переносимые контейнеры, которые упрощают развертывание приложений. Овладев основными компонентами Docker, процессом установки и базовыми командами, разработчики могут создавать более эффективные, масштабируемые и воспроизводимые среды для программного обеспечения с минимальными накладными расходами и максимальной гибкостью.



