Search
Vytvoříme jednoduchou aplikaci ve Flasku, která bude vracet renderovanou šablonu:
# main.py from flask import Flask, render_template app = Flask(__name__) @app.route('/') def home(): return render_template('home.html') if __name__ == "__main__": app.run(host='0.0.0.0', port=80, debug=True)
Šablona (v adresáři templates):
<p>Hello world!</p>
Pro přípravu Docker obrazu připravíme seznam potřebných modulů a Dockerfile, na základě se obraz vytvoří.
# requirements.txt Flask==2.0.3 pytest==7.1.3 Werkzeug==2.2.2
# Dockerfile FROM python:3.8-slim-buster ADD . /code WORKDIR /code RUN pip install -r requirements.txt EXPOSE 80 CMD ["python", "main.py"]
# docker-compose.yml version: '1' services: web: build: . volumes: - .:/code ports: - "80:80"
Pokud je připraven předpis docker-compose.yml, lze využít následující příkaz:
docker-compose up
Pokud došlo ke změně v souborech s požadavky na sestavení, je třeba spustit
docker-compose build
Pro testování využijeme modul pytest, který bude třeba nejprve nainstalovat
pip install pytest
Test postupně spouští testy v souborech, které jsou v adresáři tests. V adresáři tests vytvořte následující soubor:
# test_home_route.py from main import app def test_home_route(): """Make sure we get an expected response from home route""" response = app.test_client().get('/') assert response.status_code == 200
Test lze spustit lokálně:
python -m pytest
stages: - test - build - deploy run_tests: stage: test image: python:3.10.8-slim-buster before_script: - pip install -r requirements.txt script: - python -m pytest