Docker — это платформа для автоматизации развертывания и управления приложениями в контейнерах. Контейнеры позволяют упаковать приложение со всем его окружением и зависимостями, гарантируя, что оно будет работать одинаково в любой среде .
Процесс установки зависит от вашего дистрибутива Linux.
Обновите пакеты и установите зависимости:
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
Установка через менеджер пакетов dnf :
sudo dnf install -y docker-ce docker-ce-cli containerd
Запустите и добавьте в автозагрузку:
sudo systemctl start docker sudo systemctl enable docker
Проверьте статус:
sudo systemctl status docker
После установки необходимо запустить сервис и добавить его в автозагрузку :
sudo systemctl enable docker --now
Убедитесь, что сервис запущен:
sudo systemctl status docker
По умолчанию команда docker требует прав суперпользователя. Чтобы добавить пользователя в группу docker и избежать использования sudo :
Внимание: Пользователи в группе docker имеют привилегии, эквивалентные root .
sudo usermod -aG docker <имя_пользователя>
После этого необходимо выйти из системы и зайти заново.
Для ускорения загрузки образов можно настроить зеркало. Отредактируйте или создайте файл /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
Dockerfile.Поиск образа на 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
Создать и запустить контейнер из образа (самая частая команда) :
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
Тома используются для постоянного хранения данных .
Создать том :
docker volume create <имя_тома>
Список томов :
docker volume ls
Подробная информация о томе:
docker volume inspect <имя_тома>
Удалить том:
docker volume rm <имя_тома>
Удалить все неиспользуемые тома:
docker volume prune
Использование тома при запуске контейнера (монтирование тома) :
docker run -v <имя_тома>:<путь_в_контейнере> <имя_образа>
Монтирование директории с хоста (bind mount) :
docker run -v /абсолютный/путь/на/хосте:<путь_в_контейнере> <имя_образа>
Список сетей :
docker network ls
Создать сеть :
docker network create <имя_сети>
Подключить работающий контейнер к сети :
docker network connect <имя_сети> <id_контейнера>
Отключить контейнер от сети :
docker network disconnect <имя_сети> <id_контейнера>
Информация о сети:
docker network inspect <имя_сети>
Удалить сеть:
docker network rm <имя_сети>
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