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

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

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

Введение

В этой лабораторной работе вы научитесь перезапускать Docker Desktop — базовую операцию для управления вашей Docker-средой. Мы рассмотрим причины перезапуска Docker Desktop, который эквивалентен перезапуску службы Docker daemon в Linux-среде, подобной той, что предоставляется в этой виртуальной машине LabEx.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/restart("Restart Container") docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/system("Manage Docker") subgraph Lab Skills docker/ps -.-> lab-555147{{"Как использовать команду docker desktop restart для перезапуска Docker Desktop"}} docker/start -.-> lab-555147{{"Как использовать команду docker desktop restart для перезапуска Docker Desktop"}} docker/stop -.-> lab-555147{{"Как использовать команду docker desktop restart для перезапуска Docker Desktop"}} docker/restart -.-> lab-555147{{"Как использовать команду docker desktop restart для перезапуска Docker Desktop"}} docker/info -.-> lab-555147{{"Как использовать команду docker desktop restart для перезапуска Docker Desktop"}} docker/system -.-> lab-555147{{"Как использовать команду docker desktop restart для перезапуска Docker Desktop"}} end

Понимание назначения перезапуска Docker Desktop

На этом шаге мы разберёмся, зачем нужен перезапуск Docker Desktop. Хотя среда LabEx предоставляет Linux VM с предустановленным Docker, концепция перезапуска Docker daemon является фундаментальной для управления Docker-средами, включая Docker Desktop на других операционных системах.

Docker daemon — это фоновый сервис, который управляет объектами Docker, такими как образы, контейнеры, сети и тома. Иногда может потребоваться перезапустить Docker daemon по разным причинам:

  • Применение изменений конфигурации: Некоторые изменения в конфигурации Docker daemon требуют перезапуска для вступления в силу.
  • Устранение неполадок: Перезапуск демона может решить различные проблемы, такие как невозможность запуска контейнеров, сетевые проблемы или проблемы с производительностью.
  • Освобождение ресурсов: В некоторых случаях перезапуск демона помогает освободить системные ресурсы, которые могли быть заняты Docker-процессом.

В Linux-среде, такой как VM LabEx, вы взаимодействуете с Docker daemon напрямую через интерфейс командной строки docker. Эквивалентом перезапуска Docker Desktop в других операционных системах является перезапуск службы Docker daemon в Linux.

Чтобы проверить статус службы Docker в VM LabEx, можно использовать команду systemctl:

systemctl status docker

Вы должны увидеть вывод, указывающий, что служба Docker активна и работает.

● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since ...
       Docs: https://docs.docker.com
   Main PID: ... (dockerd)
      Tasks: ...
     Memory: ...
        CPU: ...
     CGroup: /system.slice/docker.service
             └─... /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Этот вывод подтверждает, что Docker daemon работает как системная служба. Хотя мы не будем перезапускать службу на этом конкретном шаге, чтобы не нарушить работу среды, понимание её статуса — это первый шаг к управлению ею.

Выполнение базовой команды перезапуска Docker Desktop

На этом шаге мы научимся перезапускать Docker daemon в Linux-среде, что аналогично перезапуску Docker Desktop. Как мы узнали ранее, Docker daemon — это системная служба. Для перезапуска системных служб в Linux используется команда systemctl.

Основная команда для перезапуска службы Docker — sudo systemctl restart docker. Команда sudo используется потому, что перезапуск системных служб обычно требует административных привилегий. Команда systemctl restart останавливает службу, если она запущена, а затем запускает её снова.

Перед перезапуском выполним простую Docker-команду, чтобы убедиться, что демон отвечает. Мы можем вывести список работающих контейнеров с помощью docker ps. Поскольку мы ещё не запускали контейнеры, вывод должен быть пустым или содержать только заголовки столбцов.

docker ps

Теперь перезапустим службу Docker. Выполните следующую команду:

sudo systemctl restart docker

Эта команда остановит, а затем запустит Docker daemon. Вы не увидите много вывода, если не возникнет ошибка.

После завершения перезапуска проверим статус службы Docker, чтобы убедиться, что она работает:

systemctl status docker

Вы должны увидеть вывод, аналогичный предыдущему шагу, указывающий, что служба активна и работает, но строка "Active" будет показывать более свежую временную метку, что свидетельствует о перезапуске.

Наконец, снова выполним docker ps, чтобы подтвердить, что Docker daemon отвечает после перезапуска:

docker ps

Вывод снова должен показать заголовки контейнеров, подтверждая работоспособность Docker daemon.

Перезапуск Docker daemon — это распространённый шаг при устранении неполадок и необходим после внесения определённых изменений в конфигурацию.

Перезапуск Docker Desktop в detached mode (фоновом режиме)

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

При выполнении команды в foreground (интерактивном режиме) ваш терминал занят до завершения команды. В отличие от этого, запуск процесса в фоновом режиме ("detached") позволяет продолжать использовать терминал для других задач. Системные службы, такие как Docker daemon, предназначены для автоматического запуска в фоновом режиме при старте системы.

В контексте systemctl команда restart по умолчанию выполняется таким образом, что не блокирует терминал. Она инициирует процесс остановки и запуска и возвращает управление терминалу сразу после выполнения команды, даже если служба ещё полностью не запустилась. Это аналогично концепции detached mode для контейнеров.

Для демонстрации перезапустим службу Docker снова, используя ту же команду:

sudo systemctl restart docker

Обратите внимание, что после выполнения команды приглашение терминала возвращается немедленно. Сама команда systemctl restart не ожидает полного запуска Docker daemon перед возвратом управления. Демон теперь перезапускается в фоновом режиме.

Вы можете проверить, что служба перезапускается и в конечном итоге работает в фоне, посмотрев её статус:

systemctl status docker

Вы увидите изменение статуса с stopping (остановка) на starting (запуск) и в конечном итоге на active (running) (активен/работает). Это происходит независимо от вашего терминального сеанса после инициирования команды перезапуска.

Такое поведение systemctl restart аналогично запуску Docker-контейнера с флагом -d или --detach, когда контейнер запускается в фоновом режиме и не блокирует терминал.

Перезапуск Docker Desktop с таймаутом

На этом шаге мы узнаем, как перезапустить Docker daemon с учётом таймаута. Хотя сама команда systemctl restart не имеет встроенного параметра таймаута (в отличие от некоторых Docker-команд, например docker stop --time), концепция таймаута важна при управлении службами.

В контексте systemctl операции остановки и запуска, выполняемые во время перезапуска, имеют собственные внутренние таймауты, определённые в файле юнита службы. Если служба не останавливается или не запускается в течение этих таймаутов, systemd (менеджер системы и служб) обычно сообщает об ошибке.

Например, если Docker daemon занят и слишком долго завершает работу при выполнении systemctl restart, systemd может в конечном итоге завершить процесс и сообщить о сбое. Аналогично, если демон не запустится в течение настроенного таймаута, операция запуска завершится ошибкой.

Хотя мы не можем напрямую указать таймаут для всей операции systemctl restart, мы можем смоделировать сценарий, где таймаут может быть актуален, наблюдая за состоянием службы во время перезапуска.

Давайте инициируем ещё один перезапуск службы Docker:

sudo systemctl restart docker

Сразу после выполнения команды вы можете быстро проверить статус. Вы можете кратко увидеть службу в состоянии "stopping" (остановка) или "activating" (активация) перед возвратом в "active (running)" (активен/работает).

systemctl status docker

Время перехода между этими состояниями зависит от внутренних таймаутов, настроенных для юнита службы Docker. Если служба зависнет во время остановки или запуска, systemd применит эти таймауты.

Например, если операция остановки превысит таймаут, вы можете увидеть сообщение об ошибке в выводе systemctl status docker или в системных логах (journalctl -u docker).

Хотя у нас нет прямой опции командной строки для установки таймаута для всей операции systemctl restart, понимание того, что базовые процессы остановки и запуска подвержены таймаутам, крайне важно для устранения проблем управления службами. Если перезапуск постоянно завершается сбоем, изучение логов службы на предмет ошибок таймаута — хорошая отправная точка.

Итоги

В этой лабораторной работе мы изучили назначение перезапуска Docker Desktop, который аналогичен перезапуску службы Docker daemon в Linux-окружении. Мы поняли, что перезапуск необходим для применения изменений конфигурации, устранения неполадок и освобождения ресурсов. Также мы научились проверять статус службы Docker с помощью команды systemctl status docker в Linux-виртуальной машине.

Затем мы выполнили базовую команду docker desktop restart, хотя в среде лабораторной работы используется Linux-виртуальная машина, где мы взаимодействуем напрямую с Docker daemon. Мы также рассмотрели перезапуск Docker Desktop в detached mode (фоновом режиме) и с указанным таймаутом, понимая практические последствия этих опций для эффективного управления Docker-окружением.