Docker Build¶
Objectif: produire une image Docker Arclith déterministe, minimale et réutilisable pour tous les transports du service.
Prérequis¶
- Docker Desktop ou un moteur Docker compatible BuildKit.
- Python 3.13 et
uvcôté poste. - Un projet Arclith avec
pyproject.toml,uv.lock,main.py,config/etsrc/.
Pour créer un projet de test:
| Bash | |
|---|---|
Générer Le Runtime Docker¶
Les projets créés par arclith-cli init incluent déjà:
Pour ajouter ou régénérer ces fichiers dans un projet existant:
| Bash | |
|---|---|
Le Dockerfile généré suit ce contrat:
- build multi-stage à partir de
python:3.13-slim-bookworm; - installation des dépendances par
uv sync --frozen; - copie de
.venvdepuis le stage builder; - exécution non-root en
1001:1001; - exclusion de
.env,secrets.yaml, clés privées, tests, docs et caches via.dockerignore; HEALTHCHECKsur/healthdu serveur de probes.
Préparer La Configuration Conteneur¶
Dans un conteneur, un service publié doit écouter sur 0.0.0.0. 127.0.0.1 signifie "loopback
du conteneur" et n'est pas accessible via docker run -p.
Créer ou vérifier les fichiers suivants avant le build:
| Bash | |
|---|---|
Le reload FastAPI doit rester désactivé dans une image runtime. Le rechargement automatique est un outil de développement local, pas un comportement de conteneur.
Verrouiller Et Construire¶
Pour préparer une publication registry, utiliser un tag explicite:
| Bash | |
|---|---|
Le résultat attendu doit montrer un utilisateur non-root, par exemple 1001:1001.
Inspection Locale¶
Vérifier que l'image ne contient pas les fichiers à risque:
| Bash | |
|---|---|
Inspecter les ports exposés:
Publication¶
Publier seulement après validation locale:
| Bash | |
|---|---|
En production, préférer ensuite le digest:
| Bash | |
|---|---|
Checklist SOTA¶
uv.lockcommité et synchronisé avecpyproject.toml.- Aucune clé, aucun token et aucun fichier
.envdans le contexte final. - Image lancée en non-root.
- Ports conteneur alignés avec
config/adapters/inbound/*.yaml. - Tag immutable ou digest pour les déploiements.
- Build reproductible en CI avec les mêmes commandes que localement.
- Couches ordonnées pour préserver le cache: dépendances avant code applicatif, contexte réduit par
.dockerignore.
Page suivante: lancer l'API localement.