じゃあ、おうちで学べる

本能を呼び覚ますこのコードに、君は抗えるか

Docker/runc がホストから出してるプロセスがホンマに意味分からん.

すごく前に書いてたけど書きかけのメモ.何がしたいか全く分からん.

はじめに

生態系のように進化している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です.

参照

hackernoon.com