すごく前に書いてたけど書きかけのメモ.何がしたいか全く分からん.
はじめに
生態系のように進化しているdockerに関する技術は混沌を極めます.皆さんがk8sに現を抜かす間に生態系はものすごい進化をしています.
dockerの下にすぐコンテナ生えてなかった?という支離滅裂な発言が多いのでそろそろ日本語で最近のdockerが動くまでについてまとめます.
runCはlibcontainer上に構築されています.libcontainerはDockerエンジンのインストールに必要なものと同じコンテナライブラリです.Dockerエンジンは,Docker engine,containerd,containerd-shm,runCの4つのコンポーネントに分かれています.バイナリベースだとはそれぞれdocker,docker-containerd,docker-containerd-shim,docker-runと呼ばれてます.
Docker でMongoDBとNginxにてWebサービスを提供するプロセスを確認する
ps auxf
でdockerdプロセスがどのように起動している様を確認する.
/usr/bin/dockerd \_ docker-containerd --config /var/run/docker/containerd/containerd.toml | \_ docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/**************** -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc | | \_ nginx: master process nginx -g daemon off; | | \_ nginx: worker process | \_ docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/**************** -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc | | \_ mongod --smallfiles --oplogSize 128 | | \_ bash | | \_ mongo | \_ docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/**************** -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc | \_ node /build/main.js \_ /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 80 -container-ip 172.23.0.4 -container-port 80
上記のようにdockerdの下にdocker-containerdがいてdocker-containerd-shimであったり/usr/bin/docker-proxy が動作している形になります.それぞれがざっくり何をしているのか確認してください.
dockerd
docker そのもの.結局,我々がDocker だと認識しているものはこいつ
docker-containerd
Unixソケットでリッスンするデーモンも,gRPCエンドポイントを公開します.すべての低レベルコンテナ管理タスク、ストレージ、画像配信、ネットワーク接続などを処理します.
docker-containerd-shim
runCが実際にコンテナを実行した後、runCは終了します.shimはcontainerdとruncの間で良しなに取り持ってくれます.
docker-runc
実際に動作しているコンテナの軽量バイナリです。cgroup、名前空間などのLinux機能との低レベルのインタフェースを扱う
docker-containerd-ctr
containerdと直接通信するための軽量なCLIです.