Kodutöö — Flask rakenduse konteineriseerimine
Eeldused: nädala 5 lab (Dockerfile, build, run, COPY).
Esitamine: GitHub Pull Request.
Ülesanne
Õpetaja antud app.py (lihtne Flask rakendus) tuleb pakkida Docker konteinerisse ja käivitada pordil 5000.
Lae app.py õpetaja lingilt/repost oma töökausta, nt w05-homework/app.py. Docker jookseb seal, kus sul on (kohalik / WSL / server) — sama koht mis labis.
Sammud
-
Loo Dockerfile samas kaustas kui
app.py. Vajad: Python baas-image (FROM python:3.12-slim), faili kopeerimist (COPY), Flaski paigaldust (RUN pip install flask), käivituskäsku (CMD).Tip
Meenuta labist:
COPYkopeerib build-kontekstist image'isse,RUNjookseb ehitamise ajal,CMDiga kord konteineri käivitudes. -
Ehita image:
-
Käivita konteiner (masina port 5000 → konteineri port 5000):
-
Kontrolli:
Warning
curl localhost:5000 ei vasta? Vaata docker logs flask-app-container. Sage põhjus: Flask kuulab vaikimisi ainult 127.0.0.1 peal konteineri sees, mis pole väljastpoolt ligipääsetav. Rakendus peab kuulama 0.0.0.0 peal (app.run(host="0.0.0.0", port=5000)), et port-mapping töötaks. Kui app.py seda ei tee, tuleb see muudatus teha.
Mõtle
Miks peab Flask kuulama 0.0.0.0, mitte 127.0.0.1, et see konteineris töötaks? Seosta vastus sellega, mida -p 5000:5000 tegelikult teeb.
Esitamine
- Uus haru
n05-lab. - Lisa harusse ainult
Dockerfile(mitteapp.py, kui õpetaja pole öelnud teisiti). - Ekraanipilt, kus on näha töötav rakendus ja
docker psväljund (konteinerUp). - Lisa screenshot reposse samas PR-is.
- Ava Pull Request
mainvastu, esita PR-i link GitHub Projectis. Kirjelda lühidalt: mis baas-image, kas pididapp.py-d muutma (ja miks).
Enesekontroll
-
docker buildläbib veata -
docker run— konteiner jääb tööle (docker psnäitabUp, mitteExited) -
curl localhost:5000tagastab rakenduse vastuse - Dockerfile + screenshot samas PR-is
- PR kirjeldus selgitab valikuid
Veaotsing
| Probleem | Lahendus |
|---|---|
Konteiner käivitub ja sureb (Exited) |
docker logs <konteiner> — tavaliselt Pythoni viga või pip install flask unustatud |
curl ei vasta, konteiner töötab |
Flask vajab 0.0.0.0 (mitte 127.0.0.1); kontrolli ka -p 5000:5000 |
port is already allocated |
Mõni teine konteiner (nt labist web1) kasutab porti. docker ps -a + koristus |