GNU/Linux >> Linux Esercitazione >  >> Debian

Dockerizzazione dell'applicazione Flask utilizzando Docker su Debian 10

Docker è uno strumento open source progettato per semplificare la creazione, la distribuzione e l'esecuzione di applicazioni utilizzando i container. Un container è un pacchetto software che racchiude il codice e tutte le sue dipendenze in modo che l'applicazione venga eseguita in modo rapido e affidabile da un ambiente di elaborazione all'altro.

Flask è un popolare framework Web Python. È classificato come un microframework perché non richiede strumenti o librerie particolari. Rispetto ad altri framework è leggero e altamente strutturato.

In questo tutorial, spiegheremo come distribuire l'applicazione Flask con Docker sul server Debian 10.

Prerequisiti

  • Un server che esegue Debian 10.
  • Sul tuo server è configurata una password di root.

Per iniziare

Prima di iniziare, è una buona idea aggiornare il pacchetto del sistema all'ultima versione. Puoi aggiornare tutti i pacchetti con il seguente comando:

apt-get update -y
apt-get upgrade -y

Una volta aggiornati tutti i pacchetti, riavvia il sistema per applicare le modifiche.

Installa le dipendenze richieste

Successivamente, dovrai installare il server web Nginx e altre dipendenze nel tuo sistema. Puoi installarli tutti usando il seguente comando:

apt-get install nginx apt-transport-https ca-certificates curl gnupg2 software-properties-common curl -y

Una volta installati tutti i pacchetti, puoi procedere al passaggio successivo.

Installa Docker

Per impostazione predefinita, l'ultima versione di Docker non è disponibile nel repository Debian 10. Quindi è una buona idea installarlo dal repository ufficiale di Docker.

Innanzitutto, scarica e aggiungi la chiave GPG con il seguente comando:

wget https://download.docker.com/linux/debian/gpg apt-key add gpg

Quindi, aggiungi il repository Docker con il seguente comando:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian buster stable"

Quindi, aggiorna il repository e installa Docker con il seguente comando:

apt-get update -y
apt-get install docker-ce -y

Una volta completata l'installazione, verifica lo stato della Docker con il seguente comando:

docker di stato systemctl

Dovresti ottenere il seguente output:

? docker.service - Motore del contenitore dell'applicazione Docker Caricato:caricato (/lib/systemd/system/docker.service; abilitato; preimpostazione del fornitore:abilitato) Attivo:attivo (in esecuzione) da Sun 2020-04-19 06:26:25 UTC; 1min 8s fa Documenti:https://docs.docker.com PID principale:8883 (dockerd) Attività:10 Memoria:46,6 M CGroup:/system.slice/docker.service ??8883 /usr/bin/dockerd -H fd :// --containerd=/run/containerd/containerd.sockApr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413828757Z" level=warning msg="Il tuo kernel lo fa non supporta il limite di memoria di scambioApr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413876690Z" level=warning msg="Il tuo kernel non supporta cgroup rt period"Apr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413889604Z" level=warning msg="Il tuo kernel non supporta cgroup rt runtimeApr 19 06:26:24 debian10 dockerd[8883]:time ="2020-04-19T06:26:24.414115814Z" level=info msg="Caricamento contenitori:inizio."Apr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.788332166 Z" level=info msg="Il bridge predefinito (docker0) è assegnato con un IP aApr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.972022325Z" lev el=info msg="Caricamento contenitori:fatto."Apr 19 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.010940205Z" level=info msg="Docker daemon" commit=afacb8b7f0 graphdriver(s)=oApr 19 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.011145541Z" level=info msg="Daemon ha completato l'inizializzazione"Apr 19 06:26:25 debian10 systemd[1]:Avviato Docker Application Container Engine.Apr 19 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.074603639Z" level=info msg="API listen on / var/run/docker.sock"

A questo punto, Docker è installato e funzionante. Ora puoi procedere al passaggio successivo.

Imposta la struttura della directory di Flask

Successivamente, dovrai creare una struttura di directory per contenere la tua applicazione Flask.

Creiamo una directory chiamata flask all'interno della directory /var/www/:

mkdir -p /var/www/flask

Quindi, cambia la directory in un pallone e crea la struttura di directory per il pallone:

cd /var/www/flask
mkdir -p app/static
mkdir -p app/templates

La directory statica viene utilizzata per archiviare immagini, file CSS e JavaScript mentre la directory dei modelli viene utilizzata per archiviare i modelli HTML per il tuo progetto.

Successivamente, dovrai creare un file __init__.py all'interno della directory dell'app:

nano app/__init__.py

Aggiungi i seguenti contenuti per creare un'istanza Flask e importare la logica dal file views.py:

from flask import Flaskapp =Flask(__name__)from app import views

Salva e chiudi il file, quindi crea il file views.py nella directory dell'app.

nano app/views.py

Aggiungi le seguenti righe

from app import [email protected]('/')def home():return "hello world!"

Salva e chiudi il file, quindi crea il file uwsgi.ini con il seguente comando:

nano uwsgi.ini

Questo file conterrà le configurazioni uWSGI per la nostra applicazione come mostrato di seguito:

[uwsgi]module =maincallable =appmaster =true

Salva e chiudi il file quando hai finito. uWSGI è un'opzione di distribuzione per Nginx che è sia un protocollo che un server delle applicazioni.

Successivamente, dovrai creare il file main.py per importare l'istanza Flask denominata app dal pacchetto dell'applicazione. Puoi crearlo con il seguente comando:

nano main.py

Aggiungi la seguente riga:

dall'app di importazione dell'app

Salva e chiudi il file quando hai finito. Quindi, crea un file Requirements.txt per specificare le dipendenze che il gestore di pacchetti pip installerà nella tua distribuzione Docker:

nano requisiti.txt

Aggiungi la seguente riga che corrisponde all'ultima versione di Flask:

Boccetta==1.1.2

Salva e chiudi il file quando hai finito.

A questo punto, la tua applicazione Flask è stata configurata correttamente. Ora puoi procedere al passaggio successivo.

Configura Docker per distribuire Flask

Successivamente, dovrai creare un Dockerfile per creare e distribuire un'applicazione flask.

Innanzitutto, crea un Dockerfile con il seguente comando:

cd /var/www/flask
nano Dockerfile

Aggiungi le seguenti righe:

DA tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7RUN apk --update add bash nanoENV STATIC_URL /staticENV STATIC_PATH /var/www/app/staticCOPY ./requirements.txt /var/www/requirements. txtRUN pip install -r /var/www/requirements.txt

Salva e chiudi il file quando hai finito. Quindi, crea uno script start.sh per creare un'immagine dal Dockerfile e creare un contenitore dall'immagine Docker risultante.

nano start.sh

Aggiungi la seguente riga:

#!/bin/bashapp="docker.test"docker build -t ${app} .docker run -d -p 56733:80 \ --name=${app} \ -v $PWD:/app ${app}

Salva e chiudi il file quando hai finito.

Nota :assicurati che la porta 56733 sia libera e utilizzabile.

Infine, esegui lo script usando il seguente comando:

bash start.sh

Questo creerà l'immagine Docker e creerà un contenitore dall'immagine risultante come mostrato di seguito:

Invio del contesto di compilazione al daemon Docker 9.728kBStep 1/6:DA tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7python3.6-alpine3.7:Estrazione da tiangolo/uwsgi-nginx-flask48ecbb6b270e:Estrazione completa 692f29ee68fa:Estrai completo f75fc7ac1098:Estrai completo c30e40bb471c:Estrai completo Costruito con successo f5de17e1ce82 Taggato con successo docker.test:latest22cd2bd23c9190cf2900fa1d7c55e4765a266e68c74dc1e6858872e9e9b> 

Ora puoi elencare i contenitori in esecuzione con il seguente comando:

docker ps

Dovresti ottenere il seguente output:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES22cd2bd23c91 docker.test "/entrypoint.sh /sta..." Circa un minuto fa Su Circa un minuto 443/tcp, 0.0.0.0:56733->80/tcp docker.test

Puoi anche verificare il contenitore Docker visitando l'URL http://your-server-ip:56733. Dovresti vedere la seguente schermata:

Distribuisci file modello

Puoi anche distribuire file modello per servire contenuto statico e dinamico. Puoi creare un modello di home page per la tua applicazione con il seguente comando:

nano app/templates/home.html

Aggiungi i seguenti codici:

    Benvenuto Flask   

Home Page

Questa è la home page della nostra applicazione per flask.

Salva e chiudi il file quando hai finito. Successivamente, dovrai modificare il file views.py per servire il file appena creato:

nano app/views.py

Aggiorna il file come mostrato di seguito:

from flask import render_templatefrom app import [email protected]('/')def home():return "hello world!"@app.route('/template')def template():return render_template('home .html')

Salva e chiudi il file. Quindi, dovrai riavviare i contenitori Docker per applicare le modifiche.

Puoi riavviare il contenitore Docker denominato docker.test con il comando seguente:

docker ferma docker.test
docker avvia docker.test

Ora apri il tuo browser web e digita l'URL http://your-server-ip:56733/template. Dovresti vedere il modello appena creato nella schermata seguente:

Conclusione

Congratulazioni! hai distribuito con successo un'applicazione Flask con Docker sul server Debian 10. È ora possibile replicare l'applicazione su server diversi con una riconfigurazione minima. Sentiti libero di chiedermi se hai domande.


Debian
  1. Come installare Docker su Debian 10 Buster

  2. Come installare Docker Engine su Debian 11

  3. Debian:utilizzo di due display su Debian?

  4. Debian – Usare Live-helper offline?

  5. Installazione e utilizzo di Docker su Ubuntu e Debian

Installa Navidrome usando Docker

Installa Debian 11 Bullseye su Docker CE per testarlo

Come installare Docker su Debian 9 Stretch

Come installare Bitwarden su Debian 11

Come distribuire un'applicazione API Python Flask su Docker

Come installare Docker CE su Debian 11