ちょっと前のこの記事を思い出して、そういえばちょっとリンクだけでもメモっとこうと。
Docker
なんか意外と細かく決まってるなーという印象。Dockerのイメージは、
の束で成り立っていて、↓こういう構造らしい。
. ├── 5785b62b697b99a5af6cd5d0aabc804d5748abbb6d3d07da5d1d3795f2dcc83e │ ├── VERSION │ ├── json │ └── layer.tar ├── a7b8b41220991bfc754d7ad445ad27b7f272ab8b4a2c175b9512b97471d02a8a │ ├── VERSION │ ├── json │ └── layer.tar ├── a936027c5ca8bf8f517923169a233e391cbb38469a75de8383b5228dc2d26ceb │ ├── VERSION │ ├── json │ └── layer.tar ├── f60c56784b832dd990022afc120b8136ab3da9528094752ae13fe63a2d28dc8c │ ├── VERSION │ ├── json │ └── layer.tar └── repositories
json
にはメタデータが記述され、VERSION
にはそのスキーマバージョン。repositories
にはタグとIDの対応が入るらしい。
layer.tar
にはファイルシステムの差分が入っている。たとえば、以下のような変更があったとすると、
Added: /etc/my-app.d/default.cfg Modified: /bin/my-app-tools Deleted: /etc/my-app-config
以下のようになる。削除されたファイルは.wh.
で示す。ので、Dockerには.wh.
で始まるファイルをつくることができないらしい。なんだその制約...
/etc/my-app.d/default.cfg /bin/my-app-tools /etc/.wh.my-app-config
App Container/rkt
シンプル。App Container Image (ACI)は以下の要素で構成される。
具体的には以下のようになっている。
/manifest /rootfs /rootfs/usr/bin/data-downloader /rootfs/usr/bin/reduce-worker ...
Dockerと違うのは、ACIではイメージの署名とか暗号化についても定められているところ、かな?(Dockerはたぶんほかの仕様書に書いてあるんだろうけどめんどくさくて探してない)
LXD
(LXDはアプリケーションコンテナじゃない気もするけど)
LXDはACIよりちょっと複雑。
から成る。テンプレートとは、/etc/hostname
みたいな、イメージごとにちょっとづつ違うファイルを自動生成するためのテンプレート。
rootfs/ metadata.yaml templates/