Я думал, что понял Докер, пока не увидел изображение докеры BusyBox

Я думал, что понял Докера. Я понял, что это способ упаковки программного обеспечения с множеством зависимостей... по сути, создать маленький мир, в котором абсолютно все заботится о части программного обеспечения. Тогда я наткнулся на это на DockerHub

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

Это образ для BusyBox, крошечного бинарного файла Linux, предназначенного для встраиваемых систем. Тогда верхний комментарий говорит:

Busybox - это круто :) Самый полезный контейнер на байт во всем реестре.

Но я совсем не понимаю, почему существует этот образ, что заставляет меня думать, что я на самом деле не понимаю, почему существует Docker. В чем смысл образа докера BusyBox?

Ответ 1

Изображение докеры Busybox полезно, если вы создаете контейнер, для которого busybox может выполнять свою цепочку зависимостей, не требуя полного дистрибутива Linux.

Часто встроенное устройство может состоять из ничего, кроме статически связанной копии busybox, сценария инициализации, который монтирует procfs, sysfs и c. с инструментами, предоставляемыми busybox, а затем вызывается фактическое приложение. Когда docker настраивает пространство имен файловой системы, даже этот сценарий инициализации необязательно необходим.

Ответ 2

В дополнение к тому, чтобы быть удобной базой для использования для других образов докера. Busybox также делает очень удобным initContainer для kubernetes: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

Скажем, вам нужно, чтобы что-то произошло, что настраивает файловую систему pod до того, как ваш настоящий контейнер начнет работать, тогда busybox хорош в этом..

В качестве конкретного примера официальный образ redis не запускает redis как root и поэтому не может получить доступ к файловой системе. Если вы запускаете Redis с резервным копированием диска (например, в appendonly режиме), вам необходимо открыть для этого разрешения диска.

действительный (хотя, вероятно, хакерский) initContainer для StatefulSet класса redis может выглядеть примерно так:

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

Ответ 3

Но я совсем не понимаю, почему существует этот образ, что заставляет меня думать, что я на самом деле не понимаю, почему существует Docker. В чем смысл образа докера BusyBox?

Я только начал использовать BusyBox с докером, но до сих пор было удобно использовать команду --rm для создания несохраненных экземпляров с общими встроенными утилитами, такими как ping, и да, пока просто ping:/

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

а затем все эти утилиты в BusyBox доступны в этой настраиваемой сети докера