UCS - коллекция мануалов

Практика - критерий истины...

Инструменты пользователя

Инструменты сайта


linux:docker

Руководство по использованию Docker

Docker — это платформа для автоматизации развертывания и управления приложениями в контейнерах. Контейнеры позволяют упаковать приложение со всем его окружением и зависимостями, гарантируя, что оно будет работать одинаково в любой среде .

Установка Docker

Процесс установки зависит от вашего дистрибутива Linux.

Ubuntu / Debian

Обновите пакеты и установите зависимости:

sudo apt-get update
sudo apt-get 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 -

Для Debian ключ сохраняется в отдельную директорию :

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod 444 /etc/apt/keyrings/docker.asc

Добавьте репозиторий (пример для Ubuntu):

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Установите Docker:

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Проверьте установку:

sudo docker --version

CentOS / RHEL / РЕД ОС

Установка через менеджер пакетов dnf :

sudo dnf install -y docker-ce docker-ce-cli containerd

Запустите и добавьте в автозагрузку:

sudo systemctl start docker
sudo systemctl enable docker

Проверьте статус:

sudo systemctl status docker

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

Запуск демона

После установки необходимо запустить сервис и добавить его в автозагрузку :

sudo systemctl enable docker --now

Убедитесь, что сервис запущен:

sudo systemctl status docker

Доступ для обычного пользователя

По умолчанию команда docker требует прав суперпользователя. Чтобы добавить пользователя в группу docker и избежать использования sudo :

Внимание: Пользователи в группе docker имеют привилегии, эквивалентные root .

 sudo usermod -aG docker <имя_пользователя> 

После этого необходимо выйти из системы и зайти заново.

Настройка зеркал (mirrors) для Docker Hub

Для ускорения загрузки образов можно настроить зеркало. Отредактируйте или создайте файл /etc/docker/daemon.json :

sudo nano /etc/docker/daemon.json

Добавьте следующие строки (пример с зеркалом Google):

{
"registry-mirrors": ["https://mirror.gcr.io/"]
}

Перезапустите Docker для применения изменений:

sudo systemctl daemon-reload
sudo systemctl restart docker

Изменение расположения образов

По умолчанию образы и контейнеры хранятся в /var/lib/docker. Чтобы изменить это, остановите Docker, скопируйте данные и укажите новый путь в daemon.json :

sudo systemctl stop docker
sudo cp -r /var/lib/docker /mnt/new_location/docker

В файле /etc/docker/daemon.json пропишите:

{
"data-root": "/mnt/new_location/docker"
}

Запустите Docker снова:

sudo systemctl start docker

Основные понятия

  • Образ (Image) :: Шаблон для создания контейнеров. Содержит приложение и все необходимые зависимости. Образы можно скачивать из реестров (например, Docker Hub) или создавать самостоятельно с помощью Dockerfile.
  • Контейнер (Container) :: Запущенный экземпляр образа. Это изолированный процесс на вашей системе.
  • Dockerfile :: Текстовый файл с инструкциями для сборки образа.
  • Docker Compose :: Инструмент для определения и запуска многоконтейнерных приложений с помощью YAML-файла.
  • Том (Volume) :: Механизм для постоянного хранения данных, генерируемых и используемых контейнерами. Позволяет сохранять данные между перезапусками контейнеров .

Работа с образами (Images)

Поиск образа на Docker Hub :

docker search <имя_образа>

Скачивание образа :

docker pull <имя_образа>

Список скачанных образов :

docker images

или

docker image ls

Показать историю слоев образа :

docker history <имя_образа>

Удаление образа :

docker rmi <id_образа>

Принудительное удаление:

docker rmi -f <id_образа>

Удаление неиспользуемых образов :

docker image prune

Создание образа из Dockerfile :

docker build -t <имя_образа>:<тег> .
  ''-t'' задает имя и тег для образа.
  ''.'' указывает на текущую директорию как контекст сборки.

Сохранение образа в tar-архив :

docker save <имя_образа> > backup.tar

Загрузка образа из tar-архива :

docker load < backup.tar

Работа с контейнерами (Containers)

Запуск и управление

Создать и запустить контейнер из образа (самая частая команда) :

docker run <имя_образа>

Запустить контейнер в фоновом режиме :

docker run -d <имя_образа>

Пробросить порт хоста на порт контейнера :

docker run -p <порт_хоста>:<порт_контейнера> <имя_образа>

Пример:

docker run -p 8080:80 nginx

Дать контейнеру имя :

docker run --name <имя_контейнера> <имя_образа>

Автоматически удалить контейнер после остановки :

docker run --rm <имя_образа>

Запустить контейнер в интерактивном режиме с терминалом (обычно для отладки) :

docker run -it <имя_образа> /bin/bash

Создать контейнер, но не запускать его :

docker create <имя_образа>

Запустить существующий (остановленный) контейнер :

docker start <id_или_имя_контейнера>

Остановить работающий контейнер :

docker stop <id_или_имя_контейнера>

Перезапустить контейнер :

docker restart <id_или_имя_контейнера>

Принудительно остановить контейнер (SIGKILL) :

docker kill <id_или_имя_контейнера>

Приостановить все процессы в контейнере :

docker pause <id_или_имя_контейнера>

Возобновить процессы :

docker unpause <id_или_имя_контейнера>

Просмотр и информация

Список запущенных контейнеров :

docker ps

Список всех контейнеров (включая остановленные) :

docker ps -a

Показать последний созданный контейнер (всех):

docker ps -l

Подробная информация о контейнере :

docker inspect <id_или_имя_контейнера>

Логи контейнера :

docker logs <id_или_имя_контейнера>

Следить за логами в реальном времени:

docker logs -f <id_или_имя_контейнера>

Процессы, запущенные внутри контейнера :

docker top <id_или_имя_контейнера>

Статистика использования ресурсов (CPU, RAM, Network) :

docker stats <id_или_имя_контейнера>

Для всех контейнеров:

docker stats

Изменения в файловой системе контейнера :

docker diff <id_или_имя_контейнера>

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

Выполнить команду в уже работающем контейнере :

docker exec <id_или_имя_контейнера> <команда>

Пример (зайти в shell контейнера):

docker exec -it <id_или_имя_контейнера> /bin/bash

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

docker cp <путь_к_файлу_на_хосте> <id_контейнера>:<путь_в_контейнере>

Или из контейнера на хост:

docker cp <id_контейнера>:<путь_в_контейнере> <путь_на_хосте>

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

Удалить остановленный контейнер :

docker rm <id_или_имя_контейнера>

Принудительно удалить работающий контейнер :

docker rm -f <id_или_имя_контейнера>

Удалить все остановленные контейнеры :

docker container prune

Управление томами (Volumes)

Тома используются для постоянного хранения данных .

Создать том :

docker volume create <имя_тома>

Список томов :

docker volume ls

Подробная информация о томе:

docker volume inspect <имя_тома>

Удалить том:

docker volume rm <имя_тома>

Удалить все неиспользуемые тома:

docker volume prune

Использование тома при запуске контейнера (монтирование тома) :

docker run -v <имя_тома>:<путь_в_контейнере> <имя_образа>

Монтирование директории с хоста (bind mount) :

docker run -v /абсолютный/путь/на/хосте:<путь_в_контейнере> <имя_образа>

Управление сетями (Networks)

Список сетей :

docker network ls

Создать сеть :

docker network create <имя_сети>

Подключить работающий контейнер к сети :

docker network connect <имя_сети> <id_контейнера>

Отключить контейнер от сети :

docker network disconnect <имя_сети> <id_контейнера>

Информация о сети:

docker network inspect <имя_сети>

Удалить сеть:

docker network rm <имя_сети>

Docker Compose

Docker Compose позволяет управлять многоконтейнерными приложениями с помощью YAML-файла .

Пример файла docker-compose.yml :

services:
web:
image: nginx:latest
ports:

    "8080:80"
    volumes:

    ./html:/usr/share/nginx/html
    redis:
    image: redis:alpine
    

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

Запустить все сервисы, описанные в docker-compose.yml :

docker-compose up

Запустить в фоновом режиме :

docker-compose up -d

Остановить и удалить контейнеры, сети, созданные командой up :

docker-compose down

Также удалить тома (осторожно!):

docker-compose down -v

Просмотреть запущенные контейнеры проекта:

docker-compose ps

Посмотреть логи всех сервисов:

docker-compose logs

Следить за логами:

docker-compose logs -f

Пересобрать образы и запустить контейнеры:

docker-compose up --build

Остановить контейнеры без их удаления:

docker-compose stop

Запустить ранее остановленные контейнеры:

docker-compose start

Выполнить команду в работающем контейнере сервиса:

docker-compose exec <имя_сервиса> <команда>

Например:

docker-compose exec web /bin/bash

Полезные примеры и советы

Просмотр политики старта (restart policy) всех контейнеров:

docker inspect -f '{{.Name}} - {{.HostConfig.RestartPolicy.Name}}' $(docker ps -aq)

Очистка системы от неиспользуемых данных (контейнеры, сети, образы) :

docker system prune

С удалением томов:

docker system prune -a --volumes

Просмотр событий Docker в реальном времени :

docker events

Обновить конфигурацию контейнера (например, политику рестарта) :

docker update --restart=unless-stopped <id_контейнера>

Где искать помощь

По любой команде можно получить справку, добавив флаг –help :

docker --help
docker run --help
docker-compose --help
linux/docker.txt · Последнее изменение: Luciferus