Dockerの公式イメージがオペレーティングシステムを使用する理由

Dockerの公式イメージがオペレーティングシステムを使用する理由

Dockerコンテナはホストカーネルを使用するため、オペレーティングシステムとハイパーバイザーは必要ありません。それでは、すべての公式イメージ(php、nginxなど)がイメージにオペレーティングシステムを使用するのはなぜですか?

例:Debianを使用したPHP 7の公式イメージ(Docker Hub):

FROM debian:jessie

アプリケーションコンテナは仮想マシンではなく、オペレーティングシステムの分離ではなくプロセスの分離を提供します。

私の理解で重要なものを見逃していますか?

ベストアンサー1

オペレーティングシステムは単なるカーネル以上です。これはカーネルとユーザースペースのファイルの束です。したがって、/binand/etc/usr/bininなどのファイルは/lib

コンテナの実行時に通常プログラムを実行するには、サポートコード(共有ライブラリ、スクリプト)が必要です。

必ずしも必要ではありません。たとえば、プログラムの作成に使用する場合、go単一のファイル以外には何もありません。

$ cat hello.go
package main

import "fmt"

func main() {
  fmt.Println("Hello, World")
}
$ go build hello.go
$ strip hello

これで、dockerfileは次のようになります。

FROM scratch
COPY hello /
CMD ["/hello"]

マイナーなケースです。これは単なる例です。

しかし、実行しようとすると、phpすべての依存関係を知っていますか?時には、共通オペレーティングシステムの最小限のコピーを導入する方が簡単です。しかし、いくつかのセキュリティリスクがあります。

(あなたも見ることができますhttps://www.sweharris.org/post/2016-06-04-small-container/)

おすすめ記事