URL: https://linuxfr.org/users/dramdur/journaux/une-image-de-base-docker Title: Une image de base docker Authors: barmic Date: 2018年08月07日T16:10:01+02:00 Tags: docker, alpinelinux et grsecurity Score: 37 Si on connait tous à priori nos bonnes vielles distributions (GNU?/)Linux. Ces dernières années l'arrivée de Docker a donné lieu à l'apparition de distributions nouvelles moins connues (en tout cas pas par moi). En effet même si les distributions classiques sont tout à fait utilisables dans une image docker, le fait d'avoir une distribution pensée pour docker peut être un avantage. Par exemple réduire fortement la taille de l'image rend son utilisation bien plus agréable (plus rapide à télécharger depuis le registry, utilise moins de place disque, certaines consomment même moins de mémoire) et réduit de fait la surface d'attaque. ## Alpine C'est LA reine de docker, mais elle n'a pas été conçue pour docker. Je n'ai pas trouvé de trace avant 2010 et la sortie de la version 2.0.0. Elle est un fork de LEAF que je ne connais pas du tout. On en a déjà parlé ici, mais je ne la connaissais pas plus que ça : https://linuxfr.org/tags/alpinelinux/public En terme de choix de distribution linux arrive avec PaX et Grsecurity (_ce dont on se fout pour docker_). Elle utilise musl comme bibliothèque C, libreSSL pour TLS et OpenRC comme init (_ce dont on se fout pour docker_). Les core tools viennent de BusyBox. Elle utilise un gestionnaire de paquet `apk-tools` (ne vous méprenez pas ça n'a rien à voir avec android). On peut rechercher les paquets disponibles via leur outil en ligne : https://pkgs.alpinelinux.org. La version actuelle (sortie fin juin) est la 3.8. Les versions de la distributions sont généralement supportées 2 ans et sortent environ tous les 6 ou 7 mois (seulement pour des mises à jour de sécurité). Il y a une version _edge_ qui est en rolling release. C'est la version en développement. La distribution me semble communautaire. Site officiel : https://alpinelinux.org/ Documentation : https://wiki.alpinelinux.org ([une aide pour s'y retrouver par rapport aux autres distributions](https://wiki.alpinelinux.org/wiki/Comparison_with_other_distros)) **Note** : J'ai vu pas mal d'images utiliser edge comme base et [ce n'est évidement pas une bonne idée](https://wiki.alpinelinux.org/wiki/Edge)... ## Distroless par Google Google met énormément de billes dans docker (coucou kubernetes). J'ai découvert récemment qu'ils ont des images « distroless » (c'est forcément une distribution logicielle par définition). Leur objectif est de créer des images par langage aussi minimalistes que possibles. Ils incluent 3 bibliothèques glibc, libssl et openssl, c'est tout dans l'image de base, ensuite ça dépend des langages. Dans les langages supportés on trouve python (2.7 et 3), java, cc (je présume que c'est pour c et c++) et... surprise .Net ! Site officiel : https://github.com/GoogleContainerTools/distroless **Note** : C'est très intéressant comme approche. Pour construire vraiment des images les plus petites possibles. Il n'y a pas de shells installés, aucun runtime en plus de ce dont vous avez besoin,... Pour aller plus loin il faudrait faire certains choix pour que les fichiers soient en lecture seule par exemple, mais bon c'est déjà pas mal je trouve. ## Scratch Pourquoi s'embêter ? Quand on compile statiquement son programme (coucou go ! `^^`), il n'y a pas besoin de runtime. Docker n'est là que pour activer de manière simple le sandboxing de linux (chroot, namespace & cgroup) et les kubernetes pour déployer ça sur un parc de machines. C'est fourni directement par Docker Inc, mais ça ne devrait plus être utilisé (depuis Docker 1.5 `FROM scratch` ne télécharge plus d'images permettant de ne même plus avoir de première layer vide). ---- Personnellement je vois encore beaucoup d'ubuntu. Cela permet d'avoir un shell dans le conteneur pour des raisons de debug. On peut faire ça en utilisant une image de debug qui sera lancée dans le même sandbox que le container que l'on veut utiliser. [Un article pas mal pour ça](https://medium.com/@rothgar/how-to-debug-a-running-docker-container-from-a-separate-container-983f11740dc6). Rien de tout cela n'est vraiment neuf, je sais mais c'est une occasion pour moi de coucher cela quelque part et de partager :) Tout ce document est sous licence CC0.

AltStyle によって変換されたページ (->オリジナル) /