コンテナ¶
情報収集・整理¶
Linuxにおけるコンテナ技術¶
LXC: Linux Containers¶
- Linuxカーネルのコンテナ機能のためのユーザースペースのインタフェース
- 単一のLinuxマシン上で、複数のLinux OSを生成し実行するOS仮想化技術
- カーネル空間はマシン上(Host Linux OS)で共有し、ユーザー空間にコンテナを複数構築する
- LinuxカーネルのNamespaceを用いてプログラムを分離
- プロセスID、ネットワーク、マウント(ファイルシステム)、IPC、ユーザー(UID, GID)を分離
- CGroupsで、OSが管理する各種リソースをグループ化し、グループ毎に優先度やリソースを制限、グループを隔離
- ファイルシステム、プロセス、CPUリソース、メモリ、デバイス、ネットワーク
- liblxcライブラリ、API言語バインディング(Python3, lua, Go, ruby, Haskell)、コンテナ操作ツール、コンテナテンプレート
LXD¶
- システムコンテナ(LXC)と仮想マシンを便利に使う管理機能など。Canonical社主導で開発
Docker¶
- 初期はLXCを用いて実現していたが、後にlibcontainerに置換える実装となった
- 1つのコンテナは1つのプロセスを実行(原則)
- PID1がdockerコンテナで起動したプロセス(Webサーバーとか)となる。親プロセスがkillされた孫プロセスはゾンビプロセスとなり、PID1に収容されてしまう
containerd¶
コンテナに関する仕様¶
コンテナの標準化として、Open Container Initiative Runtime Specification が規定されています。