====== 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.