Планирование Docker-Контейнера Или Установка Планировщика В Контейнере

  • Автор темы Gaster.bambaev
  • Обновлено
  • 18, Oct 2024
  • #1

У меня есть интересный вопрос, связанный с планированием моего Docker-контейнера.

У меня есть виртуальная машина с образом докера внутри. Я могу запустить контейнер из изображения, у которого есть точка входа (jar).

Я перед дилеммой: как мне запланировать выполнение заданий в банке.

Вот мои 2 варианта:

1) Если я запускаю cron на виртуальной машине, я могу вызвать команды запуска докера для создания контейнера и запускать различные задания для jar. Проблема здесь в том, что после запуска одного задания контейнер автоматически завершает работу, а второе задание не имеет предыдущей истории ранее запущенных заданий. Я верю, что есть способ обеспечить постоянную работу контейнера с точкой входа, но я еще не исследовал/проверял это.

2) Я могу установить cron внутри контейнера и через Dockerfile предоставить cron для обновления. Однако проблема здесь в том, как мне запустить контейнер и поддерживать его работу для запуска заданий cron?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

Спасибо!

#докер #контейнеры

Gaster.bambaev


Рег
18 Nov, 2019

Тем
79

Постов
194

Баллов
689
  • 25, Oct 2024
  • #2

Вам не нужен хрон. Большинство серверных ОС (CoreOS, RedHat, CentOS, Ubuntu и т. д.) в настоящее время работают системный, а юнит-файлы systemd могут запустить ваш контейнер для выполнения задания, например:

Два юнит-файла. Одними из них являются mytimedstuff.service и mytimedstuff.timer. .timer определяет, когда должна выполняться служба.

В mytimedstuff.service

 
 supervisord 

В mytimedstuff.timer:

ENTRYPOINT ||answer||

Насколько я понимаю, вы хотите запустить несколько сервисов в своем контейнере.

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

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

  • Использовать [Unit] Description=My stuff runs at 00:10 sharp. [Timer] OnCalendar=00:10:00 [Install] WantedBy=multi-user.target to run a single script which manage your process, см. пример здесь

  • Используйте менеджер процессов, например [Unit] Description=Executes mystuff After=default.target docker_network_apps.service Requires=default.target docker_network_apps.service [Service] Type=oneshot User=root ExecStartPre=/usr/bin/docker pull mystuff:stable ExecStartPre=-/bin/bash -c "/usr/bin/docker rm -f mystuffcontainer 2>/dev/null" ExecStart=/bin/bash -c "/usr/bin/docker run --name mystuffcontainer mystuff:stable mystuff" , Подробная статья об использовании Docker с Supervisor

При работе с Docker следует помнить одну вещь: один контейнер — один сервис.

 

Gtb2qwbq


Рег
11 May, 2006

Тем
62

Постов
188

Баллов
498
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно