Пример 1: Жизненный цикл контейнера ubuntu
Демонстрируем все состояния контейнера на примере ubuntu.
# Терминал
# Шаг 1: создать контейнер (не запускать)
docker create ubuntu
# Вывод: <container_id>
# Шаг 2: убедиться, что контейнер в состоянии Created
docker ps -a
# STATUS: Created
# Шаг 3: запустить — мгновенно завершится (нет задачи)
docker start <container_id>
docker ps -a
# STATUS: Exited (0)
# Шаг 4: запустить с долгоживущей задачей
docker run -d --name my_ubuntu_container ubuntu tail -f /dev/null
# Шаг 5: проверить — контейнер Running
docker ps
# STATUS: Up X seconds
# Шаг 6: приостановить
docker pause my_ubuntu_container
docker ps
# STATUS: Up X seconds (Paused)
# Шаг 7: возобновить
docker unpause my_ubuntu_container
# Шаг 8: остановить
docker stop my_ubuntu_container
docker ps -a
# STATUS: Exited
# Шаг 9: перезапустить
docker restart my_ubuntu_container
# Шаг 10: удалить
docker stop my_ubuntu_container
docker rm my_ubuntu_container
# Проверить: контейнера нет
docker ps -a
Пример 2: Инспектирование контейнера nginx
Изучаем команды для просмотра состояния и логов.
# Терминал
# Запускаем nginx в фоне
docker run -d --name mynginx nginx
# Список всех контейнеров (включая остановленные)
docker ps -a
# Просмотр логов
docker logs mynginx
# Следить за логами в реальном времени (Ctrl+C для выхода)
docker logs -f mynginx
# Процессы внутри контейнера
docker top mynginx
# PID USER COMMAND
# 1234 root nginx: master process ...
# 1235 nginx nginx: worker process
# Изменения файловой системы
docker diff mynginx
# Полная информация о контейнере в JSON
docker inspect mynginx
# Извлечь только IP-адрес
docker inspect -f '{{.NetworkSettings.IPAddress}}' mynginx
# Мониторинг ресурсов в реальном времени
docker stats mynginx
Пример 3: docker exec — работа внутри контейнера
Выполняем команды в работающем контейнере.
# Терминал
# Открыть интерактивный bash в контейнере
docker exec -it mynginx bash
# Внутри контейнера можно выполнять команды:
# ls /usr/share/nginx/html/
# cat /etc/os-release
# exit
# Выполнить одну команду без входа в оболочку
docker exec mynginx cat /etc/os-release
docker exec mynginx ls /usr/share/nginx/html/
docker exec mynginx hostname
Пример 4: docker cp — копирование файлов
Передача файлов между хостом и контейнером.
# Терминал (PowerShell на Windows)
# Создать файл на хосте
"Hello, Docker!" | Out-File -Encoding utf8 hello.txt
# Скопировать файл из хоста в контейнер
docker cp hello.txt mynginx:/usr/share/nginx/html/hello.txt
# Проверить наличие файла в контейнере
docker exec mynginx ls /usr/share/nginx/html/
# Скопировать файл из контейнера на хост
docker cp mynginx:/usr/share/nginx/html/index.html ./nginx-index.html
# Проверить скопированный файл
Get-Content nginx-index.html
# Терминал (bash — Linux/Mac)
echo "Hello, Docker!" > hello.txt
docker cp hello.txt mynginx:/usr/share/nginx/html/hello.txt
docker exec mynginx ls /usr/share/nginx/html/
docker cp mynginx:/usr/share/nginx/html/index.html ./nginx-index.html
Пример 5: Создание образа из контейнера (docker commit)
Сохраняем изменения контейнера как новый образ. Подходит для экспериментов; в продакшне — только Dockerfile.
# Терминал
# Запускаем ubuntu и вносим изменения
docker run -it --name my_modified_ubuntu ubuntu bash
# Внутри контейнера создаём файл
# touch /myfile.txt
# echo "custom content" > /etc/custom.conf
# exit
# Создаём образ из изменённого контейнера
docker commit my_modified_ubuntu my-ubuntu-custom:v1
# Проверяем созданный образ
docker images | grep my-ubuntu-custom
# Запускаем новый контейнер из созданного образа
docker run -it my-ubuntu-custom:v1 bash
# Внутри: проверяем наличие /myfile.txt
# ls /myfile.txt -> /myfile.txt (есть!)
# exit
# Удаляем временные ресурсы
docker rm my_modified_ubuntu
docker rmi my-ubuntu-custom:v1
Пример 6: Управление образами
# Терминал
# Список всех образов
docker images
# История слоёв образа nginx
docker history nginx
# Подробная информация об образе
docker inspect nginx
# Задать тег (псевдоним)
docker tag nginx myrepo/nginx:1.25
# Удалить образ
docker rmi myrepo/nginx:1.25
# Удалить все "висячие" образы (без тега, без контейнеров)
docker image prune
# Удалить все неиспользуемые образы
docker image prune -a