💻 Примеры: операции с Docker-контейнерами

⚡ Ключевые примеры

# Терминал: полный жизненный цикл nginx
docker run -d --name mynginx nginx
docker ps
docker logs mynginx
docker exec -it mynginx bash
echo "test" > hello.txt && docker cp hello.txt mynginx:/usr/share/nginx/html/
docker stop mynginx && docker rm mynginx

Пример 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
← К оглавлению урока