Как использовать команду docker container start для перезапуска контейнеров

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этой лабораторной работе вы научитесь использовать команду docker container start для перезапуска остановленных контейнеров. Вы начнёте с создания и остановки контейнеров на основе образов hello-world и ubuntu.

Затем вы изучите различные способы запуска остановленного контейнера, включая простой запуск, запуск с подключением к его выводу и интерактивный запуск. Это продемонстрирует гибкость команды docker container start для управления жизненным циклом контейнеров.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/attach("Attach to Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555122{{"Как использовать команду docker container start для перезапуска контейнеров"}} docker/ps -.-> lab-555122{{"Как использовать команду docker container start для перезапуска контейнеров"}} docker/start -.-> lab-555122{{"Как использовать команду docker container start для перезапуска контейнеров"}} docker/stop -.-> lab-555122{{"Как использовать команду docker container start для перезапуска контейнеров"}} docker/attach -.-> lab-555122{{"Как использовать команду docker container start для перезапуска контейнеров"}} docker/pull -.-> lab-555122{{"Как использовать команду docker container start для перезапуска контейнеров"}} end

Создание и остановка контейнера

На этом шаге вы узнаете, как создать и остановить 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, что позволяет выполнять команды внутри работающего контейнера.