Создание контейнеров Docker на Ubuntu

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

Введение

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