Python Project Template
Template pre Python projekt s Dev Container workflow, kde sa devcontainer image taha z registry a nebuildi sa pri kazdom otvoreni.
Co projekt obsahuje
- devcontainer konfiguraciu (
.devcontainer/devcontainer.json) - compose definiciu pre devcontainer (
.devcontainer/docker-compose.yml) - centralne nastavenie premennych (
.devcontainer/.env) - skript na build/push devcontainer image (
scripts/publish-devcontainer-image.ps1) - VS Code tasky na build/push (
.vscode/tasks.json) - hlavny
Dockerfilepre aplikacny image (Dockerfile)
Konfiguracia cez .devcontainer/.env
.devcontainer/.env je centralne miesto pre devcontainer premenne.
Pouziva ho:
.devcontainer/docker-compose.yml(image tag, user, volume cesty, container environment)scripts/publish-devcontainer-image.ps1(tagovanie a push devcontainer image)Dockerfileaplikacie (volitelne cez--build-arg)
Aktualne premenne:
PYTHON_BASE- verzia Pythonu pre devcontainer image tagDEVCONTAINER_IMAGE_REV- revizia devcontainer imageDEVCONTAINER_IMAGE_PULL_REPO- registry/repo odkial sa image taha pri otvoreni devcontaineraDEVCONTAINER_IMAGE_PUSH_REPO- registry/repo kam sa image publikujePIP_INDEX_URL- pip index URL v kontajneriPIP_ROOT_USER_ACTION- pip spravanie pri root useroviWORKSPACE_DIR- workspace cesta v kontajneriVENV_PATH- cesta k virtualnemu prostrediuREQUIREMENTS_FILE- cesta k requirements suboru prepost_create.shDEVCONTAINER_RUN_USER- Linux user, pod ktorym bezi devcontainer serviceAPP_USER_ID- UID useraappuserv hlavnomDockerfileREMOTE_HOME- home adresar pouzity pre.codexa.pypircmounty
Build a publish devcontainer image
Predpoklady:
- Docker je nainstalovany a bezi
- mas pristup do push registry (
repo.masara.eu)
Cez VS Code task
- Spusti task
devcontainer: build image. - Alebo spusti
devcontainer: build and push imagepre build + push.
Cez terminal
# iba build
powershell -ExecutionPolicy Bypass -File scripts/publish-devcontainer-image.ps1
# build + push
powershell -ExecutionPolicy Bypass -File scripts/publish-devcontainer-image.ps1 -Push
Poznamka:
- Ak
docker pushzlyha (napr. neautorizovany pristup), skript skusidocker login <registry>a push zopakuje este raz.
Pouzitie vo VS Code
- Nastav hodnoty v
.devcontainer/.env. - Ak si menil
PYTHON_BASEalebo image repo/rev, najprv publikuj novu devcontainer image. - Otvor projekt vo VS Code a pouzi
Reopen in Container.
Pri starte kontajnera:
- image sa taha z
DEVCONTAINER_IMAGE_PULL_REPO - workspace sa mountuje do
/workspace postCreateCommand(.devcontainer/post_create.sh) vytvori.venva nainstaluje zavislosti zREQUIREMENTS_FILE- Python vo VS Code pouziva
${env:VENV_PATH}/bin/python
VS Code extensions a settings
Devcontainer automaticky instaluje tieto VS Code extensions:
ms-python.pythonms-python.vscode-pylancems-python.autopep8ms-toolsai.jupyterms-python.black-formatterms-python.isortcodezombiech.gitignoredavidanson.vscode-markdownlintms-azuretools.vscode-dockerdocker.dockeropenai.chatgptcontinue.continue
Pouzite VS Code settings v devcontainery:
python.formatting.provider: blackpython.analysis.extraPaths: ["${workspaceFolder}/app"]python.analysis.typeCheckingMode: "basic"python.analysis.diagnosticMode: "workspace"editor.formatOnSave: truepython.terminal.activateEnvironment: truepython.defaultInterpreterPath: "${env:VENV_PATH}/bin/python"remote.restoreForwardedPorts: falseremote.autoForwardPortsSource: "output"debug.javascript.autoAttachFilter: "disabled"
Aplikacny Dockerfile
Hlavny Dockerfile podporuje build argumenty PYTHON_BASE, PIP_INDEX_URL a APP_USER_ID.
Priklad buildu s hodnotami z .devcontainer/.env:
set -a; source .devcontainer/.env; set +a
docker build \
--build-arg PYTHON_BASE="$PYTHON_BASE" \
--build-arg PIP_INDEX_URL="$PIP_INDEX_URL" \
--build-arg APP_USER_ID="$APP_USER_ID" \
-t myapp:local .
Description
Languages
Dockerfile
67.8%
Shell
30.8%
Python
1.4%