Aller au contenu

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)

docker run --it -rm mycontainer /bin/ash

Utiliser apk au lieu de apt-get dans le Dockerfile

RUN apk add python-dev

Cadvisor error: "mountpoint for cpu not found"

Bug: Cadvisor ne retrouve pas les bons cgroup quand on est en mode unified cgroup (cgroup version 2, voir docker info).

Il faut etre en v1 et arch est par défaut en v2

Sur arch:

  • Changing cgroup version
  • GRUB_CMDLINE_LINUX=systemd.unified_cgroup_hierarchy=0
  • sudo grub-mkconfig -o /boot/grub/grub.cfg
  • redémarrer le system (juste restart daemon docker ne suffit pas)

Error: failed to allocate gateway

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).

$ 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