Перейти к содержимому

3. Контейнеры

Контейнер — это запущенный экземпляр Docker-образа. Понимание жизненного цикла контейнера критически важно для эффективной работы с Docker в разработке и продакшене.

Команда docker run — самая важная в Docker. Она создаёт и запускает контейнер из образа:

Окно терминала
# Базовый запуск
docker run nginx
# С маппингом портов (host:container)
docker run -p 8080:80 nginx
# В фоновом режиме (detached)
docker run -d -p 8080:80 nginx
# С именем контейнера
docker run -d --name my-nginx -p 8080:80 nginx
# Интерактивный режим с псевдотерминалом
docker run -it ubuntu bash
# С переменными окружения
docker run -e NODE_ENV=production -d myapp
# Удалить контейнер после остановки
docker run --rm ubuntu echo "Hello World"
# Ограничить использование ресурсов
docker run -d --memory=512m --cpus=0.5 nginx
Окно терминала
# Только запущенные контейнеры
docker ps
# Все контейнеры (включая остановленные)
docker ps -a
# Только ID контейнеров
docker ps -q
# Форматированный вывод
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
Окно терминала
# Остановить контейнер (SIGTERM → SIGKILL через 10 сек)
docker stop container_name
# Запустить остановленный контейнер
docker start container_name
# Перезапустить контейнер
docker restart container_name
# Поставить на паузу (заморозить процессы)
docker pause container_name
# Снять с паузы
docker unpause container_name
# Удалить остановленный контейнер
docker rm container_name
# Удалить все остановленные контейнеры
docker container prune
Окно терминала
# Выполнить команду в запущенном контейнере
docker exec container_name ls /app
# Открыть bash внутри контейнера
docker exec -it container_name bash
# Просмотр логов контейнера
docker logs container_name
# Следить за логами в реальном времени
docker logs -f container_name
# Последние 50 строк логов
docker logs --tail 50 container_name
# Копировать файл из контейнера
docker cp container_name:/app/file.txt ./file.txt
# Копировать файл в контейнер
docker cp ./file.txt container_name:/app/file.txt
Окно терминала
# Подробная информация о контейнере (JSON)
docker inspect container_name
# Статистика использования ресурсов (CPU, память, сеть)
docker stats container_name
# Просмотр изменений файловой системы контейнера
docker diff container_name
# Список открытых портов
docker port container_name

Контейнер проходит через следующие состояния:

  1. created — контейнер создан командой docker create, но не запущен
  2. running — контейнер активен, процессы выполняются
  3. paused — процессы заморожены с помощью SIGSTOP, память сохранена
  4. stopped/exited — контейнер завершил работу или был остановлен
  5. removed — контейнер удалён командой docker rm
Окно терминала
docker create --name myapp nginx # → created
docker start myapp # → running
docker pause myapp # → paused
docker unpause myapp # → running
docker stop myapp # → stopped
docker rm myapp # → removed