====== Dockeritzant una aplicació Flask ====== Cal conèixer: * [[Python Web]] * [[https://redis.io/docs/getting-started/|Redis - getting started]] * [[Docker]] * [[Docker-compose]] * [[Dockerfile]] {{tag> #FpInfor #Ceti #Ciber #CetiMp03 #CiberMp03 #Daw #DawMp07 #DawMp08 docker containers DevOps python web flask}} \\ ===== Mini projecte Flask dockeritzat ===== Segons la [[https://docs.docker.com/compose/gettingstarted/|pàgina getting started de Docker-compose]] disposem d'un exemple amb el //framework// web [[Flask]]: version: "3" services: web: build: . ports: - "5000:5000" redis: image: "redis:alpine" # 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"] 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) 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://:5000 Per saber més pots llegir: * Projectes de [[Python Web]]. * Entorns d'execució [[Python venv]]. * [[https://redis.io/docs/getting-started/|Redis getting started]] \\ ===== 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.