Введение
В этой лабораторной работе вы научитесь использовать команду docker container start для перезапуска остановленных контейнеров. Вы начнёте с создания и остановки контейнеров на основе образов hello-world и ubuntu.
Затем вы изучите различные способы запуска остановленного контейнера, включая простой запуск, запуск с подключением к его выводу и интерактивный запуск. Это продемонстрирует гибкость команды docker container start для управления жизненным циклом контейнеров.
Создание и остановка контейнера
На этом шаге вы узнаете, как создать и остановить Docker-контейнер. Контейнер — это запускаемый экземпляр образа. Вы можете создавать, запускать, останавливать, перемещать или удалять контейнеры с помощью Docker API или CLI.
Сначала загрузим образ hello-world из Docker Hub. Это очень маленький образ, полезный для тестирования.
docker pull hello-world
Вы должны увидеть вывод, указывающий на загрузку и извлечение образа.
Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
Теперь создадим и запустим контейнер из образа hello-world. При выполнении этой команды Docker создаст новый контейнер и выполнит команду, указанную в образе. В случае с hello-world команда просто выводит сообщение и завершает работу.
docker run hello-world
Вы должны увидеть вывод, похожий на этот:
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
Этот вывод подтверждает, что контейнер успешно запустился и вывел сообщение. Поскольку команда в контейнере завершилась, контейнер остановился.
Чтобы увидеть контейнеры в вашей системе, включая остановленные, используйте команду docker ps -a.
docker ps -a
Вы увидите список контейнеров. Контейнер hello-world должен быть в списке, а его статус — Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
... hello-world "/hello" About a minute ago Exited (0) 58 seconds ago ...
Теперь создадим ещё один контейнер, но на этот раз используем образ ubuntu и выполним команду, которая будет поддерживать работу контейнера в течение короткого времени. Мы воспользуемся командой sleep, чтобы контейнер работал 10 секунд.
Сначала загрузим образ ubuntu:
docker pull ubuntu
Вы должны увидеть вывод, указывающий на загрузку образа.
Using default tag: latest
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
Теперь запустим контейнер из образа ubuntu и выполним команду sleep 10. Мы запустим его в фоновом режиме (-d), чтобы контейнер работал в фоне и не блокировал терминал.
docker run -d ubuntu sleep 10
Эта команда выведет ID контейнера.
[container_id]
Используйте docker ps, чтобы увидеть запущенные контейнеры.
docker ps
Вы должны увидеть контейнер ubuntu в списке со статусом Up.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About a minute ago Up 5 seconds ...
Примерно через 10 секунд команда sleep 10 завершится, и контейнер остановится. Снова используйте docker ps -a, чтобы увидеть все контейнеры, включая остановленный.
docker ps -a
Теперь контейнер ubuntu должен иметь статус Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About a minute ago Exited (0) 5 seconds ago ...
...
Наконец, остановим контейнер ubuntu вручную с помощью команды docker stop. Вы можете остановить работающий контейнер по его ID или имени. Мы используем ID контейнера, который был выведен при его запуске. Замените [container_id] на фактический ID вашего контейнера ubuntu.
docker stop [container_id]
Эта команда выведет ID остановленного контейнера.
[container_id]
Снова используйте docker ps, чтобы убедиться, что контейнер больше не работает.
docker ps
Контейнер ubuntu не должен отображаться в списке запущенных контейнеров.
Запуск остановленного контейнера
На предыдущем шаге мы создали и остановили контейнер на основе образа ubuntu. В этом шаге вы узнаете, как запустить остановленный контейнер.
Сначала выведем список всех контейнеров, включая остановленные, чтобы найти ID нашего контейнера ubuntu.
docker ps -a
Найдите контейнер с образом ubuntu и статусом Exited. Запишите его CONTAINER ID.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About 5 minutes ago Exited (0) 4 minutes ago ...
...
Теперь мы можем запустить этот остановленный контейнер с помощью команды docker start, указав ID контейнера. Замените [container_id] на фактический ID вашего контейнера ubuntu.
docker start [container_id]
Эта команда выведет ID запущенного контейнера.
[container_id]
Используйте docker ps, чтобы убедиться, что контейнер теперь запущен.
docker ps
Вы должны увидеть контейнер ubuntu в списке со статусом Up.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About 5 minutes ago Up 5 seconds ...
Поскольку исходной командой для этого контейнера была sleep 10, контейнер проработает 10 секунд и снова остановится. Через несколько секунд снова выполните docker ps -a, чтобы проверить его статус.
docker ps -a
Теперь контейнер ubuntu снова должен быть в состоянии Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "sleep 10" About 5 minutes ago Exited (0) 5 seconds ago ...
...
Запуск остановленного контейнера полезен, когда вы хотите возобновить работу или состояние предыдущего экземпляра контейнера без создания нового.
Запуск контейнера с подключением к его выводу
На предыдущих шагах мы создавали и запускали контейнеры. Когда мы использовали docker run или docker start в фоновом режиме (-d), контейнер работал в фоне. Иногда необходимо видеть вывод контейнера во время его работы. В этом шаге вы узнаете, как запустить контейнер и подключиться к его потокам стандартного вывода и ошибок.
Сначала создадим новый контейнер, который будет выводить сообщение каждую секунду в течение 5 секунд. Снова воспользуемся образом ubuntu.
docker run -d ubuntu /bin/bash -c 'for i in {1..5}; do echo "Hello from container $i"; sleep 1; done'
Эта команда создает и запускает контейнер в фоновом режиме (-d). Внутри контейнера выполняется bash-скрипт, который делает 5 итераций: выводит сообщение и делает паузу на 1 секунду. Запишите выведенный ID контейнера.
[container_id]
Теперь подключимся к этому работающему контейнеру, чтобы увидеть его вывод. Используйте команду docker attach с указанием ID контейнера. Замените [container_id] на фактический ID вашего контейнера ubuntu.
docker attach [container_id]
В вашем терминале должен появиться вывод контейнера:
Hello from container 1
Hello from container 2
Hello from container 3
Hello from container 4
Hello from container 5
После завершения цикла контейнер остановится, и вы вернетесь в командную строку терминала.
Если вы попытаетесь подключиться к уже остановленному контейнеру, команда docker attach немедленно завершится.
Проверим, что контейнер остановился, выведя список всех контейнеров:
docker ps -a
Вы должны увидеть контейнер с командой /bin/bash -c 'for i in {1..5}; do echo "Hello from container $i"; sleep 1; done' в состоянии Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "/bin/bash -c 'for i…" About a minute ago Exited (0) 5 seconds ago ...
...
Подключение к контейнеру полезно для мониторинга вывода долго работающих процессов или в целях отладки.
Интерактивный запуск контейнера
На предыдущих шагах мы запускали контейнеры, которые выполняли команду и завершались или работали в фоновом режиме. Часто требуется взаимодействовать с контейнером, как с виртуальной машиной или удаленным сервером. В этом шаге вы узнаете, как запустить контейнер в интерактивном режиме и получить командную оболочку внутри него.
Для интерактивного запуска контейнера используем команду docker run с флагами -i и -t:
- Флаг
-iоставляет стандартный ввод (STDIN) открытым, даже если к нему не подключены. Это необходимо для интерактивных процессов. - Флаг
-tвыделяет псевдо-TTY, что требуется для работы командной оболочки.
Мы запустим контейнер ubuntu и выполним команду /bin/bash, чтобы получить оболочку bash внутри контейнера.
docker run -it ubuntu /bin/bash
После выполнения этой команды вы увидите приглашение командной строки вида:
root@[container_id]:/#
Это означает, что вы находитесь внутри работающего контейнера ubuntu под пользователем root. Вы можете выполнять стандартные Linux-команды внутри контейнера. Например, проверим версию операционной системы:
cat /etc/os-release
Вы увидите вывод, подтверждающий, что вы работаете в контейнере Ubuntu:
NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 22.04.3 LTS"
VERSION_ID="22.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=jammy
UBUNTU_CODENAME=jammy
Можно также выполнить другие команды, например, вывести список файлов в текущем каталоге:
ls
Вы увидите стандартное содержимое корневой директории системы Ubuntu.
Чтобы выйти из контейнера и вернуться в терминал хоста, введите exit в командной строке контейнера:
exit
При выходе из оболочки контейнер остановится, так как завершится основной процесс (/bin/bash).
Проверим, что контейнер остановился, выведя список всех контейнеров:
docker ps -a
Вы должны увидеть контейнер с командой /bin/bash в состоянии Exited.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[container_id] ubuntu "/bin/bash" About a minute ago Exited (0) 5 seconds ago ...
...
Интерактивный запуск контейнеров необходим для изучения образов контейнеров, отладки приложений внутри контейнеров и выполнения административных задач.
Резюме
В этой лабораторной работе вы научились создавать и останавливать Docker-контейнеры с помощью команд docker run и docker stop. Вы попрактиковались в загрузке образов командой docker pull и проверке состояния контейнеров через docker ps -a. Также вы создали контейнер, который завершался сразу после запуска (hello-world), и контейнер, который продолжал работать некоторое время (ubuntu с командой sleep).
Далее вы изучили различные способы перезапуска остановленных контейнеров с помощью команды docker start. Вы узнали, как просто запустить контейнер, как запустить его с подключением к выводу с использованием флага -a, а также как запустить контейнер в интерактивном режиме с флагом -i, что позволяет выполнять команды внутри работающего контейнера.



