Hoppa till innehållet
AI-grafen
E· Universitetprogrammering· ca 60 min· utvecklande· verifierad 2026-09-20

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.

BegreppBetyder
Imagereceptet, byggt en gång, oföränderligt
Containeren körande instans av en image
Lagervarje instruktion i Dockerfilen blir ett cachat lager
Volymmapp 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

Alla källor och licenser