En este ejemplo prático aprenderas a crear un contenedor de Docker a partir de una aplicacion de Flask.
Requerimientos para este ejemplo
- Python3, debes tener Python 3 instalado
- Visual Studio Code (Opcional), en mi caso estaré usando VIsual Studio code en este ejemplo
- Python Extension. La extension de Python es muy util para poder leer entornos virtuales y poder tener autocompletado dentro del editor, asi como sugerencias
Creación de un Proyecto Flask
Para este ejemplo crearemos una aplicacion sencilla usando Flask que tendra por nombre docker-flask
mkdir docker-flask
cd docker-flask
Creacion de entorno Virtual
Una vez creado nuestro proyecto, vamos a crear un entorno virtual para mantener aislada esta aplicacion de otras posibles aplicaciones que crearas a futuro usando Python.
Para crear un entorno virtual hay multiples paquetes de python que puedes instalar como:
- venv
- virtualenv
- pipenv
- conda
En mi caso voy a usar virtualenv. Puedes instalarlo usando pip
pip install virtualenv
# virtualenv venv
python3 -m virtualenv venv
source ./venv/bin/activate
Instala las dependencias
una vez activado tu entorno virtual, ejecuta lo siguiente:
pip install flask
Código Fuente
en un archivo app.py, agrega el siguiente codigo:
from flask import Flask, jsonify
from users import users
app = Flask(__name__)
# Routes
@app.route("/", methods=["GET"])
def ping():
return jsonify({"response": "pong!"})
@app.route("/users")
def usershandler():
return jsonify({"users": users})
# Start the Server
if __name__ == "__main__":
app.run(host="0.0.0.0", port=3000, debug=True)
luego en un archivo users.py, agrega lo siguiente:
users = [{"name": "fazt", "password": "some password"}]
finalmente puedes ejecutarlo con:
python app.py
y visitando el http://localhost:3000
Dockerizando nuestra aplicacion
Para este ejemplo estaremos usando la imagen oficial de Python para Docker
Pero antes de colocar nuestra aplicacion en un contenedor. primero generemos un archivo que liste todos los paquetes que son necesarios para que funcione nuestra aplicación:
pip freeze > requirements.txt
Ahora si, creemos nuestro archivo Dockerfile.
FROM python:3.8.10
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD ["python", "src/app.py"]
docker build -t docker-flask .
docker run --publish 3000:3000 --name docker-flask docker-flask
docker images
modo interactivo
docker run -it docker-flask /bin/sh
para ejecutarlo en modo detach
docker run -it -p 4000:4000 --name docker-flask -d docker-flask
docker run -it -p 4000:4000 flaskapp
para ver el proceso ejecutando:
docker ps
docker logs <container_id>
para parar la ejecucion del contenedor
docker stop ID