Контейнеризация GAMS со стандартными библиотеками Python с использованием Docker

В этой статье обсуждается сложная задача контейнеризации GAMS (Общая система алгебраического моделирования) вместе со стандартными библиотеками Python в одном контейнере Docker из-за отсутствия легкодоступных онлайн-ресурсов и собственной ограниченной документации GAMS по Docker.

Вот основные шаги, которые мы предприняли для решения проблемы:

  1. Подготовка базового образа Docker. Мы начали с базового образа Ubuntu в Docker. Затем мы установили необходимые зависимости и библиотеки Python, необходимые нашему приложению, такие как GCC, Git, Ninja-build, libglib2.0–0 и т. д.
  2. Установка Anaconda: мы установили дистрибутив Miniconda, чтобы упростить управление нашей средой Python.
  3. Установка GAMS: загрузите программу установки GAMS и запустите ее. Включил GAMS в наш путь к среде, чтобы обеспечить его доступность для выполнения.
  4. Интеграция кода приложения: скопированы файлы кода нашего приложения, включая скрипты Python и вспомогательные модули, в рабочую область контейнера Docker.
  5. Предоставление лицензии GAMS: файл лицензии GAMS добавлен в соответствующий каталог в контейнере Docker.
  6. Создание сценариев точки входа:разработаны сценарии оболочки (setup_conda.sh и docker_entrypoint.sh) для настройки среды conda, установки пакетов Python и запуска наших приложений Python соответственно. Гарантировано, что эти сценарии были исполняемыми.
  7. Конфигурация точки входа: Docker настроен для запуска нашего сценария setup_conda.sh при запуске контейнера, который, в свою очередь, инициирует наш сценарий docker_entrypoint.sh.

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

Подготовка сценариев Entrypoint: поскольку наше приложение использует несколько библиотек Python и определенную среду Python, управляемую conda, мы разработали сценарий оболочки (setup_conda.sh) для настройки этой среды в контейнере Docker. Этот скрипт активирует среду conda «gams», устанавливает привязки GAMS Python и другие необходимые пакеты Python. Мы также создали еще один сценарий оболочки (docker_entrypoint.sh), который отвечает за запуск наших приложений Python.

Основная причина, по которой нам потребовался setup_conda.sh, заключалась в том, что при создании образа Docker мы не находились в контексте сеанса оболочки и, следовательно, не могли напрямую активировать среду conda. Эта проблема потенциально может привести к сбоям при попытке установить пакеты Python или запустить сценарии Python, зависящие от конкретной среды Python. Создав отдельный скрипт для управления настройкой conda, мы смогли установить необходимую среду во время выполнения, а не во время сборки, обеспечив правильную настройку необходимых пакетов и конфигураций Python.

Конфигурация точки входа: мы настроили Docker для запуска нашего сценария setup_conda.sh при запуске контейнера. Этот сценарий обеспечивает настройку необходимой среды conda и пакетов Python, а затем запускает docker_entrypoint.sh для запуска наших приложений Python.