Установка и настройка Docker на Ubuntu

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

Введение

Этот учебник предоставляет исчерпывающее руководство по запуску образа 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 использует архитектуру клиент-сервер с ключевыми компонентами:

  1. Демон Docker
  2. Клиент Docker
  3. Реестр Docker
  4. Образы Docker
  5. Контейнеры 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, такие как согласованность, масштабируемость и переносимость, в ваших процессах разработки и развертывания программного обеспечения.