3. Контейнеры
Контейнер — это запущенный экземпляр Docker-образа. Понимание жизненного цикла контейнера критически важно для эффективной работы с Docker в разработке и продакшене.
Запуск контейнера: docker run
Заголовок раздела «Запуск контейнера: docker run»Команда 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»# Только запущенные контейнеры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Жизненный цикл контейнера
Заголовок раздела «Жизненный цикл контейнера»Контейнер проходит через следующие состояния:
- created — контейнер создан командой
docker create, но не запущен - running — контейнер активен, процессы выполняются
- paused — процессы заморожены с помощью SIGSTOP, память сохранена
- stopped/exited — контейнер завершил работу или был остановлен
- removed — контейнер удалён командой
docker rm
docker create --name myapp nginx # → createddocker start myapp # → runningdocker pause myapp # → pauseddocker unpause myapp # → runningdocker stop myapp # → stoppeddocker rm myapp # → removed