chrootとDocker(LXC)の違いって?
chroot
メリット
- ホストからファイルシステムが隔離される。(パッケージが分離できる。)
- ルートを移動するだけなので、ホストからはそのまま参照できる。
- 固めれば、容易に環境が移動できる。(環境の共有が可能)
- 導入が簡単 or 初期で導入されてる。
デメリット
- ユーザーランドがすべて隔離されるわけではない。(プロセスなどがホストと共有)
- Linuxでしか使えない。(BSDはJail)
Docker
メリット
- ユーザーランド全体が隔離できる。
- Exportで容易に環境が移動できる。(環境の共有が可能)
- 仮想化技術との連携でLinux以外で動かせる。 (※ WindowsはWindows Containerができたのでそのまま使える。
デメリット
- Dockerを導入しないといけない。
- Version/Distributionによっては導入できない。
運用案
開発環境はchrootで簡単に
- 開発初期段階など、構成変更が激しいタイミングなどはchrootでやると楽?
- 一時的な開発参入はchrootでお手軽に?
- データのやり取りが激しい時はchrootで意識せずに開発?
評価環境/本番環境はDockerで厳密に
- ユーザランドが完全に隔離されるDockerを本番では使う。
- 評価環境は本番環境に合わせる。
chrootとDockerの切り替え
Dockerからchrootへの切り替え
- DockerのImageをexportする。
- exportしたImageを展開する。
- 展開先にchrootでアクセスする。
docker save > [filename.tar]
tar -xvfp [filename.tar] -C [path]
chroot [path]
chrootからDockerへの切り替え
- chrootのディレクトリをtarに固める。
- Dockerでインポートする。
tar -cvfp [filename.tar] [path]/*
cat filename.tar | docker import - [filename.tar] REPOSITORY[:TAG]