Melakukan container GAMS dengan Library Python Standar menggunakan Docker

Artikel ini membahas tugas kompleks dalam memasukkan GAMS (Sistem Pemodelan Aljabar Umum) bersama dengan pustaka Python standar dalam satu wadah Docker, karena tidak adanya sumber daya online yang tersedia dan dokumentasi Docker milik GAMS yang terbatas.

Berikut adalah langkah-langkah penting yang kami lakukan untuk mengatasi masalah ini:

  1. Persiapan Gambar Dasar Docker:Kami memulai dengan gambar dasar Ubuntu di Docker. Kemudian, kami menginstal dependensi dan pustaka Python yang diperlukan yang dibutuhkan aplikasi kami, seperti GCC, Git, Ninja-build, libglib2.0–0, dll.
  2. Pemasangan Anaconda: Kami memasang distribusi Miniconda untuk membantu mengelola lingkungan Python kami.
  3. Pemasangan GAMS: Mengunduh pemasang GAMS dan menjalankannya. Menyertakan GAMS di jalur lingkungan kami untuk memastikannya dapat diakses untuk dieksekusi.
  4. Integrasi Kode Aplikasi: Menyalin file kode aplikasi kami, termasuk skrip Python dan modul pendukung, ke dalam ruang kerja kontainer Docker.
  5. Penyediaan lisensi GAMS: Menambahkan file lisensi GAMS ke direktori yang sesuai dalam wadah Docker.
  6. Pembuatan Skrip Titik Masuk: Mengembangkan skrip shell (setup_conda.sh dan docker_entrypoint.sh) untuk menyiapkan lingkungan conda, menginstal paket Python, dan memulai aplikasi Python kami masing-masing. Memastikan bahwa skrip ini dapat dieksekusi.
  7. Konfigurasi titik masuk: Mengonfigurasi Docker untuk menjalankan skrip setup_conda.sh saat meluncurkan container, yang pada gilirannya akan memulai skrip docker_entrypoint.sh kami.

Proses ini memungkinkan kami membuat image Docker yang dapat menjalankan GAMS dan pustaka Python standar secara harmonis. Gambar ini dapat diterapkan dengan lancar di berbagai lingkungan tanpa mengkhawatirkan ketergantungan, sehingga menawarkan manfaat containerisasi untuk aplikasi GAMS kami.

Persiapan Skrip Titik Masuk: Karena aplikasi kami bergantung pada beberapa pustaka Python dan lingkungan Python tertentu yang dikelola oleh conda, kami mengembangkan skrip shell (setup_conda.sh) untuk menyiapkan lingkungan ini dalam wadah Docker. Skrip ini mengaktifkan lingkungan conda 'gams', menginstal binding GAMS Python, dan paket Python lain yang diperlukan. Kami juga membuat skrip shell lain (docker_entrypoint.sh) yang bertanggung jawab untuk memulai aplikasi Python kami.

Alasan utama kami memerlukan setup_conda.sh adalah karena, saat membuat image Docker, kami tidak berada dalam konteks sesi shell, dan karenanya tidak dapat langsung mengaktifkan lingkungan conda. Masalah ini berpotensi menyebabkan kegagalan saat mencoba menginstal paket Python atau menjalankan skrip Python yang bergantung pada lingkungan Python tertentu. Dengan membuat skrip terpisah untuk mengelola pengaturan conda, kami dapat membangun lingkungan yang diperlukan selama runtime alih-alih waktu build, memastikan paket dan konfigurasi Python yang diperlukan telah diatur dengan benar.

Konfigurasi Titik Masuk: Kami mengonfigurasi Docker untuk menjalankan skrip setup_conda.sh saat meluncurkan sebuah container. Skrip ini memastikan lingkungan conda yang diperlukan dan paket Python telah diatur dan kemudian memicu docker_entrypoint.sh untuk menjalankan aplikasi Python kami.