web-dev-qa-db-fra.com

Je pensais avoir compris Docker jusqu'à ce que je voie l'image Docker BusyBox

Je pensais avoir compris Docker. Je l'ai compris comme un moyen de regrouper des logiciels avec beaucoup de dépendances ... pour créer fondamentalement un petit monde où tout est pris en charge pour un logiciel. Puis je suis tombé dessus sur DockerHub

https://hub.docker.com/_/busybox/

C'est une image pour BusyBox, qui est un tout petit binaire Linux destiné aux systèmes embarqués. Ensuite, le premier commentaire dit:

Busybox est génial :) De loin le conteneur par octet le plus utile sur l'ensemble du registre.

Mais je ne comprends pas du tout pourquoi cette image existe, ce qui me fait penser que je ne comprends pas vraiment pourquoi Docker existe. Quel est l'intérêt d'une image Docker BusyBox?

28
techgnosis

Une image Docker Busybox est utile si l'on construit un conteneur pour lequel busybox peut remplir sa chaîne de dépendance sans avoir besoin d'une distribution Linux complète.

Souvent, une appliance intégrée ne peut être constituée que d'une copie liée de manière statique de busybox, un script d'initialisation qui monte procfs, sysfs, etc. avec les outils fournis par busybox, puis l'application réelle appelée. Avec Docker configurant l'espace de noms du système de fichiers, même ce script d'initialisation n'est pas nécessairement nécessaire.

18
Charles Duffy

Mais je ne comprends pas du tout pourquoi cette image existe, ce qui me fait penser que je ne comprends pas vraiment pourquoi Docker existe. Quel est l'intérêt d'une image Docker BusyBox?

Je viens de commencer à utiliser BusyBox avec docker, mais jusqu'à présent, il a été pratique d'utiliser la commande - rm pour créer des données non enregistrées des instances avec des utilitaires intégrés communs comme ping, et oui, ping jusqu'à présent: /

docker container run --rm -it --network [network_name] busybox

puis tous ces utilitaires dans BusyBox sont disponibles sur ce réseau personnalisé de docker et détruits instantanément lorsque vous exit la CLI BusyBox

1
skosari

En plus d'être une base pratique à utiliser pour d'autres images de docker. Busybox fait également un initContainer très pratique pour kubernetes: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

Supposons que quelque chose se produise qui configure le système de fichiers pod avant que votre vrai conteneur ne commence à s'exécuter, puis busybox est parfait pour cela.

Comme exemple concret, l'image officielle redis n'exécute pas redis en tant que racine et ne peut donc pas accéder au système de fichiers. Si vous exécutiez redis avec une sauvegarde sur disque (en mode appendonly par exemple), vous auriez besoin d'ouvrir cette autorisation de disque pour cela.

un initContainer valide (mais probablement hacky) pour un statefulSet de redis pourrait ressembler à ceci:

      initContainers:
      - name: redis-data-permission-fix
        image: busybox
        command: ["/bin/chmod", "-R", "777", "/opt/data/redis"]
        volumeMounts:
        - name: data
          mountPath: /opt/data/redis
0