Docker — containrar
Kunna paketera en applikation i en container och köra den reproducerbart.
Förkunskaper
Intuition
En container paketerar applikationen tillsammans med allt den behöver — bibliotek, systempaket, Python-version — så att den kör likadant överallt. «Det funkar på min maskin» upphör att vara ett problem.
| Begrepp | Betyder |
|---|---|
| Image | receptet, byggt en gång, oföränderligt |
| Container | en körande instans av en image |
| Lager | varje instruktion i Dockerfilen blir ett cachat lager |
| Volym | mapp som delas med värden och överlever containern |
Lagercachningen styr byggtiden. Ändras en rad byggs den raden och alla efter om. Därför: kopiera requirements.txt och installera före du kopierar koden — då cachas beroendena och ombyggnaden tar sekunder i stället för minuter.
Kod
FROM python:3.12-slim
# 1. Systempaket (ändras sällan)
RUN apt-get update && apt-get install -y --no-install-recommends curl \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# 2. Beroenden FÖRE koden — detta lager cachas när bara koden ändras
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 3. Koden sist
COPY src/ ./src/
# 4. Kör inte som root
RUN useradd -r -u 10001 appuser && chown -R appuser /app
USER appuser
ENV PYTHONUNBUFFERED=1
EXPOSE 8000
HEALTHCHECK --interval=30s --timeout=3s CMD curl -fsS http://localhost:8000/healthz || exit 1
CMD ["python", "-m", "uvicorn", "src.app:app", "--host", "0.0.0.0", "--port", "8000"]
docker build -t minapp:1.0 .
docker run --rm -p 8000:8000 \
-e LLM_API_KEY="$LLM_API_KEY" \ # hemligheter via miljön, aldrig i imagen
-v "$PWD/data:/app/data:ro" \ # data som volym, inte inbakad
--memory 2g --cpus 2 \
minapp:1.0
Fyra vanliga fel: hemligheter inbakade i imagen (de ligger kvar i lagren), latest som tagg (inte reproducerbart), körning som root, och att kopiera hela katalogen först så att cachen aldrig träffar. En .dockerignore med .git, .venv och data/ sparar ofta hundratals megabyte.
Behärskning innebär
- Paketerar en applikation i en container
- Skriver en Dockerfile med lagercachning
- Kör reproducerbart med volymer och miljövariabler
Logga in för att göra övningarna och bygga upp din behärskning.
Källor
- Docker — dokumentation (Apache-2.0) — Apache-2.0
- OWASP — Docker Security Cheat Sheet — CC BY-SA 4.0