Développer en local avec Docker
Développer en local avec Docker
Dans ce guide, je vous propose d’utiliser Docker et Docker Compose pour conteneuriser un environnement de développement local.
Fichiers
Dockerfile
On va créer une image pour notre conteneur mkcert
:
FROM alpine:3.20.3 AS build
WORKDIR /mkcert
RUN apk --no-cache add curl
RUN curl -JLO "https://dl.filippo.io/mkcert/v1.4.4?for=linux/amd64" && \
chmod +x mkcert-v1.4.4-linux-amd64
FROM alpine:3.20.3
COPY --from=build /mkcert/mkcert-v1.4.4-linux-amd64 /usr/local/bin/mkcert
WORKDIR /root/.local/share/mkcert
CMD mkcert -install && for i in $(echo $DOMAIN | sed "s/,/ /g"); do mkcert $i; done && tail -f -n0 /etc/hosts
dynamic.yml
La configuration TLS pour Traefik, qui va utiliser les certificats générés par mkcert
:
tls:
certificates:
- certFile: "/etc/certs/_wildcard.localhost.pem"
keyFile: "/etc/certs/_wildcard.localhost-key.pem"
- certFile: "/etc/certs/_wildcard.app.localhost.pem"
keyFile: "/etc/certs/_wildcard.app.localhost-key.pem"
docker-compose.yml
services:
mkcert:
platform: linux/amd64
build: .
environment:
- DOMAIN=*.localhost,*.app.localhost
volumes:
- mkcert_data:/root/.local/share/mkcert
labels:
- "traefik.enable=false"
traefik:
image: traefik:latest
command:
- "--api"
- "--providers.docker"
- "--accesslog=true"
- "--accesslog.filepath=/var/log/traefik.log"
- "--pilot.dashboard=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--entrypoints.web.http.redirections.entrypoint.permanent=true"
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
- ./dynamic.yml:/etc/traefik/dynamic.yml:ro
- mkcert_data:/etc/certs:ro
- traefik_logs:/var/log
environment:
- TZ=Europe/Paris
labels:
- "traefik.http.routers.traefik.entrypoints=websecure"
- "traefik.http.routers.traefik.rule=Host(`traefik.localhost`)"
- "traefik.http.routers.traefik.service=api@internal"
- "traefik.http.routers.traefik.tls=true"
volumes:
mkcert_data:
traefik_logs:
DNS
Modifier le fichier hosts
pour autoriser la résolution des noms :
- Sous macOS et Linux,
/etc/hosts
; - Sous Windows,
C:\Windows\System32\drivers\etc\hosts
.
Ajoutez-y les lignes suivantes :
127.0.0.1 localhost
127.0.0.1 app.localhost
Certificats
Faire confiance aux certificats pour éviter les erreurs dans le navigateur :
- Sous macOS: ouvrir le fichier
.pem
avec Keychain Access et ajouter le certificat à la keychain System or Login. Marquer le certificat comme trusted. - Sous Windows: exécuter
certutil -addstore -f "ROOT" example.com+1.pem
depuis un terminal en tant qu’administrateur. - Sous Linux: la méthode varie d’une distribution à l’autre. Sous Ubuntu, copier le fichier
.pem
vers/usr/local/share/ca-certificates/
et exécutersudo update-ca-certificates
.