普段は Ubuntu や Arch Linux のイメージを使っていますが、最近ドッカーコンテナ専用の CoreOS という OS があることを知りました。
私は docker を初めて使用するので、Dockerfile をビルドするのに最適な基本イメージがどれかわかりません。ばかげた質問のように思えますが、複数のコンテナーで多数のマイクロサービスを実行する場合、コンテナーはできるだけ軽くする必要があります。
普段は Ubuntu や Arch Linux のイメージを使っていますが、最近ドッカーコンテナ専用の CoreOS という OS があることを知りました。
私は docker を初めて使用するので、Dockerfile をビルドするのに最適な基本イメージがどれかわかりません。ばかげた質問のように思えますが、複数のコンテナーで多数のマイクロサービスを実行する場合、コンテナーはできるだけ軽くする必要があります。
これは実際には要件によって異なります。
FROM scratch
: アプリケーションを静的にコンパイルでき、他のバイナリ (ライブラリ、シェル、またはその他のコマンド期間) を必要としない場合は、完全に空の「スクラッチ」を使用します。これは、他の基本イメージの開始点として使用されていることがわかります。また、コンパイル済みの多くの Go コマンドにも含まれています。
Busybox: これは基本イメージではなく、便利なユーティリティ コンテナーであると考えています。非常に小さなサイズで多くの一般的なコマンドを取得できます。ただし、他のコンポーネントを簡単にインストールするための一般的なパッケージ マネージャーは利用できません。これの現在のサイズは 1M 未満です。
アルパイン: これは docker が合理化されたイメージを採用したものであり、うまく機能し、小さいだけでなく、パッケージ マネージャーも提供します。ただし、その小さいサイズにはコストがかかります。glibc などは含まれていません。公式イメージの多くは Alpine に基づいているため、コンテナー エコシステム内では、これは非常に人気のあるオプションです。パッケージの追加を開始する前の現在のサイズは約 2M です。
Debian、Ubuntu、および CentOS: これらは軽量の基本イメージではなく、それぞれ約 50M ギブまたはテイクで提供されます。しかし、サイズによって失われるものは、プルできるパッケージの大規模なコレクションと、テスト、バグ修正、アップストリームへの貢献を行っている多くの人々によって得られます。また、一部のアプリケーションがプリインストールされると予想されるライブラリのコレクションも付属しています。
最後のオプションは少し大きくなりますが、基本イメージはネットワーク経由でプッシュしてディスクに保存する必要があることに注意してください。その後、それらを変更しない限り、それらの上に構築されたイメージは、その基本イメージのレイヤーを参照するマニフェストを送信するだけでよく、Docker エンジンはそれらのレイヤーが既にダウンロードされていることを認識します。また、ユニオン fs を使用すると、100 個のコンテナーをすべてそのイメージを指すように実行しても、これらのレイヤーをコピーする必要はありません。それぞれのコンテナーは、すべてのイメージ レイヤーに対してディスク上の同じ読み取り専用レイヤーを使用し、それらの変更をコンテナーに書き込みます。特定の RW 層。
イメージをベースにしてみてくださいalpine linux
。これは非常に小さく (5M)、パッケージ リポジトリにアクセスできます。これを使用して、本番環境で JDK ベース イメージを構築していますが、これまでのところ問題なく動作しています。