Развертывание контейнеров Docker на Ubuntu

DockerBeginner
Практиковаться сейчас

Введение

Это исчерпывающее руководство по 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, разработчики могут оптимизировать свой рабочий процесс, обеспечить согласованность сред и повысить масштабируемость систем на различных вычислительных платформах.