Я думал, что понял Докер, пока не увидел изображение докеры 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 доступны в этой настраиваемой сети докера