Введение / Зачем это нужно
Docker упрощает упаковку приложений вместе с зависимостями в лёгкие контейнеры. Знание базовых команд позволяет быстро запускать, проверять, изменять и удалять контейнеры, избегая распространённых ошибок. После выполнения этого руководства вы сможете управлять контейнерами Docker на Linux уверенно и эффективно.
Требования / Подготовка
- Установленный Docker Engine версии 24+ (например,
Docker 24.0.5в Ubuntu 22.04). - Базовые знания терминала Linux.
- Права sudo (или пользователь в группе docker) для выполнения команд Docker.
💡 Совет: Если Docker ещё не установлен, сначала выполните команду
sudo apt update && sudo apt install docker.io docker-compose, а затем добавьте пользователя в группуdocker, перезагрузив терминал.
Шаг 1: Запустить контейнер
Создайте и запустите контейнер в фоновом режиме, пробросив порт и дав ему имя:
docker run -d -p 8080:80 --name my-web my-web-image
-d— запуск в режиме демона (фоновый процесс).-p 8080:80— отображение внешнего порта 8080 на порт 80 внутри контейнера.--name my-web— задаёт удобочитаемое имя.
💡 Совет: Добавьте
--restart unless-stopped, если вам нужно автоматическое перезапускование контейнера после перезагрузки хоста.
Шаг 2: Просмотреть запущенные контейнеры
Проверьте, какие контейнеры работают, и получите их ID:
docker ps
Для просмотра остановленных контейнеров добавьте -a:
docker ps -a
Вывод показывает CONTAINER ID, IMAGE, COMMAND, CREATED, STATUS, PORTS, NAMES.
Шаг 3: Подключиться к работающему контейнеру
Откройте интерактивную оболочку внутри контейнера для диагностики:
docker exec -it my-web bash
-i сохраняет STDIN, -t добавляет виртуальный терминал. После входа вы можете просматривать логи, изменять файлы или запускать дополнительные утилиты.
Шаг 4: Остановить и удалить контейнер
Корректно остановите контейнер перед удалением:
docker stop my-web
Затем удалите остановленный контейнер:
docker rm my-web
Если образ больше не нужен, удалите и его:
docker rmi my-web-image
⚠️ Важно:
docker rmудалит контейнер без возможности восстановления. Убедитесь, что у вас есть резервные копии данных.
Шаг 5: Управление образами и просмотр логов
Список доступных образов:
docker images
Соберите новый образ из Dockerfile:
docker build -t my-image .
Запустите собранный образ:
docker run -d -p 8081:80 --name my-web2 my-image
Просмотрите логи контейнера в режиме реального времени:
docker logs -f my-web
-f включает режим форвард-слежения, чтобы видеть новые записи.
Проверка результата
- Убедитесь, что контейнер реагирует:
curl http://localhost:8080. - Проверьте, что контейнер отображается в списке:
docker ps. - Просмотрите последние логи:
docker logs my-web.
Если контейнер не запускается, проверьте сообщения в docker logs my-web и убедитесь, что образ существует (docker images).
Возможные проблемы
| Симптом | Причина | Решение |
|---|---|---|
Error response from daemon: driver failed programming external IP address | Docker не может назначить IP-адрес, часто из-за конфликта портов. | Проверьте, что порт 8080 не используется другим контейнером или сервисом (lsof -i :8080). Измените проброс порта, например -p 8081:80. |
Error: No such container: my-web | Контейнер не существует или уже удалён. | Проверьте список: docker ps -a. Убедитесь, что имя (my-web) введено правильно. |
Permission denied при выполнении docker run | Пользователь не входит в группу docker. | Добавьте пользователя: sudo usermod -aG docker $USER, затем перелогиньтесь или выполните newgrp docker. |
dial tcp 127.0.0.1:2375: connect: connection refused | Docker демон работает только на сокете, а не на TCP. | Используйте сокет по умолчанию (unix:///var/run/docker.sock) или запустите Docker с правильными флагами. |
docker system prune удаляет много ресурсов | Слишком много неиспользуемых слоёв образов и контейнеров. | После очистки пересоздайте ненужные образы: docker build -t fresh-image ., чтобы избежать частой перекомпиляции. |
Если проблема не решена, выполните docker version и docker info, чтобы убедиться, что Docker Engine работает корректно.