Python è un popolare linguaggio di programmazione generico utilizzato per un'ampia varietà di applicazioni. Viene utilizzato dagli sviluppatori di software come linguaggio di supporto per il controllo e la gestione della build, il test e altri scopi.
Docker è una piattaforma containerizzata open source che consente di eseguire l'applicazione in un container leggero. In questo modo l'applicazione viene eseguita esattamente come in produzione utilizzando lo stesso sistema operativo.
In questo post, ti mostreremo come dockerizzare le applicazioni Python con Miniconda su CentOS 8.
Prerequisiti
- Un nuovo server CentOS 8 sulla piattaforma Atlantic.Net Cloud
- Una password di root configurata sul tuo server
Fase 1:crea un server cloud Atlantic.Net
Per prima cosa, accedi al tuo server Atlantic.Net Cloud. Crea un nuovo server, scegliendo CentOS 8 come sistema operativo con almeno 2 GB di RAM. Collegati al tuo Cloud Server tramite SSH e accedi utilizzando le credenziali evidenziate in alto nella pagina.
Dopo aver effettuato l'accesso al server CentOS 8, esegui il comando seguente per aggiornare il sistema di base con gli ultimi pacchetti disponibili.
dnf update -y
Passaggio 2:installazione di Docker CE
Puoi aggiungerlo con il seguente comando:
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Una volta creato il repository, esegui il comando seguente per installare Docker CE sul tuo sistema.
dnf install docker-ce --nobest
Al termine dell'installazione, avvia il servizio Docker e abilitalo all'avvio al riavvio del sistema con il seguente comando:
systemctl start docker systemctl enable docker
Quindi, verifica la versione installata di Docker con il seguente comando:
docker --version
Dovresti ottenere il seguente output:
Docker version 20.10.5, build 55c4c88
Passaggio 3:crea un file Docker per distribuire l'app Python
In questa sezione creeremo una directory per il progetto Python e creeremo un Dockerfile con tutte le informazioni necessarie per distribuire l'app Python.
Innanzitutto, crea una directory con il seguente comando:
mkdir project
Quindi, cambia la directory in project e crea un Dockerfile con il seguente comando:
cd project nano Dockerfile
Aggiungi le seguenti righe:
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"]
Salva e chiudi il file quando hai finito.
Il file sopra scaricherà l'immagine minima di Python, installerà Miniconda, creerà un ambiente Python e creerà una semplice applicazione Hello World.
Fase 4:crea l'immagine dell'applicazione Python
Ora dovrai creare l'immagine usando il Dockerfile che abbiamo creato nel passaggio precedente.
Innanzitutto, cambia la directory in project con il seguente comando:
cd project
Quindi, compila l'applicazione Python eseguendo il comando seguente:
docker build -t python-app .
Dovresti ottenere il seguente output:
Downloading and Extracting Packages setuptools-52.0.0 | 724 KB | ########## | 100% certifi-2020.12.5 | 140 KB | ########## | 100% python-3.6.13 | 29.7 MB | ########## | 100% pip-21.0.1 | 1.8 MB | ########## | 100% Preparing transaction: ...working... done Verifying transaction: ...working... done Executing transaction: ...working... done Removing intermediate container 10f97804ad82 ---> 3662950574f9 Step 6/8 : RUN echo 'conda activate python-app \nalias python-app="python python-app.py"' >> /root/.bashrc ---> Running in faab9e188650 Removing intermediate container faab9e188650 ---> 8ee98d205c5c Step 7/8 : ENTRYPOINT [ "/bin/bash", "-l", "-c" ] ---> Running in 3e74eb8fd8b7 Removing intermediate container 3e74eb8fd8b7 ---> 6c6d83dfd01f Step 8/8 : CMD ["python python-app.py"] ---> Running in 4d8c066aeefc Removing intermediate container 4d8c066aeefc ---> 78e4f8e7e05e Successfully built 78e4f8e7e05e Successfully tagged python-app:latest
Ora puoi controllare le immagini scaricate con il seguente comando:
docker images
Dovresti vedere tutte le immagini nel seguente output:
REPOSITORY TAG IMAGE ID CREATED SIZE python-app latest 78e4f8e7e05e 24 seconds ago 907MB python slim ce689abb4f0d 10 days ago 118MB
Fase 5:avvia il container
A questo punto, l'immagine dell'applicazione Python è pronta. Ora puoi avviare il contenitore dall'immagine dell'app python con il seguente comando:
docker run python-app
Dovresti vedere l'output della tua applicazione Python nel seguente output:
Hello World!
Puoi anche connetterti al contenitore dell'applicazione Python ed eseguire l'applicazione.
Per farlo, esegui nuovamente il contenitore con il seguente comando:
docker run -it python-app /bin/bash
Sarai connesso al contenitore dell'app python come mostrato di seguito:
(python-app) [email protected]:/#
Ora esegui la tua applicazione Python Hello World usando il seguente comando:
(python-app) [email protected]:/# python-app
Dovresti ottenere il seguente output:
Hello World!
Puoi anche verificare la tua versione di Python usando il seguente comando:
(python-app) [email protected]:/# python --version
Uscita:
Python 3.6.13 :: Anaconda, Inc.
Ora puoi uscire dal container con il seguente comando:
(python-app) [email protected]:/# exit
Conclusione
Nella guida sopra, hai imparato come dockerizzare un'applicazione Python con Miniconda su CentOS 8. Ora puoi distribuire la tua applicazione Python in un ambiente leggero e containerizzato sul tuo account di hosting VPS da Atlantic.Net.