🐳 Как запустить Docker / Podman контейнеры в качестве службы Systemd |

🐳 Как запустить Docker / Podman контейнеры в качестве службы Systemd

Мануал

Контейнерные движки, такие как Podman или Docker, не были наделены способностью / возможностью управлять системными службами, такими как остановка служб, порядок запуска, проверка зависимостей и восстановление сбойных служб.

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

Хорошая новость заключается в том, что теперь Podman / Docker контейнерами можно управлять аналогичным образом, как можно управлять httpd, nginx или любой другой службой, к которой вы привыкли.

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

Прежде чем мы начнем, еще одна приятная особенность заключается в том, что при запуске контейнера можно дополнительно запустить определенную службу, такую как Nginx, установленную в контейнере, с помощью systemd.

Использование systemd для запуска контейнеров

Если у вас не установлен podman, выполните приведенные ниже команды, чтобы ускорить процесс:

######## CentOS 8/RHEL 8 ##########
sudo dnf -y install podman

Установите podman на Ubuntu

Посмотрите инструкцию, показанную ниже, чтобы узнать как установить podman на Ubuntu:

Как установить Podman на Ubuntu

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

Шаг 1: Скачайте образ, если у вас еще его нет

В качестве примера, давайте вытащим контейнер Nginx из реджестри Docker.

$ podman pull docker.io/nginx
Убедитесь, что ображз успешно скачан:
$ podman images

REPOSITORY                TAG      IMAGE ID       CREATED        SIZE   
localhost/firstapache     latest   a0c546bc3927   23 hours ago   1.68 GB
docker.io/library/nginx   latest   602e111c06b6   32 hours ago   131 MB 

Шаг 2: Запустите контейнер, используя Podman

На этом шаге мы инициализируем наш образ для запуска в качестве образа с именем по нашему выбору.

Если вы используете CentOS / RHEL и настаиваете на использовании SELinux, вы должны включить логическое свойство container_manage_cgroup для запуска контейнеров с systemd следующим образом

sudo setsebool -P container_manage_cgroup on

После этого приступите к запуску контейнера

$ sudo podman run -d --name nginx_server -p 7070:80 nginx
384a42964b1b133d82320ebaa2f54407c7ca23d06154a5f413c8119026bda231
Чтобы убедиться, что контейнер работает, выполните команду podman ps
$ sudo podman ps
CONTAINER ID  IMAGE                           COMMAND               CREATED         STATUS             PORTS                 NAMES
384a42964b1b  docker.io/library/nginx:latest  nginx -g daemon o...  48 seconds ago  Up 46 seconds ago  0.0.0.0:7070->80/tcp  nginx_server

Шаг 3: Настройте контейнер как службу systemd

Мы собираемся создать файл конфигурации юнита в каталоге /etc/systemd/system/.

В качестве примера мы собираемся создать файл в каталоге с именем /etc/systemd/system/nginx-container.service.

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

Если вы не уверены, просто запустите «sudo podman ps »и проверьте столбец« NAMES ».

$ sudo vim /etc/systemd/system/nginx-container.service

[Unit]
Description=Cool Nginx container
Wants=syslog.service

[Service]
Restart=always
ExecStart=/usr/bin/podman start -a nginx_server
ExecStop=/usr/bin/podman stop -t 2 nginx_server

[Install]
WantedBy=multi-user.target

И теперь, мы готовы управлять контейнером, как и любой другой сервис, используя systemd.

Шаг 4: Проверка работоспособности настроек

Запустить сервис

Запустите обычную команду systemd start, чтобы запустить наш сервис

sudo systemctl start nginx-container

Проверьте его статус

$ systemctl status nginx-container

● nginx-container.service - Cool Nginx container
   Loaded: loaded (/etc/systemd/system/nginx-container.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2020-04-24 21:58:15 UTC; 9s ago
 Main PID: 3910 (podman)
    Tasks: 11 (limit: 11121)
   Memory: 32.2M
   CGroup: /system.slice/nginx-container.service
           └─3910 /usr/bin/podman start -a nginx_server
Если вы хотите запустить контейнер при загрузке системы, просто включите его с помощью enable,  как показано ниже
$ sudo systemctl enable nginx-container

Created symlink /etc/systemd/system/local.target.wants/nginx-container.service → /etc/systemd/system/nginx-container.service.

Заключение

В результате мы теперь можем запускать наши контейнеры как системные сервисы!

см. также:

🐳 Настройка локального реджестри для Docker контейнеров с помощью Podman & Let’s Encrypt SSL

🐳 Как установить Docker на CentOS 8

☸️ Как вручную скачать образы контейнеров, используя Kubernetes kubeadm

🐳 Как собирать образа контейнеров OCI и Docker с помощью Buildah

☸️ Лучшие минимальные контейнерные операционные системы для запуска Kubernetes

🥤 Как установить Podman на Arch Linux / Manjaro

🐳 Как установить и использовать Podman на CentOS 8 / RHEL 8

☸️ Как опубликовать образ Docker в Docker Hub с помощью Podman

 

 

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий