# Терминал
# 1. Создать контейнер из ubuntu (не запускать)
docker create ubuntu
# Вывод: <container_id> (например, a1b2c3d4e5f6...)
# 2. Запустить созданный контейнер
docker start <container_id>
# Контейнер мгновенно останавливается — образ ubuntu не имеет
# длительного процесса. Docker завершает контейнер, как только
# завершается PID 1 (которого по умолчанию нет у ubuntu).
docker ps -a
# STATUS: Exited (0) X seconds ago
# 3. Запустить в фоне с вечной задачей
docker run -d --name my_ubuntu_container ubuntu tail -f /dev/null
# -d фоновый режим
# --name имя для удобства
# tail -f /dev/null читает пустой файл вечно = контейнер не завершается
docker ps
# STATUS: Up X seconds
# 4a. Остановить через stop (graceful — SIGTERM, ждёт 10 с, потом SIGKILL)
docker stop my_ubuntu_container
# 4b. Или через kill (немедленный SIGKILL — не даёт приложению завершиться корректно)
# docker kill my_ubuntu_container
# Разница stop vs kill:
# stop: посылает SIGTERM → приложение может сохранить данные → SIGKILL через 10 с
# kill: сразу SIGKILL → немедленное завершение, данные могут не сохраниться
# 5. Перезапустить
docker restart my_ubuntu_container
docker ps
# STATUS: Up X seconds
# 6. Удалить (сначала нужно остановить)
docker stop my_ubuntu_container
docker rm my_ubuntu_container
# Или принудительно одной командой:
# docker rm -f my_ubuntu_container
# 7. Проверить
docker ps -a
# Контейнера my_ubuntu_container нет в списке
Решение задания 2: Инспектирование и взаимодействие с nginx
# Терминал
# 1. Запустить nginx в фоне
docker run -d --name mynginx nginx
docker ps -a
# Видим mynginx в статусе Up
# 2. Логи
docker logs mynginx # весь журнал
docker logs -f mynginx # следим в реальном времени (Ctrl+C для выхода)
# 3. Процессы и файлы
docker top mynginx
# PID USER COMMAND
# 1 root nginx: master process nginx ...
# X nginx nginx: worker process
docker exec -it mynginx ls / # список файлов в корне
# 4. Создать файл и скопировать в контейнер
# PowerShell (Windows):
"Hello, Docker!" | Out-File -Encoding utf8 hello.txt
docker cp hello.txt mynginx:/usr/share/nginx/html/hello.txt
# bash (Linux/Mac):
# echo "Hello, Docker!" > hello.txt
# docker cp hello.txt mynginx:/usr/share/nginx/html/hello.txt
# 5. Проверить наличие файла
docker exec -it mynginx ls /usr/share/nginx/html/
# index.html 50x.html hello.txt
# 6. Подробная информация (JSON)
docker inspect mynginx
# Найти IP-адрес:
docker inspect -f '{{.NetworkSettings.IPAddress}}' mynginx
Решение задания 3: Управление образами
# Терминал
# 1. Список образов
docker images
# REPOSITORY TAG IMAGE ID CREATED SIZE
# nginx latest ... ... ...
# ubuntu latest ... ... ...
# 2. История слоёв образа
docker history nginx
# Видим каждый слой: команды RUN, COPY, ENV из Dockerfile nginx
# 3. Подробная информация
docker inspect nginx
# JSON с конфигурацией, метками, переменными среды
# 4. Создание образа из контейнера
# Шаг 4a: запустить интерактивный контейнер
docker run -it --name myubuntu ubuntu bash
# Шаг 4b: внутри контейнера
# touch /myfile.txt
# echo "custom" > /etc/custom.conf
# exit
# Шаг 4c: создать образ из изменений
docker commit myubuntu my-ubuntu:v1
docker images | grep my-ubuntu
# my-ubuntu v1 <id> seconds ago X MB
# 5. Удалить образ
docker stop myubuntu 2>/dev/null; docker rm myubuntu
docker rmi my-ubuntu:v1
docker images | grep my-ubuntu
# Пусто — образ удалён