クラウドとコンテナの基礎
LinuxのホストでDockerを使い、ホストとは別のディストリビューションをもとにしたイメージからコンテナを起動して、その中で uname -r(カーネルのリリースを表示するコマンド)と cat /etc/os-release(ディストリビューションの情報を表示するコマンド)を実行した。結果の説明として、正しいものはどれか。
- Auname -r も /etc/os-release も、ホストのカーネルとディストリビューションの情報を表示する
- Buname -r も /etc/os-release も、イメージのもとになったディストリビューションとそのカーネルの情報を表示する
- Cuname -r はホストのカーネルを、/etc/os-release はイメージのディストリビューションを表示する
答えと解説を見る
正解:C. uname -r はホストのカーネルを、/etc/os-release はイメージのディストリビューションを表示する
コンテナはホストのカーネルを共有するので、カーネルに問い合わせる uname -r は、コンテナの中でもホストのカーネルのリリースを表示します。一方、/etc/os-release はファイルなので、コンテナから見えるファイルシステム、つまりイメージに含まれるものが読まれ、イメージのディストリビューションの名前が表示されます。イメージにはカーネルが含まれず、コマンドやライブラリなどのユーザ空間のファイルだけが入っています。そのため、ホストのカーネルがもたない機能を前提にしたプログラムは、コンテナの中でも動きません。
- A. /etc/os-release はコンテナのファイルシステムにあるファイルなので、イメージの中身が読まれます。
- B. イメージにはカーネルが含まれません。カーネルはホストのものが共有されるので、uname -r はホストのリリースを示します。
- C. 正しい。カーネルはホストと共有し、ファイルはイメージのものが見えます。