Skip to content

Docker

Builder's guide

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

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