BusyBox Docker 公匏むメヌゞの䜿甚方法

投皿日 Jul 14, 2022

むメヌゞのサむズは、アプリケヌションの速床ずサむズに倧きな圱響を䞎える可胜性がありたす。 むメヌゞをスリムにするず、ビルド時間が短瞮されるだけでなく、アプリケヌションのフットプリントの最適化にも圹立ちたす。 しかし、コンパクトでLinuxフレンドリヌなアプリケヌションをうたくデプロむするには、それらをクロスプラットフォヌムナニットにパッケヌゞ化するこずを意味したす。 そこで圹立぀のが、コンテナず BusyBox Dockerオフィシャルむメヌゞ です。

Docker公匏むメヌゞBusyBox

BusyBox コンテナヌ むメヌゞは非垞に軜量です。 ほずんどのタグは 900KB 未満 (アヌキテクチャによっお異なりたす) であるため、開発者がそのスリムさに惹かれる Alpine むメヌゞよりもさらに小さくなりたす。 

BusyBoxのコンパクトなサむズは、最初のアップロヌドずダりンロヌドの時間を倧幅に短瞮するこずで、より迅速な共有を可胜にしたす。 この小さな基本むメヌゞは、アプリケヌションの攻撃察象領域を枛らすこずもできたす。

このガむドでは、BusyBox の抂芁、その䜿甚方法、ベスト プラクティスの共有、コンテナヌ むメヌゞの䜿甚方法を玹介したす。

BusyBoxずは䜕ですか?

人々はしばしばこのオヌプン゜ヌスプロゞェクトを「組み蟌みLinuxのスむスアヌミヌナむフ」ず呌んでいたす。 BusyBoxは、耇数の䞀般的なUNIXナヌティリティ(たたはアプレット)を1぀の実行可胜なバむナリにパッケヌゞ化したす。 これにより、独自のLinuxディストリビュヌションを䜜成できたす。 たた、Docker むメヌゞを䜿甚するず、さたざたな環境で BusyBox を䜿甚できたす。 

小型ながらも匷力なこの 1 ぀の実行可胜ファむルには、UNIX の䞻芁なコマンドの玄 400 ぀が含たれおいたす。 たた 、倚くのGNUナヌティリティ (䟋: shellutils ず fileutils) を、完党なディストリビュヌションで同等のものに眮き換えおください。 完党な機胜が欠けおいるものもありたすが、それらの䞻な機胜はそのたたであり、開発者に劥協を匷いるこずはありたせん。

どのバヌゞョンのBusyBoxを䜿甚すればよいですか?

BusyBox は、䞀般的なシェル コマンドの䜿甚゚クスペリ゚ンスを再珟するのに圹立ちたす。 䞀郚のLinuxディストリビュヌションはGNUの coreutils パッケヌゞを䜿甚しおこれらのコマンドを出荷したすが、他のディストリビュヌションは代わりにBusyBoxを遞択したした。 これは最も完党な環境ではありたせんが、䜿いやすく軜量な環境を必芁ずする開発者に最適です。

この゜フトりェアスむヌトには、さたざたなビルド枈みバむナリバヌゞョンがあり、Docker Hubで 30 を超えるむメヌゞタグをサポヌトしおいたす。 それぞれに、CPU ず䟝存関係ごずに独自の Linux バむナリ バリアントが含たれおおり、むメヌゞのサむズず機胜が異なりたす。

たた、各むメヌゞタグは、さたざたな libc バリ゚ヌションに察しお構築されおいたす。 各むメヌゞず musl、uClibc、dietlibc、glibc ずの関係がビルドにどのような圱響を䞎えるかを理解するには、この 比范衚をご芧ください。 これは、特定のナヌスケヌスに適した画像を遞択するのに圹立ちたす。

そうは蚀っおも、BusyBoxは䜕に最適ですか? さっそく芋おいきたしょう。

BusyBoxのナヌスケヌス

Linuxの開発者のナヌスケヌスはかなり異なりたすが、ここで取り䞊げるいく぀かの興味深い䟋がありたす。

1. 組み蟌みシステム甚のディストリビュヌションを構築

組み蟌みシステムは、利甚可胜なリ゜ヌスが限られおいるこずで知られおおり、必芁な機胜のみを含む埮小サむズのディストリビュヌションが必芁です。 食り気や䜙分な䟝存関係の䜙地はほずんどありたせん。 そのため、組み蟌みLinuxのバヌゞョンは合理化され、目的に合わせお構築されるのが最善です。 これはBusyBoxが優れおいるずころです。

BusyBoxはかなりモゞュヌル化されおいたす。 ビルドに適した画像を遞択できたす。 ただし、コンパむル䞭にコマンドや機胜を遞択するこずもできたす。

必芁のないものを(ある皋床)たずめる必芁はありたせん。 通垞、Linuxカヌネル䞊で実行したす。 ただし、実装をコンテナ化するず、このカヌネルをコンテナ自䜓に含める必芁がなくなりたす。 BusyBoxは、組み蟌みシステムのカヌネルを掻甚し、スペヌスを節玄したす。

特定の画像内の各アプレットの動䜜によっお、特定の埋め蟌み環境内でどのように機胜するかが決たりたす。 BusyBoxを䜿甚するず、構成ファむル、ディレクトリ、およびむンフラストラクチャを倉曎しお、遞択した組み蟌みシステムに最適にするこずができたす。

2. Kubernetes Initコンテナの掻甚

BusyBox Docker公匏むメヌゞは、Kubernetes initContainer 機胜でもうたく機胜したす。 これらの 特殊な コンテナ(この䟋では)は、Pod内のアプリケヌションコンテナの前に実行されたす。

init コンテナヌには、アプリケヌション むメヌゞの倖郚にあるスクリプトやその他のナヌティリティを含めるこずができたす。 これらの「通垞の」コンテナの初期化は、これらのコンポヌネントを最初にスピンアップするk8sに䟝存する堎合がありたす。 ただし、タスクが終了するたで、垞に同期的に実行されたす。

たた、これらのコンテナヌは、厳密に構成されたリ゜ヌス制限に準拠し、ボリュヌムをサポヌトし、セキュリティ蚭定を尊重したす。 

しかし、あなたは䜕のために䜿う initContainer こずができたすか? k8sのドキュメントによるず、次のこずができたす。

  • ポッドがスピンアップしたずきに サヌビスが 䜜成されるのを埅ちたす
  • APIからリモヌトサヌバヌにPodを登録する
  • 割り圓おられた期間埅っおから、アプリ コンテナヌを最終的に開始したす
  • Git リポゞトリをボリュヌムに耇補する
  • 倀入力から構成ファむルを自動的に生成する

Kubernetesは、その構成ファむルを䜿甚しお、これらのプロセスがどのように発生するかを、シェルコマンドずずもに指定したす。 このファむルでは、遞択したタグを䜿甚しお、BusyBox Dockerむメヌゞを指定できたす。 Kubernetes はむメヌゞをプルし、䞀意の ID を割り圓おながら、そこからコンテナヌを䜜成しお起動したす。

BusyBox ず Docker で init コンテナヌを䜿甚するず、重芁なワヌクフロヌを開始する前にアプリ コンテナヌを準備できたす。

3. HTTP Web サヌバヌの実行

BusyBoxコンテナむメヌゞが基本的なLinux環境の䜜成に圹立぀ず述べたこずを芚えおいたすか? その環境を䜿甚しお、コンパむルされたLinuxアプリケヌションを実行し、カスタム実行可胜ファむルを䜜成できたす。 次に、これらの実行可胜ファむルは Web アプリをサポヌトできたす。

たずえば、開発者のSoham Kamaniは、この方法を䜿甚しお、 Goサヌバヌを利甚したWebアプリをサポヌトしおいたす。 Sohamは、次の方法でこれを達成したした。

  1. Docker CLI を䜿甚しお䞀般的なコマンドを実行するための BusyBox コンテナヌの䜜成。
  2. カスタムGolang "hello world"プログラムを䜜成し、それをサポヌトするコンパニオン Dockerfile を䜜成した埌にカスタム実行可胜ファむルを実行したす。
  3. BusyBox をベヌスずしお䜿甚しお Docker むメヌゞをビルドしお実行したす。
  4. server.go ファむルの䜜成、コンパむル、および Docker コンポヌネントを䜿甚した Web サヌバヌずしおの実行。

BusyBoxを䜿甚するず、このワヌクフロヌに取り組み、スリムで最終的な画像を䜜成できたす。 これにより、アプリケヌションを効果的に実行、繁栄、拡匵、およびデプロむできる環境が䜜成されたす。 芖芚的なむンタヌフェむスを奜む堎合は、 Docker Desktop を䜿甚しおむメヌゞずコンテナヌを簡単に管理するこずもできたす。

チュヌトリアル党䜓を読み、GitHub でサンプル コヌドを衚瀺できたす。Goベヌスのサヌバヌ展開をもっず怜蚎したいですか? Caddy 2の画像ガむドをご芧ください。

これは、BusyBoxのナヌスケヌスをすべお網矅したリストではありたせん。 しかし、これらの䟋は、単玔なLinuxベヌスのむメヌゞでも、いかに創造的になるこずができるかを瀺しおいたす。

BusyBox むメヌゞの䜿甚を開始する

その機胜を調べたので、BusyBoxをむンストヌルしおDockerで䜿甚を開始する方法を孊びたしょう。

ステップ 1: Docker むメヌゞを実行する

たず、次のコマンドを䜿甚しおBusyBoxをシェルずしお実行したす。

$ docker run -it --rm busybox

これにより、BusyBoxシステム sh内でコマンドを実行できるようになりたす。 このフラグは -it 䞡方 -i を結合し -t 、開いたたた STDIN にしお疑䌌 tty を割り圓おたす。 これにより -tty 、コンテナ内に仮想タヌミナルセッションを䜜成するようにDockerに指瀺されたす。 --rmフラグを䜿甚するず、コンテナを敎理し、終了時にファむルシステムを削陀するようにDockerに指瀺したす。

ステップ 2: Dockerfile を䜜成する

次に、静的にコンパむルされたバむナリの を䜜成したす Dockerfile 。 基本的な BusyBox Dockerfile は次のようになりたす。

FROM busybox
COPY ./my-static-binary /my-static-binary
CMD ["/my-static-binary"]

泚: このコンパむルは、Docker コンテナヌなどの別の堎所で完了する必芁がありたす。 Alpine を䜿甚できたすが、拡匵機胜が必芁ない堎合は、代わりに BusyBox を䜿甚できたす。

Step 3: バリ゚ヌションを遞択

最埌に、垞にニヌズに最も適したバリアントを遞択しおください。 次のいずれかを䜿甚できたす。

  1. busybox:uclibc (英語)
  2. busybox:glibc (日本語)
  3. busybox:musl (英語)

オプション 1 ず 3 は静的にコンパむルされたすが、 glibc Debian に由来したす。

Docker ず BusyBox は同等のシンプルさ

BusyBoxは、単玔なLinuxを愛する開発者にずっお䞍可欠なツヌルです。 これにより、簡玠化された(しかし適応可胜な)Linux環境内で、匷力でカスタマむズされたLinux実行可胜ファむルを䜜成できたす。 ナヌスケヌスは倚様であり、BusyBox画像は肥倧化の軜枛に圹立ちたす。

DockerずBusyBoxはどちらも、Kubernetesなどの䞀般的な関連テクノロゞヌを含めながら、うたく連携したす。 画像のサむズが小さいにもかかわらず、垞に進化しおいる倚くの゚キサむティングな開発の可胜性を解き攟ちたす。 Docker Hub にアクセスしお詳现を確認し、最初の BusyBox むメヌゞをすばやく取埗しおください。

関連蚘事