Автозапуск контейнеров Docker при перезагрузке системы

Убунту 19

Docker произвел революцию в способах развертывания приложений, предоставив легкое и портативное решение для распространения программного обеспечения. Однако при работе с контейнерами Docker возникает один распространенный вопрос: «Как я могу автоматически запускать контейнеры Docker при перезагрузке системы?» В этой статье мы рассмотрим три различных метода достижения этой цели: использование политик перезапуска Docker, systemd и Upstart.

Чтобы автоматически запускать контейнеры Docker при перезагрузке системы, у вас есть три варианта: использование политик перезапуска Docker, systemd или Upstart. Политики перезапуска Docker позволяют указать, как Docker должен обрабатывать перезапуски контейнеров. Systemd — это системный и сервисный менеджер, который позволяет вам создать служебный файл для управления контейнером Docker. Upstart — это основанная на событиях замена традиционного демона инициализации, которую можно использовать для более старых версий Ubuntu. Выберите метод, который наилучшим образом соответствует конфигурации и требованиям вашей системы.

Политики перезапуска Docker

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

Чтобы использовать политику перезапуска, вы указываете ее при запуске контейнера с помощью флага –restart. Например:

docker run –restart=always -d your_image

В этой команде –restart=always устанавливает политику перезапуска всегда, что означает, что Docker всегда будет перезапускать контейнер, независимо от статуса выхода. Флаг -d используется для запуска контейнера в автономном режиме, что означает, что он работает в фоновом режиме.

Другие политики перезапуска включают:

  • нет: это политика по умолчанию. Docker не перезапустит контейнер автоматически.
  • on-failure: Docker перезапустит контейнер, только если он выйдет с ненулевым кодом выхода.
  • Если не остановлено: Docker перезапустит контейнер, если пользователь явно не остановит его.

Системд

Если ваша система использует systemd (например, Ubuntu 15.04 и выше), вы можете создать служебный файл systemd для управления контейнером Docker. Systemd — это системный и сервисный менеджер для операционных систем Linux, который обеспечивает стандартный процесс управления тем, какие программы запускаются при загрузке системы Linux.

Чтобы использовать systemd, выполните следующие действия:

  1. Создайте новый служебный файл в каталоге /etc/systemd/system/. Имя файла должно заканчиваться на .service, например, yourcontainer.service.
  2. В файле службы укажите поведение при перезапуске и команды для запуска и остановки контейнера. Вот пример:

[Service]

Restart=всегда ExecStart=/usr/bin/docker start -a container_name ExecStop=/usr/bin/docker stop -t 2 container_name

В этом примере Restart=always сообщает systemd всегда перезапускать службу. ExecStart указывает команду для запуска контейнера, а ExecStop указывает команду для остановки контейнера. Флаг -a в команде ExecStart указывает Docker прикрепить выходные данные контейнера к журналу, а -t 2 в команде ExecStop указывает Docker подождать 2 секунды, прежде чем остановить контейнер.

  1. Включите запуск службы во время загрузки:

sudo systemctl включить yourcontainer.service

  1. Запустите службу:

sudo systemctl запустить yourcontainer.service

Выскочка

Для более старых версий Ubuntu, которые не поддерживают systemd, вы можете использовать Upstart. Upstart — это основанная на событиях замена традиционного демона инициализации — метода, с помощью которого дистрибутивы Linux обычно запускают приложения во время загрузки.

Чтобы использовать Upstart, выполните следующие действия:

  1. Создайте новый файл конфигурации Upstart в каталоге /etc/init/. Имя файла должно заканчиваться на .conf, например, yourcontainer.conf.
  2. В файле конфигурации определите команды запуска и остановки контейнера. Вот пример:

запустите в файловой системе и запустите остановку докера на уровне выполнения [!2345]
сценарий возрождения /usr/bin/docker start -a container_name end script pre-stop script /usr/bin/docker stop container_name end script

В этом примере запуск в файловой системе и запущенный докер сообщает Upstart о необходимости запуска контейнера, когда файловая система и докер будут готовы. остановить на уровне выполнения [!2345] говорит Upstart остановить контейнер, когда система выключается. respawn сообщает Upstart о перезапуске контейнера в случае его сбоя. Разделы script и pre-stop script определяют команды для запуска и остановки контейнера.

  1. Запустите контейнер:

sudo запустите свой контейнер

  1. Включите запуск контейнера во время загрузки:

sudo update-rc.d настройки вашего контейнера по умолчанию

Не забудьте заменить your_image и container_name соответствующими значениями для вашей установки. Кроме того, выберите только один метод (либо политики перезапуска, либо systemd, либо Upstart) для управления автозапуском контейнера Docker во избежание конфликтов.

В заключение, Docker предоставляет несколько методов автозапуска контейнеров при перезагрузке системы. Лучший метод для вас зависит от вашей конкретной конфигурации системы и требований. Понимая эти методы, вы можете быть уверены, что ваши контейнеры Docker всегда готовы к работе, даже после перезагрузки системы.

Вы можете использовать команду docker inspect для проверки политики перезапуска контейнера Docker. Например, docker inspect –format ‘{{ .HostConfig.RestartPolicy.Name }}’ имя_контейнера отобразит политику перезапуска контейнера с именем имя_контейнера.

Да, вы можете указать пользовательскую политику перезапуска для контейнера Docker. Вместо использования предопределенных политик перезапуска (нет, всегда, при сбое, если не остановлено) вы можете использовать флаг –restart с дополнительными параметрами. Например, docker run –restart=on-failure:5 -d your_image перезапустит контейнер до 5 раз в случае сбоя.

Чтобы отключить автозапуск контейнера Docker, вы можете либо удалить политику перезапуска, либо установить для нее значение «нет». Вы можете использовать команду docker update, чтобы изменить политику перезапуска работающего контейнера. Например, docker update –restart=no container_name отключит автозапуск контейнера с именем container_name.

Если вы вручную остановите контейнер Docker с помощью политики перезапуска, Docker все равно попытается перезапустить контейнер в соответствии с указанной политикой перезапуска. Однако если вы явно остановите контейнер с помощью команды docker stop или другого подобного метода, Docker не перезапустит контейнер.

Да, вы можете использовать systemd или Upstart для управления автозапуском нескольких контейнеров Docker. Просто создайте отдельные служебные файлы или файлы конфигурации для каждого контейнера и определите соответствующие команды запуска и остановки. Включите и запустите каждую службу или контейнер по отдельности, используя соответствующие команды для systemd или Upstart.

Чтобы удалить конфигурацию автозапуска контейнера Docker, управляемого systemd, вы можете использовать команду sudo systemctl disable yourcontainer.service. Для Upstart вы можете использовать sudo update-rc.d -f yourcontainer remove. Это удалит службу или контейнер из конфигурации автозапуска.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *