Docker-Container bauen

Wir verwenden GitLab CI/CD, um unsere Python-Docker-Container zu erstellen.

  1. Zunächst definieren wir die Python-Version in unserer pyproject.toml-Datei des Projekts:

    [project]
    name = "my-app"
    requires-python = "==3.12.*"
    
  2. Anschließend extrahieren wir diese Zeichenkette in unserer .gitlab-ci.yml-Datei und übergeben sie als als Build-Argument an docker build

    build:
      stage: build
      only: [main]
      script:
        - export PY=$(sed -nE 's/^requires-python = "==(3\.[0-9]+)\.*"$/python\1/p' pyproject.toml)
        - >
          docker build
          --build-arg PY=$PY
    
  3. Schließlich können wir im im Dockerfile die extrahierte Version verwenden, um eine virtuelle Umgebung in der Build-Phase zu erstellen und die Python-Version in der application-Stage zu installieren:

    FROM your-docker/build-image as build
    
    ARG PY
    RUN --mount=type=cache,target=/root/.cache \
        set -ex \
        && virtualenv --python $PY /app
    FROM your-docker/app-imageRUN set -ex \
        && apt-get update -qy \
        && apt-get install -qy \
            -o APT::Install-Recommends=false \
            -o APT::Install-Suggests=false \COPY --from=build --chown=app /app /app