Как использовать команду docker desktop start для запуска Docker Desktop

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

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

Введение

В этой лабораторной работе мы рассмотрим, как использовать команду docker start для управления жизненным циклом контейнеров Docker. Мы начнем с понимания основной цели docker start и того, чем она отличается от docker run.

В ходе практических упражнений вы научитесь запускать остановленные контейнеры синхронно, запускать контейнеры в detached mode (фоновом режиме) и указывать таймаут для операции запуска. К концу этой лабораторной работы вы будете уверенно использовать docker start для эффективного возобновления работы ваших Docker-контейнеров.


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/create("Create Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/run -.-> lab-555148{{"Как использовать команду docker desktop start для запуска Docker Desktop"}} docker/ps -.-> lab-555148{{"Как использовать команду docker desktop start для запуска Docker Desktop"}} docker/start -.-> lab-555148{{"Как использовать команду docker desktop start для запуска Docker Desktop"}} docker/stop -.-> lab-555148{{"Как использовать команду docker desktop start для запуска Docker Desktop"}} docker/create -.-> lab-555148{{"Как использовать команду docker desktop start для запуска Docker Desktop"}} docker/pull -.-> lab-555148{{"Как использовать команду docker desktop start для запуска Docker Desktop"}} end

Понимание назначения команды docker start

На этом шаге мы разберём назначение команды docker start. Команда docker start используется для запуска одного или нескольких остановленных контейнеров. Когда вы останавливаете контейнер с помощью docker stop, его состояние сохраняется, и позже вы можете возобновить его работу с помощью docker start. Это отличается от docker run, который создаёт новый контейнер из образа и затем запускает его.

Сначала создадим простой контейнер, который можно остановить, а затем запустить. Мы будем использовать образ ubuntu и выполним команду, которая будет поддерживать работу контейнера в течение короткого времени.

docker run -d --name my-ubuntu ubuntu sleep 60

Эта команда запускает контейнер Ubuntu в detached mode (фоновом режиме) (-d), присваивает ему имя my-ubuntu и выполняет внутри контейнера команду sleep 60. Команда sleep 60 будет поддерживать работу контейнера в течение 60 секунд.

Теперь проверим статус контейнера с помощью docker ps.

docker ps

Вы должны увидеть контейнер my-ubuntu в списке со статусом Up.

Далее остановим контейнер с помощью команды docker stop.

docker stop my-ubuntu

Эта команда отправляет сигнал остановки контейнеру my-ubuntu.

Теперь снова проверим статус контейнера с помощью docker ps.

docker ps

Вы увидите, что контейнер my-ubuntu больше не отображается в выводе docker ps (который показывает только работающие контейнеры). Чтобы увидеть все контейнеры, включая остановленные, используйте docker ps -a.

docker ps -a

Теперь вы должны увидеть my-ubuntu в списке со статусом Exited. Это подтверждает, что контейнер был остановлен.

Наконец, используем команду docker start для запуска остановленного контейнера.

docker start my-ubuntu

Эта команда запускает контейнер my-ubuntu.

Проверим статус контейнера в последний раз с помощью docker ps.

docker ps

Вы снова увидите контейнер my-ubuntu в списке со статусом Up. Это демонстрирует, что docker start успешно возобновил работу ранее остановленного контейнера.

Подводя итог: docker start используется для возобновления работы остановленного контейнера с сохранением его состояния, тогда как docker run создаёт и запускает новый контейнер.

Синхронный запуск Docker контейнера

На этом шаге мы рассмотрим, как запускать Docker контейнер синхронно. При синхронном запуске команда ожидает завершения выполнения контейнера, прежде чем вернуть управление терминалу. Это поведение по умолчанию при запуске команды непосредственно в контейнере без флага -d (detached mode).

Давайте используем простой контейнер ubuntu для демонстрации синхронного выполнения. Мы запустим команду, которая выводит сообщение и завершает работу.

Сначала убедимся, что образ ubuntu доступен. Если нет - загрузим его:

docker pull ubuntu

Теперь запустим контейнер синхронно, который выведет "Hello from Ubuntu" и завершит работу:

docker run --rm ubuntu echo "Hello from Ubuntu"

Разберём эту команду:

  • docker run: Команда для создания и запуска нового контейнера
  • --rm: Флаг автоматически удаляет контейнер после завершения (полезно для временных контейнеров)
  • ubuntu: Используемый образ
  • echo "Hello from Ubuntu": Команда, выполняемая внутри контейнера

При выполнении вы увидите вывод "Hello from Ubuntu" непосредственно в терминале. Командная строка не станет доступной, пока команда echo внутри контейнера не завершится и контейнер не остановится. Это и есть синхронное выполнение.

Сравните это с detached mode из предыдущего шага, где команда возвращала управление сразу, а контейнер работал в фоне.

Для лучшей иллюстрации синхронного поведения запустим команду с задержкой:

docker run --rm ubuntu sleep 5

Эта команда запустит контейнер Ubuntu и выполнит sleep 5, что приостановит работу на 5 секунд. Вы заметите, что терминал будет заблокирован на 5 секунд до завершения команды. Это происходит потому, что docker run ожидает завершения sleep 5 внутри контейнера.

Синхронный режим полезен, когда вам нужно выполнить команду в контейнере и дождаться её завершения или вывода перед продолжением работы в скрипте или рабочем процессе.

Запуск Docker контейнера в detached mode

На этом шаге мы научимся запускать Docker контейнер в detached mode (фоновом режиме). В этом режиме контейнер работает в фоне, а команда Docker сразу возвращает управление терминалу. Это полезно для долго работающих сервисов или приложений, с которыми не требуется непосредственное взаимодействие в терминале.

Для запуска контейнера в detached mode используйте флаг -d или --detach с командами docker run или docker start.

Давайте запустим простой веб-сервер Nginx в detached mode. Сначала загрузим образ nginx, если его нет локально.

docker pull nginx

Теперь запустим контейнер Nginx в detached mode и пробросим порт 80 контейнера на порт 8080 хостовой машины.

docker run -d --name my-nginx -p 8080:80 nginx

Разберём эту команду:

  • docker run: Создать и запустить новый контейнер
  • -d: Запустить контейнер в detached mode (в фоне)
  • --name my-nginx: Присвоить контейнеру имя my-nginx
  • -p 8080:80: Пробросить порт 80 контейнера на порт 8080 хоста. Это позволит обращаться к веб-серверу Nginx с хостовой машины по адресу http://localhost:8080
  • nginx: Используемый образ

После выполнения команды вы увидите длинную строку символов - это ID контейнера. Командная строка вернётся сразу, что означает работу контейнера в фоне.

Для проверки работы контейнера используйте команду docker ps.

docker ps

Вы должны увидеть контейнер my-nginx со статусом Up.

Можно также проверить доступность веб-сервера Nginx с хостовой машины с помощью curl.

curl http://localhost:8080

В терминале отобразится HTML-содержимое стартовой страницы Nginx, что подтверждает работу контейнера через проброшенный порт.

Для остановки контейнера используйте команду docker stop с именем или ID контейнера.

docker stop my-nginx

После остановки проверьте, что контейнер больше не работает:

docker ps

Контейнер my-nginx не должен отображаться в выводе.

Запуск контейнеров в detached mode необходим для сервисов и приложений, которые должны работать непрерывно без блокировки терминала.

Запуск Docker контейнера с таймаутом

На этом шаге мы научимся запускать Docker контейнер с таймаутом. Команда docker start имеет флаг --attach, который позволяет подключиться к STDOUT/STDERR контейнера и перенаправлять сигналы. При использовании с --attach вы также можете указать флаг --timeout для установки времени ожидания остановки контейнера после отключения клиента. Это особенно полезно для гарантии, что контейнер не будет работать бесконечно, если запустивший его клиент завершит работу.

Сначала создадим контейнер, который будем запускать с таймаутом. Используем образ ubuntu и команду, которая будет поддерживать работу контейнера.

docker create --name my-timeout-ubuntu ubuntu sleep 60

Эта команда создаёт контейнер с именем my-timeout-ubuntu на основе образа ubuntu и устанавливает команду sleep 60. Обратите внимание, что мы использовали docker create, который создаёт контейнер, но не запускает его.

Теперь запустим этот контейнер с помощью docker start с флагами --attach и --timeout. Установим таймаут в 5 секунд.

docker start --attach --timeout 5 my-timeout-ubuntu

Разберём команду:

  • docker start: Запускает остановленный контейнер
  • --attach: Подключается к STDOUT/STDERR контейнера и перенаправляет сигналы
  • --timeout 5: Устанавливает таймаут 5 секунд. Если клиент (в данном случае ваш терминал) отключится, Docker будет ждать 5 секунд для корректной остановки контейнера. Если остановка не произойдёт за это время, Docker отправит сигнал SIGKILL для принудительной остановки
  • my-timeout-ubuntu: Имя запускаемого контейнера

При выполнении этой команды вы подключитесь к выводу контейнера. Поскольку контейнер выполняет только sleep 60, вы не увидите немедленного вывода.

Симулируем отключение клиента, нажав Ctrl+C в терминале. Это отключит вас от контейнера.

После нажатия Ctrl+C Docker начнёт процесс таймаута. Он будет ждать 5 секунд для остановки контейнера my-timeout-ubuntu. Поскольку контейнер выполняет sleep 60, он не остановится за 5 секунд, и Docker принудительно завершит его работу.

Для проверки остановки контейнера используйте docker ps -a.

docker ps -a

Вы должны увидеть контейнер my-timeout-ubuntu со статусом Exited. Это подтверждает, что механизм таймаута сработал и контейнер был остановлен после отключения клиента.

Использование флага --timeout с docker start --attach является хорошей практикой для управления жизненным циклом контейнеров, запущенных с подключением клиента, гарантируя их корректное завершение даже при неожиданном отключении клиента.

Итоги

В этой лабораторной работе мы изучили основное назначение команды docker start, которая предназначена для возобновления работы остановленного контейнера с сохранением его состояния. Мы разграничили её с командой docker run, создающей и запускающей новый контейнер. На практических примерах мы продемонстрировали, как создать контейнер, остановить его с помощью docker stop, проверить его остановленное состояние командой docker ps -a, а затем перезапустить с помощью docker start, подтвердив его рабочее состояние командой docker ps.

Также мы рассмотрели различные способы запуска Docker Desktop с использованием команды docker desktop start, включая синхронный запуск, запуск в detached mode (фоновом режиме) и с указанием таймаута. Эти опции обеспечивают гибкость в управлении процессом запуска Docker Desktop в соответствии с конкретными потребностями и рабочими процессами.