GNU/Linux >> Tutoriales Linux >  >> Debian

Aplicación Dockerizing Flask usando Docker en Debian 10

Docker es una herramienta de código abierto diseñada para facilitar la creación, implementación y ejecución de aplicaciones mediante el uso de contenedores. Un contenedor es un paquete de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable de un entorno informático a otro.

Flask es un marco web popular de Python. Se clasifica como un microframework porque no requiere herramientas o bibliotecas particulares. En comparación con otros marcos, es liviano y altamente estructurado.

En este tutorial, explicaremos cómo implementar la aplicación Flask con Docker en el servidor Debian 10.

Requisitos

  • Un servidor que ejecuta Debian 10.
  • Se ha configurado una contraseña raíz en su servidor.

Cómo empezar

Antes de comenzar, es una buena idea actualizar el paquete de su sistema a la última versión. Puede actualizar todos los paquetes con el siguiente comando:

apt-get actualización -y
apt-get actualización -y

Una vez que todos los paquetes estén actualizados, reinicie su sistema para aplicar los cambios.

Instalar dependencias requeridas

A continuación, deberá instalar el servidor web Nginx y otras dependencias en su sistema. Puede instalarlos todos usando el siguiente comando:

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

Una vez que todos los paquetes estén instalados, puede continuar con el siguiente paso.

Instalar Docker

De forma predeterminada, la última versión de Docker no está disponible en el repositorio de Debian 10. Por lo que es una buena idea instalarlo desde el repositorio oficial de Docker.

Primero, descargue y agregue la clave GPG con el siguiente comando:

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

A continuación, agregue el repositorio de Docker con el siguiente comando:

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

A continuación, actualice el repositorio e instale Docker con el siguiente comando:

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

Una vez que la instalación se haya completado con éxito, verifique el estado del Docker con el siguiente comando:

ventana acoplable de estado de systemctl

Deberías obtener el siguiente resultado:

? docker.service - Docker Application Container Engine Cargado:cargado (/lib/systemd/system/docker.service; habilitado; valor preestablecido del proveedor:habilitado) Activo:activo (en ejecución) desde el domingo 2020-04-19 06:26:25 UTC; Hace 1 min 8 s Documentos:https://docs.docker.com PID principal:8883 (dockerd) Tareas:10 Memoria:46,6 M CGroup:/system.slice/docker.service ??8883 /usr/bin/dockerd -H fd :// --containerd=/run/containerd/containerd.sock19 de abril 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413828757Z" level=warning msg="Tu núcleo no no es compatible con el límite de memoria de intercambio 19 de abril 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413876690Z" level=warning msg="Su kernel no es compatible con cgroup rt period" 19 de abril 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.413889604Z" level=warning msg="Su kernel no es compatible con cgroup rt runtimeAbr 19 06:26:24 debian10 dockerd[8883]:time ="2020-04-19T06:26:24.414115814Z" level=info msg="Cargando contenedores:inicio". 19 de abril 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.788332166 Z" level=info msg="El puente predeterminado (docker0) está asignado con una IP abr 19 06:26:24 debian10 dockerd[8883]:time="2020-04-19T06:26:24.972022325Z" lev el=info msg="Cargando contenedores:hecho." 19 de abril 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.010940205Z" level=info msg="Docker daemon" commit=afacb8b7f0 graphdriver(s)=o19 de abril 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.011145541Z" level=info msg="Daemon completó la inicialización"19 de abril 06:26:25 debian10 systemd[1]:motor de contenedor de aplicación Docker iniciado. 19 de abril 06:26:25 debian10 dockerd[8883]:time="2020-04-19T06:26:25.074603639Z" level=info msg="API escucha en / var/run/docker.sock"

En este punto, Docker está instalado y ejecutándose. Ahora puede continuar con el siguiente paso.

Configurar estructura de directorios de matraz

A continuación, deberá crear una estructura de directorios para albergar su aplicación Flask.

Vamos a crear un directorio llamado matraz dentro del directorio /var/www/:

mkdir -p /var/www/frasco

A continuación, cambie el directorio a un matraz y cree la estructura de directorios para el matraz:

cd /var/www/flask
mkdir -p aplicación/estática
mkdir -p aplicación/plantillas

El directorio estático se usa para almacenar imágenes, CSS y archivos JavaScript, mientras que el directorio de plantillas se usa para almacenar las plantillas HTML para su proyecto.

A continuación, deberá crear un archivo __init__.py dentro del directorio de la aplicación:

aplicación nano/__init__.py

Agregue los siguientes contenidos para crear una instancia de Flask e importe la lógica del archivo views.py:

desde la importación de matraces Flaskapp =Flask(__name__)desde las vistas de importación de la aplicación

Guarde y cierre el archivo, luego cree el archivo views.py en el directorio de su aplicación.

aplicación nano/views.py

Agregue las siguientes líneas

from app import [email protected]('/')def home():regresa "¡Hola mundo!"

Guarde y cierre el archivo, luego cree el archivo uwsgi.ini con el siguiente comando:

nano uwsgi.ini

Este archivo contendrá las configuraciones de uWSGI para nuestra aplicación como se muestra a continuación:

[uwsgi]módulo =maincallable =appmaster =verdadero

Guarde y cierre el archivo cuando haya terminado. uWSGI es una opción de implementación para Nginx que es tanto un protocolo como un servidor de aplicaciones.

A continuación, deberá crear el archivo main.py para importar la instancia de Flask llamada app desde el paquete de la aplicación. Puedes crearlo con el siguiente comando:

nano principal.py

Agregue la siguiente línea:

desde aplicación importar aplicación

Guarde y cierre el archivo cuando haya terminado. A continuación, cree un archivo requirements.txt para especificar las dependencias que el administrador de paquetes pip instalará en su implementación de Docker:

requisitos nano.txt

Agregue la siguiente línea que coincida con la última versión de Flask:

Frasco==1.1.2

Guarde y cierre el archivo cuando haya terminado.

En este punto, su aplicación Flask se ha configurado correctamente. Ahora puede continuar con el siguiente paso.

Configurar Docker para implementar Flask

A continuación, deberá crear un Dockerfile para compilar e implementar una aplicación de matraz.

Primero, cree un Dockerfile con el siguiente comando:

cd /var/www/flask
archivo Docker nano

Agregue las siguientes líneas:

DESDE 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

Guarde y cierre el archivo cuando haya terminado. A continuación, cree una secuencia de comandos start.sh para crear una imagen a partir de Dockerfile y cree un contenedor a partir de la imagen de Docker resultante.

nano start.sh

Agregue la siguiente línea:

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

Guarde y cierre el archivo cuando haya terminado.

Nota :Asegúrese de que el puerto 56733 esté libre y utilizable.

Finalmente, ejecute el script usando el siguiente comando:

bash inicio.sh

Esto creará la imagen de Docker y creará un contenedor a partir de la imagen resultante como se muestra a continuación:

Enviar contexto de compilación al daemon Docker 9.728kBStep 1/6 :DESDE tiangolo/uwsgi-nginx-flask:python3.6-alpine3.7python3.6-alpine3.7:extracción de tiangolo/uwsgi-nginx-flask48ecbb6b270e:extracción completa 692f29ee68fa:Extraer completo f75fc7ac1098:Extraer completo c30e40bb471c:Extraer completo Construido con éxito f5de17e1ce82 Etiquetado con éxito docker.test:latest22cd2bd23c9190cf2900fa1d7c55e4765a266e68c74dc1e6858872e9bdcd7 

Ahora puede enumerar los contenedores en ejecución con el siguiente comando:

docker ps

Deberías obtener el siguiente resultado:

ID DEL CONTENEDOR IMAGEN COMANDO CREADO ESTADO PUERTOS NOMBRES22cd2bd23c91 docker.test "/entrypoint.sh /sta…" Hace aproximadamente un minuto Arriba Aproximadamente un minuto 443/tcp, 0.0.0.0:56733->80/tcp docker.test

También puede verificar el contenedor Docker visitando la URL http://your-server-ip:56733. Debería ver la siguiente pantalla:

Implementar archivos de plantilla

También puede implementar archivos de plantilla para servir contenido estático y dinámico. Puede crear una plantilla de página de inicio para su aplicación con el siguiente comando:

aplicación nano/templates/home.html

Agrega los siguientes códigos:

    Bienvenida Flask   

Página de inicio

Esta es la página de inicio de nuestra aplicación Flask.

Guarde y cierre el archivo cuando haya terminado. A continuación, deberá modificar el archivo views.py para servir el archivo recién creado:

aplicación nano/views.py

Actualice el archivo como se muestra a continuación:

desde matraz import render_templatefrom app import [email protected]('/')def home():return "¡hola mundo!"@app.route('/template')def template():return render_template('home .html')

Guarde y cierre el archivo. Luego, deberá reiniciar los contenedores de Docker para aplicar los cambios.

Puede reiniciar el contenedor Docker llamado docker.test con el siguiente comando:

docker stop docker.test
docker start docker.test

Ahora, abra su navegador web y escriba la URL http://your-server-ip:56733/template. Debería ver su plantilla recién creada en la siguiente pantalla:

Conclusión

¡Felicidades! Ha implementado con éxito una aplicación Flask con Docker en el servidor Debian 10. Ahora puede replicar la aplicación en diferentes servidores con una reconfiguración mínima. Siéntase libre de preguntarme si tiene alguna pregunta.


Debian
  1. Cómo instalar Docker en Debian 10 Buster

  2. Cómo instalar Docker Engine en Debian 11

  3. Debian – ¿Usar dos pantallas en Debian?

  4. Debian:¿usando Live-helper sin conexión?

  5. Instalación y uso de Docker en Ubuntu y Debian

Instalar Navidrome usando Docker

Instale Debian 11 Bullseye en Docker CE para probarlo

Cómo instalar Docker en Debian 9 Stretch

Cómo instalar Bitwarden en Debian 11

Cómo implementar una aplicación API de Python Flask en Docker

Cómo instalar Docker CE en Debian 11