golang, container, linux, namespace, cgroups
Go言語で自分独自のコンテナを作ろう
この記事はもともと reveal.js のスライドとして公開していた内容を、記事として書き起こしたものです
Create your own container with Golang。
コンテナとは
こうなっていればコンテナというような明確な定義はない気がする。
コンテナに共通したこと
コンテナについての記載の共通点👇
コンテナとは、ホスト(コンテナの作り主)から隔離されているプロセス。
隔離?
プロセスはわかるが、なにが隔離されているのか?
コンテナが隔離されているものは以下の通り。
- ホストのファイルへのアクセス
- ホストの他のプロセスへのアクセス
- ホストのリソース (CPU, RAM…)へのアクセス
どうやって実現?
Linux のカーネルが提供する機能を利用する。
- ホストのファイルへのアクセス 👉 pivot root
- ホストの他のプロセスへのアクセス 👉 namespace
- ホストのリソース (CPU, RAM…)へのアクセス 👉 cgroups
Goじゃなくても
syscall 使えばよいので、ぶっちゃけ shell でオッケーだったりする。