Taula de continguts

Dockeritzant una aplicació Flask

Cal conèixer:

, , , , , , , , , , , , ,


Mini projecte Flask dockeritzat

Segons la pàgina getting started de Docker-compose disposem d'un exemple amb el framework web Flask:

docker-compose.yml
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
app.py
import time
 
import redis
from flask import Flask
 
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
 
def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)
 
@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)
requirements.txt
flask
redis

I podríem posar en marxa el nou projecte amb:

$ docker-compose up -d --build

I veure la web amb el browser a:

http://<la_ip_de_la_maquina_docker>:5000

Per saber més pots llegir:


Exercici Dockerfile

Si poses en marxa l'exemple veuràs que al parar el projecte i tornar-lo a aixecar el comptador de visites es reseteja.

Modifica el docker-compose.yml per tal que persistim la carpeta adequada del container Redis per fer que el comptador no es reseteji.