Tutorial Docker + Flask 2020

Este es un tutorial simple para comenzar a usar Docker + Flask. Hay muchos métodos diferentes que he encontrado por ahí, pero después de pasar por mis propios problemas, quería compartir la versión más concisa que se me ocurrió. Espero que esto ayude y, como siempre, el producto terminado / codese puede encontrar en la parte inferior de la página, sin licencia, siempre gratis (aplausos son bienvenidos) en mi página personal de Github.
Aprenderá a crear, ejecutar, construir, empujar, tirar, matar, podar y trabajar en la ventana acoplable con un frasco como api.



Pasos de configuración

Crea una carpeta para guardar el proyecto. Vamos a operar fuera de aquí en su mayor parte. Use el mkdircomando para crear una carpeta.
$ mkdir hello_docker_flask
Navegue a ese directorio con cd.
$ cd hello_docker_flask
Asegúrese de tener docker instalado, la versión no es particularmente importante ya que estos comandos básicos son casi iguales en todas las versiones.
$ docker -v 
Docker versión 17.12.0-ce, compilación c97c6d6
¿No lo tienes instalado? Aquí está el enlace al sitio oficial de Docker, sin embargo, puede utilizar el método que desee para instalarlo.
Ahora que la ventana acoplable está lista, veamos si tiene contenedores en ejecución.
$ docker ps 
ID DE CONTENEDOR MANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS
<No tengo ninguna ejecución en este momento>
Si recién está comenzando, no debería haber ninguno aquí. De cualquier manera, no estará de más tener otro funcionando al mismo tiempo.


¿Tienes algunos actualmente en ejecución y quieres kill?
$ docker kill <ID DE CONTENEDOR>
También puede verificar si tiene contenedores, incluso si no se están ejecutando.
$ docker imágenesID DE IMAGEN DE 
LA ETIQUETA DE REPOSITORIO TAMAÑO CREADO mtngt / angular_docker latest ec5a8c5f01f1 Hace 2 horas 17MB
Una vez más, esto no hará daño, pero es una buena manera de verificar lo que ya tiene (comandos como este serán útiles más adelante).
¿Quieres eliminar todas las cosas que no se ejecutan también?
$ docker system podar -a
Eso eliminará todo lo que tenga en su instancia local de docker. Así que ten cuidado.
Bien, ahora que conocemos los conceptos básicos, comencemos.


Creando los archivos

Primero necesitamos un simple archivo de matraz. Voy a hacer uno que utilice ambos flaskflask_restful.
En este punto, voy a suponer que conoce los conceptos básicos de Python y tiene Python instalado.
$ python --version 
Python 2.7.6
Cree un nuevo archivo en su hello_docker_flaskcarpeta llamado app.py con algún código básico de matraz.
app.py
# app.py: una API mínima del matraz que usa flask_restful 
desde la
importación del matraz Flask from flask_restful import Resource, Api app = Flask (__ name__) api = Api (app) class HelloWorld (Resource): def get (self): return {'hello' : 'world'} api.add_resource (HelloWorld, '/') if __name__ == '__main__': app.run (debug = True, host = '0.0.0.0')












Notarás que el archivo de Python importa algunas cosas. Aunque es posible que los tenga ahora localmente, la siguiente persona en la próxima máquina no lo hará. Por lo tanto, debemos crear un requirements.txtarchivo para importarlos cuando se ejecute nuestra ventana acoplable.
requerimientos.txt
matraz 
flask_restful
Ahora necesitamos un Dockerfileen el mismo directorio. Simplemente se llama Dockerfile, sin extensión, sin sufijo.
Dockerfile
# Dockerfile: este es un comentario. Bórrame si quieres.DESDE python: 2.7COPIAR . / appWORKDIR / appEJECUTAR pip install -r require.txtPUNTO DE ENTRADA ["python"]CMD ["app.py"]
Esto Dockerfilecopia nuestra carpeta actual ., en nuestra carpeta contenedor /appEstablece esa carpeta como el directorio de trabajo, instala todos nuestros requisitos con pip installfrom requirements.txty luego ejecuta el archivo usando python app.py.
Eso es, estos son los 3 archivos que necesita para comenzar. Mi hello_docker_flask carpeta se ve así.
hello_docker_flask 

└───requirements.txt

└───Dockerfile

└───app.py


Docker Build

Aún debe estar en su hello_docker_flaskdirectorio.
Ahora podemos construir nuestra imagen acoplable.
$ docker build -t my_docker_flask: último.
Obtendrá un montón de resultados elegantes con barras de carga, pero lo que está buscando es que termine con la siguiente confirmación.
Construido con éxito ddc23d92067eEtiquetado correctamente my_docker_flask: último
¿Qué hace esto? Estamos construyendo una imagen con la etiqueta ( --tag-tmy_docker_flask): últimas que incluye todo en el directorio actual, ..
¿Quieres saber más sobre tagsEste tipo es muy apasionado.
Ahora podemos ver lo que creamos.
$ docker images 
TAG DE
REPOSITORIO ID DE IMAGEN TAMAÑO CREADO my_docker_flask último ddc23d92067e hace 45 segundos 687MB
Pero, ¿está funcionando?
$ docker ps 
ID DE CONTENEDOR MANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS
No! Eso es el próximo paso.



Docker Run

Puede ejecutar la compilación que acaba de crear con el docker runcomando.
$ docker run -d -p 5000: 5000 my_docker_flask: último
Sin embargo, esto tiene algunas piezas que creo que son importantes. Lo primero es -dque se separa de la carrera. Esto significa que no verá ningún resultado. Puede eliminar el -dsi desea ver el proceso de ejecución.
El siguiente es el -pque especifica el puerto en el que se ejecutará. En app.pynuestro archivo que usamos app.run(debug=True, host=’0.0.0.0'), teníamos que especificar qué puerto al usar flask run, que arriba puede ver que usé 5000.
Bien, ¡ahora podemos ver que se está ejecutando!
$ docker ps 
ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO PUERTOS
9701 my_docker_flask python app.py Hace 3 minutos Arriba 4 minutos 0.0.0.0:5000
He acortado un poco esta salida porque los fragmentos de línea súper largos parecen horribles en el medio. Solicitud de funciones )


Ver su frasco Resti Api

Ahora tu api se está ejecutando.
Puede usar algunos métodos para verificarlo.
Terminal
$ open -a "Google Chrome" http://127.0.0.1:5000/
O en su navegador favorito, vaya a http://127.0.0.1:5000/
O use curl para hacer una solicitud de obtención.
$ curl http://127.0.0.1:5000/{"Hola Mundo"}
O usa Cartero. Una herramienta estupenda para trabajar con puntos finales a los que constantemente hace referencia y prueba. Puede guardar solicitudes antiguas y configurar múltiples entornos.


Empuje su imagen al Docker Hub

Ahora puede empujar su imagen a Docker Hub para que pueda bajarla más tarde y usarla, por eso Docker es increíble.
Crea una cuenta en Docker Hub.
Luego, desde la ventana de su terminal,
$ docker login -u mtngtContraseña:Inicio de sesión exitoso
Pero utilice su nombre de usuario a menos que pueda adivinar mi contraseña.
Ahora la imagen que re-etiqueta con su nombre de usuario prefijo, <username>/.
$ docker etiqueta my_docker_flask mtngt / my_docker_flask
Podríamos haberlo nombrado así desde el principio, con el <username>/prefijo. pero sentí que era más claro explicar que no es necesario hacerlo hasta ahora.
Y luego puedes llevarlo a tu centro de conexiones.
$ docker push mtngt / my_docker_flask
Esto puede demorar un minuto, pero ahora my_docker_flaskestá disponible desde su centro de acoplamiento público. Puede configurar esto privado después del hecho si lo desea.



Extraiga su imagen del Docker Hub

Ahora bajemos su imagen desde Docker Hub. Pero primero quiero demostrar que esto funciona y que no necesitamos todas las cosas que hemos tenido anteriormente.
Primero, killtodos los estibadores actuales.
$ docker psIMAGEN DE ID DE CONTENEDOR 
9701eed5868d my_docker_flask: último
Hazlo (Sheev Palpatine Voice).
$ docker kill 9701eed5868d
Solo lo hemos detenido. Eliminarlo de nuestra instancia local de docker por completo.
$ docker system podar -a$ docker imágenesID DE IMAGEN DE ETIQUETA DE REPOSITORIO TAMAÑO CREADO
Todo se fue.
Docker pull la imagen que empujaste.
$ docker pull mtngt / my_docker_flask
Esto puede llevar algo de tiempo y tener un poco de salida. Pero de nuevo, estamos buscando Status: Downloaded newer image for mtngt /my_docker_flask:latest.
Tienes tu imagen de vuelta!
$ docker imágenesIDENTIFICADOR DE IMAGEN DE 
ETIQUETA DE REPOSITORIO TAMAÑO CREADO mtngt / my_docker_flask último ddc23d92067e hace 33 minutos 687MB
Ahora corre como antes, pero recuerda, tenemos un nuevo nombre. Ahora tiene el prefijo <your_username>/.
$ docker run -d -p 5000: 5000 mtngt / my_docker_flask: último
Y es en vivo de nuevo!
$ docker psIMAGEN DE ID DE CONTENEDOR 
9e2c7644ee48 mtngt / my_docker_flask: último
Rizos para las gurls.
$ curl http://127.0.0.1:5000/{"Hola Mundo"}


Cosas finales para recordar

Ahora hemos creado, corrido, empujado y tirado con éxito con Docker.
Sin embargo, a veces quieres editar. Puede hacerlo en cualquier momento realizando cambios en los archivos y reconstruyéndolos de la misma manera docker build.
Pero recuerde, cuando ejecute sus nuevos cambios, deberá eliminar la instancia actual con docker killo especificar un nuevo puerto con docker run -p <not the same port that is already running>Esto evitará un error de que el puerto ya esté en uso.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Más info

aceptar