Определение задач в файле составления Docker - PullRequest
0 голосов
/ 09 декабря 2018

Я установил более старую систему, на которой я работаю.У меня есть файл составления докера, ссылающийся на изображение, созданное на postgres, и изображение, созданное на tomcat.Этот файл compose хорошо работает для запуска и остановки тестовой версии приложения.

Compose file

services:
  db:
    image: mypostgres
    container_name: db
    networks:
      - mynetwork
  tomcat:
    image: mytomcat
    container_name: tomcat
    networks:
      - mynetwork
    environment:
      - myhost=localhost
    volumes:
      - "mydata:/mydata"
    depends_on:
      - db

Запуск задач в одном из контейнеров

У меня есть несколькодополнительные задачи командной строки, которые я хотел бы выполнить в системе.Некоторые из этих задач требуют большого объема вычислений.Эти задачи работают с файлами в томе mydata.

В настоящее время я использую следующую команду для запуска этой задачи в контейнере Tomcat.

docker exec tomcat /bin/my-script.sh param

Могут ли эти задачи быть определены с помощью docker-compose?

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

  mycli:
    image: mytomcat
    networks:
      - mynetwork
    environment:
      - myhost=tomcat
    volumes:
      - "mydata:/mydata"
    depends_on:
      - db
      - mycli
    entrypoint: /bin/myscript.sh
    command:
      - param

Что было бы лучше для такой конфигурации?

Что кажется хорошим при добавлении этого всоставьте файл

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

Что кажется плохим при добавлении этого в файл составления

  • При запуске службы должны выполняться некоторые действия.После того, как это действие завершено, контейнер находится в состоянии выхода.
  • Если я запускаю задачу с docker-compose run, то после выполнения вышедшие задачи, похоже, зависают.

1 Ответ

0 голосов
/ 09 декабря 2018

Можно ли определить эти задачи с помощью docker-compose?

Нет;файл docker-compose.yml определяет только долго работающие "сервисные" контейнеры.Нет способа определить дополнительную задачу типа docker exec, которую вы запускаете в уже запущенном контейнере.В принципе, вы можете определить дополнительные «сервисы», которые выполняют свою единицу работы и сразу же завершают работу, но каждый раз, когда вы запускаете docker-compose up, он захочет перезапустить все из них.

инициализация данныхtask

Если у вас есть что-то, что нужно запустить при первом запуске (например, предварительная загрузка данных) или при каждом запуске (возможно, при переносе базы данных), вы можете структурировать свой контейнер так, чтобы он выполнялся до запуска основного приложения.Я склонен делать подобные вещи в скрипте точки входа;он принимает команду контейнера в качестве аргументов командной строки, поэтому у него есть возможность принять решение на основе того, какая команда выполняется, выполнить необходимую настройку, а затем фактически запустить команду.

#!/bin/sh
if [ "$1" = "theapp" ]; then
  # Hypothetically: if we're starting theapp, run its migrations
  # first before running the service itself
  theapp migrate
fi
# Now do whatever the command is
exec "$@"

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

дополнительные [...] задачи, которые я хотел бы выполнить

Вы можете посмотреть, можете ли вы добавлять сетевые вызовы, которые их инициируют, либопо защищенному URL-адресу «admin» или по отдельному порту, который не публикуется извне.Это позволило бы избежать проблемы, связанной с необходимостью получить корневую оболочку для выполнения рутинных задач обслуживания.

В противном случае сценарий оболочки для автоматизации задачи и ее аргументов по крайней мере спасет вас от необходимости ввода и запоминания.

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