第458回ではUbuntuにおけるDockerのインストール方法を紹介しました。ところでDockerと同じコンテナ技術を利用したソフトウェアとして
LXDの上でDockerを使う
Dockerと同様にカーネルのコンテナ技術を利用したソフトウェアのひとつにLXDが存在します。Dockerがひとつのコンテナでひとつのアプリケーションを動かす
- ※1
- とはいえどちらも似たような技術に立脚している以上,
メインの用途とは異なる使い方も可能です。たとえばひとつのDockerコンテナでも, プロセス管理ツールを使えば複数のサービスを立ち上げるようなシステムコンテナとして設定できますし, LXDコンテナを単一のアプリケーションを起動するアプリコンテナとして動かせます。また以前はDockerもLXDと同じく裏でLXCを利用してコンテナの作成を行なっていました。現在のDockerはLXCではなくrunCと呼ばれるツールを使っています。
両者の具体的な違いを見ていきましょう。ちなみに個々の環境や運用方針によって成り立たないものもあります。オプションやツールを組み合わせることで変えられるものもあります。あくまで
- Docker
- 単一のコンテナには単一のサービスが動いている
docker run
で構築済みイメージをコンテナインスタンスとして実行する/sbin/
は実行されないinit - 個々のコンテナの設定は
docker run
コマンドの引数として渡す - イメージは
Dockerfile
によって構築する - 永続的なデータは
「データボリューム」 に保存する - ユーザーはコンテナインスタンスの中に入って操作することはない
CMD
で指定したプロセスが終了すればインスタンスは停止する- コンテナのrootはホストのrootと同じUIDが使われる
- マシン間のライブマイグレーションは将来的に対応予定
- コンテナはホストから名前空間の機能によって隔離されている
- Dockerコンテナの中でDockerコンテナを起動できる
- LXD
- 単一のコンテナの中に複数のサービスが動いている
lxc start
で構築済みイメージをコンテナインスタンスとして起動する/sbin/
は実行されるinit - 個々のコンテナの設定は設定コマンドを使ってメタデータファイルに保存する
- イメージはrootfsイメージとして構築する
- 永続的なデータはコンテナの中に保存する
- ユーザーはコンテナインスタンスの中に入って操作する
- コンテナの中で
shutdown
コマンドを実行すればインスタンスは終了する - コンテナのrootはホストのrootと異なるUIDが使われる
- マシン間のライブマイグレーションが実験的ではあるものの実装済み
- コンテナはホストから名前空間の機能によって隔離されている
- LXDコンテナの中でLXDコンテナを起動できる
使う上で一番大きな違いは,docker run
で実行することに なります。
それに対してLXDは,
実際のところLXDが比較されるべきはDockerよりもむしろ,
ところでLXDによって
- ※2
- LXDを支えているコンテナ技術全般については,
gihyo. jpで連載されているLXCで学ぶコンテナ入門が参考になります。ちなみにLXCはカーネルのコンテナ機能を用いてシステムコンテナを構築するためのツールやライブラリ群です。LXDはLXCが提供するAPIを利用して, より簡単にユーザーがコンテナを管理できるようにしたコマンドやサービスとなります。