Docker Шпаргалка

Изучите Docker с практическими лабораторными работами

Изучите контейнеризацию Docker с помощью практических лабораторных работ и сценариев реального мира. LabEx предлагает комплексные курсы по Docker, охватывающие управление контейнерами, сборку образов, Docker Compose, сетевое взаимодействие, тома и развертывание. Освойте оркестрацию контейнеров и современные методы развертывания приложений.

Установка и Настройка

Установка в Linux

Установка Docker в системах Ubuntu/Debian.

# Обновить менеджер пакетов
sudo apt update
# Установить предварительные требования
sudo apt install apt-transport-https ca-certificates curl
software-properties-common
# Добавить официальный GPG ключ Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg
| sudo apt-key add -
# Добавить репозиторий Docker
sudo add-apt-repository "deb [arch=amd64]
https://download.docker.com/linux/ubuntu bionic stable"
# Установить Docker
sudo apt update && sudo apt install docker-ce
# Запустить службу Docker
sudo systemctl start docker
sudo systemctl enable docker

Windows и macOS

Установите Docker Desktop для управления с помощью графического интерфейса.

# Windows: Скачать Docker Desktop с docker.com
# macOS: Использовать Homebrew или скачать с docker.com
brew install --cask docker
# Или скачать напрямую с:
# https://www.docker.com/products/docker-desktop

Настройка после установки

Настройка Docker для использования без прав root и проверка установки.

# Добавить пользователя в группу docker (Linux)
sudo usermod -aG docker $USER
# Выйти и войти снова для применения изменений группы
# Проверить установку Docker
docker --version
docker run hello-world

Установка Docker Compose

Установка Docker Compose для многоконтейнерных приложений.

# Linux: Установка через curl
sudo curl -L
"https://github.com/docker/compose/releases/download
/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o
/usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Проверить установку
docker-compose --version
# Примечание: Docker Desktop включает Compose

Основные команды Docker

Информация о системе: docker version / docker system info

Проверить детали установки и среды Docker.

# Показать информацию о версии Docker
docker version
# Показать системную информацию Docker
information
docker system info
# Показать справку по командам Docker
docker help
docker <command> --help

Запуск контейнеров: docker run

Создать и запустить контейнер из образа.

# Запустить контейнер интерактивно
docker run -it ubuntu:latest bash
# Запустить контейнер в фоновом режиме
(detached)
docker run -d --name my-container
nginx
# Запустить с сопоставлением портов
docker run -p 8080:80 nginx
# Запустить с автоматическим удалением после завершения работы
docker run --rm hello-world
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает docker run -d?
Запускает контейнер в режиме отладки
Удаляет контейнер после его остановки
Запускает контейнер в фоновом режиме (detached mode)
Запускает контейнер с настройками по умолчанию

Список контейнеров: docker ps

Просмотр запущенных и остановленных контейнеров.

# Список запущенных контейнеров
docker ps
# Список всех контейнеров (включая
остановленные)
docker ps -a
# Список только идентификаторов контейнеров
docker ps -q
# Показать последний созданный контейнер
docker ps -l

Управление контейнерами

Жизненный цикл контейнера: start / stop / restart

Управление состоянием выполнения контейнера.

# Остановить запущенный контейнер
docker stop container_name
# Запустить остановленный контейнер
docker start container_name
# Перезапустить контейнер
docker restart container_name
# Приостановить/возобновить процессы контейнера
docker pause container_name
docker unpause container_name

Выполнение команд: docker exec

Выполнение команд внутри запущенных контейнеров.

# Выполнить интерактивную оболочку bash
docker exec -it container_name bash
# Выполнить одну команду
docker exec container_name ls -la
# Выполнить от имени другого пользователя
docker exec -u root container_name whoami
# Выполнить в определенной директории
docker exec -w /app container_name pwd

Удаление контейнеров: docker rm

Удаление контейнеров из системы.

# Удалить остановленный контейнер
docker rm container_name
# Принудительно удалить запущенный контейнер
docker rm -f container_name
# Удалить несколько контейнеров
docker rm container1 container2
# Удалить все остановленные контейнеры
docker container prune

Логи контейнеров: docker logs

Просмотр вывода контейнера и отладка проблем.

# Просмотр логов контейнера
docker logs container_name
# Следить за логами в реальном времени
docker logs -f container_name
# Показать только недавние логи
docker logs --tail 50 container_name
# Показать логи с временными метками
docker logs -t container_name

Управление образами

Сборка образов: docker build

Создание образов Docker из Dockerfile.

# Собрать образ из текущей директории
docker build .
# Собрать и пометить образ
docker build -t myapp:latest .
# Собрать с аргументами сборки
docker build --build-arg VERSION=1.0 -t myapp .
# Собрать без использования кэша
docker build --no-cache -t myapp .
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает docker build -t myapp:latest .?
Собирает образ Docker с тегом "myapp:latest" из текущей директории
Запускает контейнер с именем "myapp"
Загружает образ "myapp:latest" из Docker Hub
Удаляет образ "myapp:latest"

Инспекция образов: docker images / docker inspect

Перечисление и изучение образов Docker.

# Список всех локальных образов
docker images
# Список образов с определенными фильтрами
docker images nginx
# Показать детали образа
docker inspect image_name
# Посмотреть историю сборки образа
docker history image_name

Операции с реестром: docker pull / docker push

Загрузка и выгрузка образов в реестры.

# Загрузить образ из Docker Hub
docker pull nginx:latest
# Загрузить конкретную версию
docker pull ubuntu:20.04
# Выгрузить образ в реестр
docker push myusername/myapp:latest
# Пометить образ перед выгрузкой
docker tag myapp:latest myusername/myapp:v1.0

Очистка образов: docker rmi / docker image prune

Удаление неиспользуемых образов для освобождения дискового пространства.

# Удалить конкретный образ
docker rmi image_name
# Удалить неиспользуемые образы
docker image prune
# Удалить все неиспользуемые образы (не только висячие)
docker image prune -a
# Принудительно удалить образ
docker rmi -f image_name

Основы Dockerfile

Основные инструкции

Основные команды Dockerfile для сборки образов.

# Базовый образ
FROM ubuntu:20.04
# Установить информацию о сопровождающем
LABEL maintainer="user@example.com"
# Установить пакеты
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    && rm -rf /var/lib/apt/lists/*
# Скопировать файлы с хоста в контейнер
COPY app.py /app/
# Установить рабочую директорию
WORKDIR /app
# Открыть порт
EXPOSE 8000
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Каково назначение инструкции FROM в Dockerfile?
Она копирует файлы с хоста в контейнер
Она указывает базовый образ, на котором будет производиться сборка
Она устанавливает переменные окружения
Она определяет команду, которая будет выполняться при запуске контейнера

Конфигурация времени выполнения

Настройка того, как запускается контейнер.

# Установить переменные окружения
ENV PYTHON_ENV=production
ENV PORT=8000
# Создать пользователя для безопасности
RUN groupadd -r appuser && useradd -r -g appuser
appuser
USER appuser
# Определить команду запуска
CMD ["python3", "app.py"]
# Или использовать ENTRYPOINT для фиксированных команд
ENTRYPOINT ["python3"]
CMD ["app.py"]
# Установить проверку работоспособности
HEALTHCHECK --interval=30s --timeout=3s \
  CMD curl -f http://localhost:8000/ || exit 1

Docker Compose

Основные команды Compose: docker-compose up / docker-compose down

Запуск и остановка многоконтейнерных приложений.

# Запустить службы в режиме вывода в консоль
docker-compose up
# Запустить службы в фоновом режиме
docker-compose up -d
# Собрать и запустить службы
docker-compose up --build
# Остановить и удалить службы
docker-compose down
# Остановить и удалить с томами
docker-compose down -v
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

Что делает docker-compose up -d?
Останавливает все запущенные контейнеры
Собирает образы без запуска контейнеров
Показывает логи всех служб
Запускает все службы, определенные в docker-compose.yml, в фоновом режиме

Управление службами

Управление отдельными службами в приложениях Compose.

# Список запущенных служб
docker-compose ps
# Просмотр логов службы
docker-compose logs service_name
# Следить за логами всех служб
docker-compose logs -f
# Перезапустить службу
docker-compose restart service_name

Пример docker-compose.yml

Пример конфигурации многосервисного приложения.

version: '3.8'
services:
  web:
    build: .
    ports:
      - "8000:8000"
    environment:
      -
DATABASE_URL=postgresql://user:pass@db:5432/myapp
    depends_on:
      - db
    volumes:
      - .:/app

  db:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - db_data:/var/lib/postgresql/data
volumes:
  db_data:

Сетевое взаимодействие и тома

Сетевое взаимодействие контейнеров

Подключение контейнеров и открытие служб.

# Список сетей
docker network ls
# Создать пользовательскую сеть
docker network create mynetwork
# Запустить контейнер в определенной сети
docker run --network mynetwork nginx
# Подключить запущенный контейнер к сети
docker network connect mynetwork container_name
# Проверить детали сети
docker network inspect mynetwork

Сопоставление портов

Открытие портов контейнера для хост-системы.

# Сопоставление одного порта
docker run -p 8080:80 nginx
Викторина

Войдите в систему, чтобы ответить на эту викторину и отслеживать свой прогресс обучения

В команде docker run -p 8080:80 nginx, что означают номера портов?
8080 — это порт хоста, 80 — это порт контейнера
80 — это порт хоста, 8080 — это порт контейнера
Оба порта — порты контейнера
Оба порта — порты хоста
# Сопоставление нескольких портов
docker run -p 8080:80 -p 8443:443 nginx
# Сопоставление с определенным интерфейсом хоста
docker run -p 127.0.0.1:8080:80 nginx
# Открыть все порты, определенные в образе
docker run -P nginx

Тома данных: docker volume

Сохранение и совместное использование данных между контейнерами.

# Создать именованный том
docker volume create myvolume
# Список всех томов
docker volume ls
# Проверить детали тома
docker volume inspect myvolume
# Удалить том
docker volume rm myvolume
# Удалить неиспользуемые тома
docker volume prune

Монтирование томов

Монтирование томов и директорий хоста в контейнерах.

# Смонтировать именованный том
docker run -v myvolume:/data nginx
# Смонтировать директорию хоста (bind mount)
docker run -v /host/path:/container/path nginx
# Смонтировать текущую директорию
docker run -v $(pwd):/app nginx
# Монтирование только для чтения
docker run -v /host/path:/container/path:ro nginx

Инспекция и отладка контейнеров

Детали контейнера: docker inspect

Получение подробной информации о контейнерах и образах.

# Проверить конфигурацию контейнера
docker inspect container_name
# Получить конкретную информацию с использованием формата
docker inspect --format='{{.State.Status}}'
container_name
# Получить IP-адрес
docker inspect --format='{{.NetworkSettings.IPAddress}}'
container_name
# Получить смонтированные тома
docker inspect --format='{{.Mounts}}' container_name

Мониторинг ресурсов

Мониторинг использования ресурсов и производительности контейнеров.

# Показать запущенные процессы в контейнере
docker top container_name
# Отобразить статистику использования ресурсов в реальном времени
docker stats
# Показать статистику для конкретного контейнера
docker stats container_name
# Мониторинг событий в реальном времени
docker events

Операции с файлами: docker cp

Копирование файлов между контейнерами и хост-системой.

# Скопировать файл из контейнера на хост
docker cp container_name:/path/to/file ./
# Скопировать файл с хоста в контейнер
docker cp ./file container_name:/path/to/destination
# Скопировать директорию
docker cp ./directory
container_name:/path/to/destination/
# Копировать с архивированием для сохранения разрешений
docker cp -a ./directory container_name:/path/

Устранение неполадок

Отладка проблем контейнера и сетевых проблем.

# Проверить код выхода контейнера
docker inspect --format='{{.State.ExitCode}}'
container_name
# Просмотреть процессы контейнера
docker exec container_name ps aux
# Проверить сетевое подключение
docker exec container_name ping google.com
# Проверить использование диска
docker exec container_name df -h

Реестр и аутентификация

Аутентификация и взаимодействие с Docker Hub.

# Войти в Docker Hub
docker login
# Войти в конкретный реестр
docker login registry.example.com
# Поиск образов в Docker Hub
docker search nginx
# Поиск с фильтром
docker search --filter stars=100 nginx

Тегирование и публикация образов

Подготовка и публикация образов в реестрах.

# Пометить образ для реестра
docker tag myapp:latest username/myapp:v1.0
docker tag myapp:latest
registry.example.com/myapp:latest
# Выгрузить в Docker Hub
docker push username/myapp:v1.0
# Выгрузить в частный реестр
docker push registry.example.com/myapp:latest

Частный реестр

Работа с частными реестрами Docker.

# Загрузить из частного реестра
docker pull registry.company.com/myapp:latest
# Запустить локальный реестр
docker run -d -p 5000:5000 --name registry registry:2
# Выгрузить в локальный реестр
docker tag myapp localhost:5000/myapp
docker push localhost:5000/myapp

Безопасность образов

Проверка целостности и безопасности образов.

# Включить доверие к содержимому Docker
export DOCKER_CONTENT_TRUST=1
# Подписать и выгрузить образ
docker push username/myapp:signed
# Проверить подписи образов
docker trust inspect username/myapp:signed
# Сканировать образы на уязвимости
docker scan myapp:latest

Очистка и обслуживание системы

Очистка системы: docker system prune

Удаление неиспользуемых ресурсов Docker для освобождения дискового пространства.

# Удалить неиспользуемые контейнеры, сети, образы
docker system prune
# Включить неиспользуемые тома в очистку
docker system prune -a --volumes
# Удалить все (использовать с осторожностью)
docker system prune -a -f
# Показать использование дискового пространства
docker system df

Целевая очистка

Удаление конкретных типов неиспользуемых ресурсов.

# Удалить остановленные контейнеры
docker container prune
# Удалить неиспользуемые образы
docker image prune -a
# Удалить неиспользуемые тома
docker volume prune
# Удалить неиспользуемые сети
docker network prune

Массовые операции

Выполнение операций над несколькими контейнерами/образами.

# Остановить все запущенные контейнеры
docker stop $(docker ps -q)
# Удалить все контейнеры
docker rm $(docker ps -aq)
# Удалить все образы
docker rmi $(docker images -q)
# Удалить только висячие образы
docker rmi $(docker images -f "dangling=true" -q)

Ограничение ресурсов

Контроль потребления ресурсов контейнерами.

# Ограничить использование памяти
docker run --memory=512m nginx
# Ограничить использование ЦП
docker run --cpus="1.5" nginx
# Ограничить и ЦП, и память
docker run --memory=1g --cpus="2.0" nginx
# Установить политику перезапуска
docker run --restart=always nginx

Конфигурация и настройки Docker

Конфигурация демона

Настройка демона Docker для производственного использования.

# Отредактировать конфигурацию демона
sudo nano
/etc/docker/daemon.json
# Пример конфигурации:
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "storage-driver": "overlay2"
}
# Перезапустить службу Docker
sudo systemctl restart docker

Переменные окружения

Настройка поведения клиента Docker с помощью переменных окружения.

# Установить хост Docker
export
DOCKER_HOST=tcp://remote-
docker:2376
# Включить проверку TLS
export DOCKER_TLS_VERIFY=1
export
DOCKER_CERT_PATH=/path/to/c
erts
# Установить реестр по умолчанию
export
DOCKER_REGISTRY=registry.co
mpany.com
# Вывод отладки
export DOCKER_BUILDKIT=1

Настройка производительности

Оптимизация Docker для лучшей производительности.

# Включить экспериментальные функции
echo '{"experimental": true}' |
sudo tee
/etc/docker/daemon.json
# Опции драйвера хранения
{
  "storage-driver": "overlay2",
  "storage-opts": [

"overlay2.override_kernel_check
=true"
  ]
}
# Настройка логирования
{
  "log-driver": "syslog",
  "log-opts": {"syslog-address":
"udp://logs.company.com:514"}
}

Лучшие практики

Рекомендации по безопасности

Поддержание безопасности контейнеров и их готовности к производству.

# Запуск от имени пользователя без прав root в Dockerfile
RUN groupadd -r appuser && useradd -r -g appuser
appuser
USER appuser
# Использовать конкретные теги образов, а не 'latest'
FROM node:16.20.0-alpine
# Использовать файловые системы только для чтения, когда это возможно
docker run --read-only nginx

Оптимизация производительности

Оптимизация контейнеров для скорости и эффективности использования ресурсов.

# Использовать многоэтапную сборку для уменьшения размера образа
FROM node:16 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:16-alpine
WORKDIR /app
COPY --from=builder /app/node_modules
./node_modules
COPY . .
CMD ["node", "server.js"]

Связанные ссылки