Enlace Patrocinado
Enlace Patrocinado
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 /
code
se 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
mkdir
comando 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
flask
y flask_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_flask
carpeta 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.txt
archivo para importarlos cuando se ejecute nuestra ventana acoplable.requerimientos.txt
matraz
flask_restful
Ahora necesitamos un
Dockerfile
en 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
Dockerfile
copia nuestra carpeta actual .
, en nuestra carpeta contenedor /app
. Establece esa carpeta como el directorio de trabajo, instala todos nuestros requisitos con pip install
from requirements.txt
y 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_flask
directorio.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
, -t
my_docker_flask): últimas que incluye todo en el directorio actual, .
.¿Quieres saber más sobre
tags
? Este 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 run
comando.$ docker run -d -p 5000: 5000 my_docker_flask: último
Sin embargo, esto tiene algunas piezas que creo que son importantes. Lo primero es
-d
que se separa de la carrera. Esto significa que no verá ningún resultado. Puede eliminar el -d
si desea ver el proceso de ejecución.El siguiente es el
-p
que especifica el puerto en el que se ejecutará. En app.py
nuestro 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_flask
está 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,
kill
todos 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 kill
o 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.