コンテナ共有マシンのOSシステムカーネル
https://www.docker.com/resources/what-container/
コンテナがマシンのオペレーティングシステムカーネルを共有している場合、DebianやAlpineなどのLinux用Dockerの基本イメージにカーネルが含まれていないのは本当ですか?できるrootfs ビルドこれらの基本イメージで使用されているコンテンツはDockerの外部で使用できますか?
Alpine LinuxのDockerfileは例を示しています。
FROM scratch
ADD alpine-minirootfs-3.14.6-x86_64.tar.gz /
CMD ["/bin/sh"]
これらの Linux バージョンは、Docker カーネルについて特定の事項を想定していますか?
答え1
DebianやAlpineなどのLinuxのDockerの基本イメージにカーネルが含まれていないのは本当ですか?
これは一般的に本当です。アルパインへの言及は、以下に基づいていることを示しています。ミニルートファイルシステムカーネルが含まれていません。
これらの基本イメージで使用されているrootfsビルドはDockerの外部で使用できますか?
明らかに、他のコンテナ環境で直接使用できます。ポッドキャスト。付属のファイルシステムは他の場所でも使用できます。
質問に示すように、Alpineを例にとると、Dockerイメージはファイルの内容にすぎませんalpine-minirootfs-<version>.tar.gz
。ファイルをダウンロードした場合ここから開けばすぐにできるchroot一時環境として使用するには、このディレクトリに変更してください。
wget https://dl-cdn.alpinelinux.org/alpine/v3.15/releases/x86_64/alpine-minirootfs-3.15.4-x86_64.tar.gz
mkdir foo
cd foo
tar -xf alpine-minirootfs-3.15.4-x86_64.tar.gz
chroot . /bin/sh
chroot
dockerによって実行されるネットワーク分離など、すべての分離が確立されるわけではありません。
Docker自体はコンテンツをレイヤーにパッケージ化するため、コンテナー環境の外部(dockerやpodmanなど)でdockerイメージを使用するには、レイヤーをディレクトリツリーに手動で収集する必要があります。
答え2
DebianやAlpineなどのLinuxのDockerの基本イメージにカーネルが含まれていないのは本当ですか?
はい。コンテナつまり、オペレーティングシステムのカーネルに依存してすべての操作を完了します。独自のカーネルは役に立たず、動作しません。コンテナは仮想マシンではなくカーネルネームスペースです!
これらの基本イメージで使用されているrootfsビルドはDockerの外部で使用できますか?
はい、OCIランタイムは標準化されています。通常、DockerコンテナはPodmanやKubernetesなどの大規模なオーケストレーションツール内で動作します。
これらの Linux バージョンは、Docker カーネルについて特定の事項を想定していますか?
はい、一種の完全な名前空間サポートです。幸いなことに、これはLinux 2.6から存在していたので、それほど具体的ではありません。
もちろん、コンテナ内のプログラムが使用するすべての機能はカーネルに存在する必要があります。したがって、Linux 5.10で導入されたシステムコールまたは/sys/エントリを使用するプログラムが内部にある場合、それを実行するにはLinux 5.10カーネルが必要です。ただし、これはコンテナ化の有無にかかわらず、すべてのオペレーティングシステムで実行されているすべてのプログラムに対して同じです。