Docker
Builder's guide
- Comment fonctionne le cache
-
Multi-stage builds: l'image de compilation et
COPY --from=compilation-image
-
Dive, outil de debug
Internals
Containerd, buildkit !
https://blog.docker.com/2018/06/containerd-buildkit-and-value-of-dockerengine/
Alpine Linux
Bash n'est pas isntallé, il faut utiliser ash (almquist shell)
1 | docker run --it -rm mycontainer /bin/ash |
Utiliser apk
au lieu de apt-get
dans le Dockerfile
1 | RUN apk add python-dev |
Error: failed to allocate gateway
1 | ERROR: failed to allocate gateway (10.5.0.1): Address already in use |
réponse: docker network prune
Error: Invalid cross-device link
https://gist.github.com/Francesco149/ce376cd83d42774ed39d34816b9e21db
sur le host: echo N | sudo tee /sys/module/overlay/parameters/metacopy
PID 1
phusion/baseimage explaination
Quand on lance un container docker, la commande d'init aura le PID 1 (exemple /bin/bash
).
1 2 3 4 5 6 | $ docker run -it debian /bin/bash root@ab51ba4453b4:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 21:42 ? 00:00:00 /bin/bash root 7 1 0 21:42 ? 00:00:00 ps -ef |
En théorie, le PID 1 doit etre un process spécifique dont la responsabilité est de:
- adopter les process orphan
- kill les process zombie
- gérer les signaux SIGTERM
Il est donc dangereux de se passer de cette init système. (process zombies possibles, SIGKILL sur shutdown du container...)
Solution: my_init de phusion/baseimage ou full system init genre systemd
Kubernetes
200~https://kgrz.io/caching-parallelism-in-docker-multi-stage-builds.html