Create your own container with Golang

コンテナとは


こうなっていればコンテナというような明確な定義はない気がする

コンテナに共通したこと


コンテナについての記載の共通点👇

コンテナとは、ホスト(コンテナの作り主)から隔離されているプロセス

隔離?


プロセスはわかるが、なにが隔離されているのか?

コンテナが隔離されているもの


  • ホストのファイルへのアクセス
  • ホストの他のプロセスへのアクセス
  • ホストのリソース (CPU, RAM...)へのアクセス

どうやって実現?


Linux のカーネルが提供する機能を利用する。

  • ホストのファイルへのアクセス 👉 pivot root
  • ホストの他のプロセスへのアクセス 👉 namespace
  • ホストのリソース (CPU, RAM...)へのアクセス 👉 cgroups

実際にやってみた

DEMO

Goじゃなくても


syscall 使えばよいので、ぶっちゃけ shell でオッケーだったりする