GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Cara Dockerisasi Aplikasi Python Dengan Miniconda [Pendekatan Hybrid]

Jika Anda terbiasa dengan Docker, Anda mungkin tahu bahwa Anda dapat membuat image buruh pelabuhan khusus menggunakan Dockerfile. Saya telah menulis tentang secara rinci.

Cara Membuat Gambar Docker Kustom Dengan Dockerfile [sangat Mudah]Kekuatan sebenarnya dari Docker terletak pada penyesuaian gambar docker dasar sesuai kebutuhan Anda. Dengan itu, Anda dapat dengan mudah dan cepat menerapkan lingkungan Linux khusus dengan menjalankan wadah dari gambar buruh pelabuhan khusus itu. Buku Pegangan LinuxAvimanyu Bandyopadhyay

Dalam tutorial ini, saya akan menunjukkan cara mengikuti ide yang sama tetapi untuk aplikasi Python saja. Ini akan berguna bagi pengguna dan pengembang.

Saya akan menggunakan gambar Python minimal. Setelah Anda memodifikasi dan merevisi gambar itu, Anda tidak perlu lagi khawatir menginstal Aplikasi Python Anda pada sistem operasi yang berbeda. Anda akan dapat langsung menjalankan aplikasi Python Anda dengan Docker setiap saat. Jadi, Anda dapat mengucapkan selamat tinggal pada cegukan penginstalan berbasis host tersebut!

Membuat gambar buruh pelabuhan untuk aplikasi Python Anda

Disini saya akan menggunakan Miniconda. Miniconda adalah penginstal minimal gratis untuk conda dan memberi Anda versi kecil, bootstrap dari Anaconda hanya dengan kebutuhan dasar yang Anda butuhkan untuk menjalankan aplikasi Python.

Mengapa Miniconda?

Ada lebih dari satu alasan:

Saat Anda menginstal Miniconda pada sebuah host, Anda sebenarnya tidak menggunakan versi Python yang disediakan oleh manajer paket sistem operasi. Miniconda menginstal di lokasi terpisah yang memiliki lingkungan Python sendiri. Jadi, ini memberi Anda tingkat isolasi tambahan saat dilakukan pada container Docker.

Karena poin di atas, Anda juga mendapatkan keuntungan lain:Karena Anda menggunakan conda yang diinstal Miniconda, Anda dapat menggunakan alat ini untuk mengubah versi Python yang relevan dari aplikasi Anda jika diperlukan. Ini adalah bantuan besar bagi pengembang aplikasi yang didasarkan pada versi yang berbeda dari Python 3:Mereka bisa menjadi 3.6, 3.7, 3.8, 3.9 atau versi sebelumnya juga.

Misalnya, jika secara default Anda menjalankan Python 3.9 tetapi aplikasi Python Anda memerlukan Python 3.7 karena ketergantungan yang relevan, apa yang akan Anda lakukan?

Di sinilah conda bisa membantumu. Dengannya, Anda dapat menjalankan conda install python=3.7 untuk mengubah versi Python yang diperlukan dengan menginstalnya dengan semua dependensi yang diperlukan.

  • Miniconda memungkinkan Anda untuk menginstal aplikasi Python 2 dan Python 3. Meskipun Python 2 secara resmi mati, Anda masih dapat menguji aplikasi lama di atas lingkungan ini tanpa perlu mengaudit port Python 3 baru Anda dengan 2to3.
  • Ada juga banyak kasus penggunaan di mana aplikasi Python yang berjalan di Miniconda mencari dependensi sisi host non-Python (misalnya g++ ). Inilah saatnya gabungan kekuatan Miniconda dan Docker menjadi solusi yang bagus!
  • Apakah saya lupa menyebutkan bahwa Anda juga dapat membuat dan mengaktifkan lingkungan Aplikasi Python Anda sendiri dengan conda ? Isolasi lagi!
  • Setiap saat, Anda selalu memiliki opsi untuk beralih antara versi Python default container Docker dan versi Miniconda. Ini memberi Anda lebih banyak fleksibilitas karena Anda selalu dapat membangun kembali gambar baru dengan perubahan kapan pun Anda mau.

Jadi, sekarang mari kita lanjutkan dengan membuat image Aplikasi Python baru dengan Miniconda dan Docker!

Prasyarat

Jika Anda belum melakukannya, silakan instal Docker di Ubuntu atau distribusi Linux mana pun yang Anda gunakan. Pastikan untuk menambahkan diri Anda ke grup buruh pelabuhan sehingga Anda dapat menjalankan buruh pelabuhan tanpa Sudo. Anda memerlukan koneksi internet aktif untuk mengunduh gambar buruh pelabuhan dasar.

Untuk contoh aplikasi Python, saya menggunakan sederhana "Hello World!" contoh bernama python-app.py untuk memudahkan Anda memahami cara menjalankannya melalui Miniconda di Docker.

Aplikasi Python lengkap yang menggunakan pustaka Python berbeda akan sangat diuntungkan dari prosedur yang sama, terutama karena berbagai ketentuan ketergantungan Miniconda.

Langkah 1:Dapatkan gambar Docker [opsional]

Saya memilih Python Slim dalam contoh ini daripada Alpine Linux. Yang terakhir ini sangat kecil tetapi dapat sangat mempengaruhi kinerja ketika menjalankan aplikasi. Namun, Python Slim berukuran sekitar 40 MB, berdasarkan Debian Buster dan Python 3.9.1.

Langkah ini opsional. Saya menyertakannya untuk menunjukkan bahwa Anda dapat membandingkannya dengan gambar aplikasi python yang disesuaikan seperti pada tutorial Dockerfile sebelumnya.

Tarik gambar buruh pelabuhan terbaru dari Python Slim menggunakan docker pull perintah:

docker pull python:slim

Langkah 2:Buat Dockerfile dengan penyesuaian yang diperlukan

Sekarang mari kita buat file kosong baru bernama Dockerfile menggunakan perintah sentuh. Tapi pertama-tama buat direktori untuk aplikasi buruh pelabuhan Anda.

mkdir python-docker
cd python-docker
touch Dockerfile

Saya akan melampirkan Dockerfile lengkap di bawah ini setelah saya selesai menjelaskan langkah-langkah dalam proses pembuatan gambar melalui panduan langkah demi langkah file.

Berikut cara memulai dan mengembangkan citra:

Siapkan gambar dasar

Perbarui paket default terbaru dengan menggunakan Python Slim sebagai gambar dasar.

FROM python:slim
RUN apt-get update && apt-get -y upgrade \

Instal dependensi paket non-Python

Instal semua dependensi non-Python untuk aplikasi Python Anda (misalnya g++ dan lainnya sesuai kebutuhan Anda).

  && apt-get install -y --no-install-recommends \
    git \
    wget \
    g++ \
    gcc \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*

Git dan Wget bisa sangat berguna saat mengambil Aplikasi Python dari repositori dan URL yang berbeda. Terakhir, bersihkan beberapa ruang dengan rm -rf /var/lib/apt/lists/* untuk meminimalkan ukuran gambar Docker akhir.

Instal Miniconda

Setelah diinstal, Miniconda memperbarui .bashrc untuk beralih ke versi Python-nya sendiri.

ENV PATH="/root/miniconda3/bin:${PATH}"
ARG PATH="/root/miniconda3/bin:${PATH}"
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && mkdir /root/.conda \
    && bash Miniconda3-latest-Linux-x86_64.sh -b \
    && rm -f Miniconda3-latest-Linux-x86_64.sh \

Di sini variabel lingkungan diatur dalam jalur sistem penampung. ENV dimaksudkan untuk wadah yang akan Anda jalankan pada gambar dan ARG dimaksudkan untuk container perantara yang dibuat saat pertama kali dibuat.

Jadi, perbedaan antara ENV dan ARG instruksi di blok kode di atas adalah bahwa yang terakhir hanya tersedia saat gambar sedang dibangun. Lihat penjelasan indah ini di sini.

Dengan wget , unduh Miniconda versi terbaru dari repositori resmi Anaconda. Setelah membuat direktori konfigurasi penting, instal dan terakhir hapus penginstal.

Konfigurasikan Miniconda ke Bash Shell

Setelah menginstal Miniconda, tampilkan nomor versinya untuk konfirmasi dan inisialisasi ke shell Bash untuk wadah . Baris kedua memperbarui .bashrc default Anda berkas:

	&& echo "Running $(conda --version)" && \
    conda init bash && \

Muat ulang Bash dengan perubahan baru

Muat ulang Bash untuk sistem pembangunan Docker untuk beralih ke versi Miniconda Python daripada Debian (gambar OS dasar).

	. /root/.bashrc && \

Juga, perbarui paket Miniconda saat ini yang dibundel secara default.

	conda update conda && \

Siapkan lingkungan Conda untuk aplikasi Anda

Buat dan aktifkan lingkungan Conda terpisah untuk Aplikasi Python Anda.

    conda create -n python-app && \
    conda activate python-app && \

Instal versi Python yang relevan yang Anda butuhkan untuk aplikasi Anda. Dengan asumsi aplikasi Anda didasarkan pada Python 3.6, setel versi ini dalam lingkungan virtual baru bersama dengan Pip, yang juga sangat berguna saat mengelola aplikasi Python.

    conda install python=3.6 pip && \

Instal Aplikasi Python Anda

Bergantung pada cara Anda menggunakan aplikasi, Anda dapat:

saya. Instal dengan pip yang secara konvensional menggunakan setup.py file yang tersedia di repositori Anda. Ini adalah alat yang sama yang dibahas sebelumnya, tetapi di sini saya menggunakannya melalui Conda.

	git clone replace-me-with-repo-url
	cd repo-name
	pip install -e .

ii. ..atau langsung jalankan dengan python perintah:

	git clone replace-me-with-repo-url
	cd repo-name
	python python-app.py

Dalam demo Dockerfile, saya akan menggunakan "Hello World!" contoh untuk memudahkan Anda memahami bagaimana Anda dapat menjalankannya secara langsung dengan meluncurkan wadah atau di dalam bash shell-nya dengan Docker. Jadi, misalkan saya menggunakan cara ke-2:

    echo 'print("Hello World!")' > python-app.py

Jadi sekarang saya telah menyertakan baris di atas, sebuah file bernama python-app.py dibuat yang seharusnya menghasilkan pesan Hello World setiap kali Anda menjalankannya dengan perintah python python-app.py .

Perbarui file .bashrc untuk aplikasi Anda seperti yang dilakukan Miniconda:

Penginstal Miniconda secara otomatis memperbarui file .bashrc setelah Anda menjalankan conda init bash seperti yang ditunjukkan sebelumnya. Anda dapat melakukan hal yang sama untuk aplikasi Python Anda juga. Setiap kali Anda menjalankan bash kontainer, lingkungan akan diaktifkan, dan Anda juga dapat menggunakan nama aplikasi Python Anda sebagai perintah untuk menjalankannya. Di sini saya menggunakan namanya sebagai python-app :

RUN echo 'conda activate python-app \n\
alias python-app="python python-app.py"' >> /root/.bashrc

Siapkan aplikasi untuk eksekusi akhir

Terakhir, saya membuat titik masuk dan menetapkan perintah yang memungkinkan Anda menjalankannya setiap kali Anda menjalankan wadah berdasarkan gambar ini:

ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
CMD ["python python-app.py"]

Berkas Docker Lengkap

Anda dapat menggunakan editor seperti Vim atau Nano atau menggunakan cat perintah untuk menambahkan baris yang dibahas di atas ke Dockerfile.

FROM python:slim
RUN apt-get update && apt-get -y upgrade \
  && apt-get install -y --no-install-recommends \
    git \
    wget \
    g++ \
    ca-certificates \
    && rm -rf /var/lib/apt/lists/*
ENV PATH="/root/miniconda3/bin:${PATH}"
ARG PATH="/root/miniconda3/bin:${PATH}"
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && mkdir /root/.conda \
    && bash Miniconda3-latest-Linux-x86_64.sh -b \
    && rm -f Miniconda3-latest-Linux-x86_64.sh \
    && echo "Running $(conda --version)" && \
    conda init bash && \
    . /root/.bashrc && \
    conda update conda && \
    conda create -n python-app && \
    conda activate python-app && \
    conda install python=3.6 pip && \
    echo 'print("Hello World!")' > python-app.py
RUN echo 'conda activate python-app \n\
alias python-app="python python-app.py"' >> /root/.bashrc
ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
CMD ["python python-app.py"]

Saat Anda mencoba aplikasi Anda sendiri, ganti echo 'print("Hello World!")' > python-app.py baris di atas dengan salah satu dari dua cara yang dijelaskan dalam Instal Aplikasi Python Anda bagian di atas.

Langkah 3:Bangun gambar Aplikasi Python dengan Dockerfile

Seperti yang mungkin sudah Anda ketahui, perintah untuk membuat image Docker yang dimodifikasi dari Dockerfile terlihat seperti:

docker build -t python-app PATH_to_Dockerfile

Dengan tag -t, Anda menentukan nama gambar Docker aplikasi Anda. Saya telah menetapkannya sebagai python-app dalam contoh perintah di atas.

Mengingat bahwa Dockerfile ada di direktori Anda saat ini, Anda dapat membuat image Docker baru dari Aplikasi Python Anda seperti ini:

docker build -t python-app .
[email protected]:~/python-docker$ docker build -t python-app .
Sending build context to Docker daemon   2.56kB
Step 1/8 : FROM python:slim
 ---> 677f7ac99e48
Step 2/8 : RUN apt-get update && apt-get -y upgrade   && apt-get install -y --no-install-recommends     git     wget     g++     ca-certificates     && rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> 15ee9c47c83b
Step 3/8 : ENV PATH="/root/miniconda3/bin:${PATH}"
 ---> Using cache
 ---> cfd5ed6b5ec9
Step 4/8 : ARG PATH="/root/miniconda3/bin:${PATH}"
 ---> Using cache
 ---> e70d06b5ff10
Step 5/8 : RUN wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh     && mkdir /root/.conda     && bash Miniconda3-latest-Linux-x86_64.sh -b     && rm -f Miniconda3-latest-Linux-x86_64.sh     && echo "Running $(conda --version)" &&     conda init bash &&     . /root/.bashrc &&     conda update conda &&     conda create -n python-app &&     conda activate python-app &&     conda install python=3.6 pip &&     echo 'print("Hello World!")' > python-app.py
 ---> Using cache
 ---> 8a7957a6abb2
Step 6/8 : RUN echo 'conda activate python-app \nalias python-app="python python-app.py"' >> /root/.bashrc
 ---> Running in e3193e93b631
Removing intermediate container e3193e93b631
 ---> 948f45eb6024
Step 7/8 : ENTRYPOINT [ "/bin/bash", "-l", "-c" ]
 ---> Running in 621624951dcf
Removing intermediate container 621624951dcf
 ---> 6e8824889502
Step 8/8 : CMD ["python python-app.py"]
 ---> Running in dc97f9d0d8fe
Removing intermediate container dc97f9d0d8fe
 ---> 01bae0a9903c
Successfully built 01bae0a9903c
Successfully tagged python-app:latest

Keluaran di atas didasarkan pada data yang di-cache tetapi ketika Anda menjalankannya untuk pertama kali, itu akan memakan waktu dan menghasilkan keluaran log yang jauh lebih lama.

Sekarang, mari verifikasi bahwa gambar Docker Anda yang dimodifikasi telah menginstal aplikasi contoh dengan menjalankan wadah darinya:

docker run python-app
[email protected]:~/python-docker$ docker run python-app
Hello World!

Jadi, melalui Docker dan Miniconda, Anda sekarang dapat menjalankan program secara langsung tanpa perlu instalasi sebelumnya! Mulai sekarang, yang Anda butuhkan hanyalah gambar.

Sekarang mari kita login ke bash shell di dalam wadah ini:

docker run -ti python-app bash
[email protected]:~/python-docker$ docker run -ti python-app bash
(python-app) [email protected]:/# 

Seperti yang Anda lihat, Anda sekarang berada di dalam lingkungan yang diaktifkan Conda yang Anda buat sebelumnya melalui Dockerfile. -ti flag digunakan untuk membuat terminal interaktif untuk Anda. Anda sekarang dapat menggunakan perintah yang Anda alias untuk menjalankan aplikasi:

(python-app) [email protected]:/# python-app
Hello World!

Konfirmasikan juga bahwa Anda memang menggunakan versi Python Miniconda dan bukan versi Python default:

(python-app) [email protected]:/# python --version
Python 3.6.12 :: Anaconda, Inc.

Seperti yang telah saya sebutkan sebelumnya, Miniconda adalah versi mini dari Anaconda.

Setelah semuanya siap, Anda dapat mendorong gambar akhir ke Docker Hub jika Anda menghosting aplikasi Python Open Source di GitHub, GitLab, Gitea, Bitbucket, atau repositori lainnya.

Keluar dari wadah dengan mengetik exit di terminal. Hentikan penampung, keluarkan penampung, dan hapus gambar Docker (jika Anda mau) untuk mengosongkan ruang disk.

Selamat! Anda baru saja belajar cara membuat image Docker Anda sendiri untuk aplikasi Python Anda.

Apakah itu membantu Anda?

Jadi Anda lihat, Miniconda tidak hanya membantu Anda membuat aplikasi Anda lebih fleksibel dan bukti masa depan di tingkat pengguna, tetapi juga membuat peran pengembang menjadi lebih mudah.

Pikirkan betapa nyamannya mengatur ini dengan PyCharm! Anda menginstal Miniconda dan Aplikasi Python Anda seperti yang Anda lakukan pada sistem host, tetapi karena Anda membangun dan menyimpannya sebagai gambar Docker, prosesnya menjadi satu kali saja!

Jika mau, Anda dapat bereksperimen dengan contoh berbeda yang ditunjukkan dalam tutorial sebelumnya alih-alih "Hello World!" contoh yang saya gunakan dalam hal ini.

Semoga ini membantu! Jika Anda memiliki pertanyaan atau saran, silakan tinggalkan komentar di bawah.


Docker
  1. Cara menginstal dan menghosting server OpenVPN dengan Docker

  2. Cara Menginstal Jenkins dengan Docker

  3. Cara Dockerize Aplikasi Python Dengan Miniconda

  1. Cara Menginstal WordPress dengan Docker, Panduan yang Mudah Diikuti

  2. Bagaimana membangun wadah Docker Ilmu Data Anaconda Python

  3. Cara Menyebarkan Layanan Mikro dengan Docker

  1. Cara Menyebarkan Aplikasi dengan Rancher

  2. Cara Menyebarkan Wadah nginx dengan Docker di Linode

  3. Cara Berbagi Gambar Docker Dengan Orang Lain