Underlying technology of Docker: namespaces
created: 2021-11-26
趣味でも仕事でも、Docker を使う機会は非常に多いけれども、いくら Dockerfile をコピペ・編集してコンテナを立ち上げたところで、その裏側で何が起きているのかはよくわからない。そもそも、Docker 自体が会社名、CLI ツール、mac/win 向けアプリ、イメージレジストリなど、多くのものを指すのが、混乱する。イラストでわかりやすく解説してくれているスライドもあったが、どうもイメージが湧かず、困っていたところ、ついに素晴らしい動画を見つけた。
この動画を参考に、Docker が結局のところ何をしているかをまとめると、こういうことだろうか。
- docker CLI が発行するコマンドを dockerd(docker demon)が受け取る
- dockerd は containerd を呼び出す
- containerd は runc を呼び出す
- runc は親プロセスから子プロセスを呼び出して clone した後で、子プロセスの存在する namespace に異なるプロセス ID とユーザ ID を付与して隔離し、親プロセスにアクセスできなくする一連の systemcall を呼び出す