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

Más Recursos

https://virtualenv.pypa.io/en/latest/userguide/