気軽に Docker を使いたい人向けの軽量な Docker ホスト(VM)用 Linux OS です。
Only-Docker → RancherOS-Lite → DockerRoot → Barge と変遷してきています。
(最後に Barge になったのは、Docker 社が他社製品名の先頭に Docker を使用することを禁止しているため)
Barge は、以下のような特徴を持っています。
- 最軽量
- 高速ブート
- Docker のバージョンを切り替え可能
- glibc、bash、dumb-init を標準搭載
- パッケージ・インストーラ
- Vagrant 用 Box
- VirtualBox に最適化
- Raspberry Pi 3 のサポート
最軽量
以前、メモ:Docker ホスト用軽量 OS の比較 - Qiita でもご紹介させて頂いたんですが、なんとか未だに 15MB をキープしております。
Docker の良さである軽量、高速起動のはずが、ホスト OS(VM)のダウンロードの時点で挫けそうになったのは私だけではないはず。
この軽さはカーネルとファイルシステムの展開スピードにも影響して来ます。
高速ブート
バグ修正や最適化を続けた結果、カーネルのロードからプロンプトが表示されるまでは、わずか5秒に。
Alpine Linux Virtual (29MB)の6秒を超える結果になりました。
Vagrant + VirtualBox で起動した場合でも、VM の起動から SSH のコネクション確立までは約7秒、全体でも約16秒で vagrant up
が完了します。
Docker をサクッと使いたい時にサクッと起動させる。ストレス無しです。
Docker のバージョンを切り替え可能
初期状態では Docker のバージョンは v1.10.3 を搭載していますが、必要に応じてバージョンの切り替えが出来るようになっています。
VM を再作成/再起動することも無く、
sudo /etc/init.d/docker restart v1.13.1
と打つだけで Docker v1.13.1 に切り替わります。
さらに、RC 版にも対応!
boot2docker や Docker for Mac/Windows のリリースを待つこと無く、Docker Engine のリリースと同時にすぐにテストが開始出来ます。
ちなみに、Docker v1.10.3 は、単一バイナリの最後のバージョンで、軽量な上、docker-compose v2 にも対応しているので、デフォルトに採用しています。
glibc、bash、dumb-init を標準搭載
軽量でありながら、押さえるところは押さえる。
軽量な uClibc、musl libc では無く、敢えて glibc で Linux バイナリの互換性を高めています。
また、busybox の sh/ash では無く、bash を搭載することで Terminal での操作も楽ちん。
Docker コンテナの init には欠かせない、軽量な dumb-init も標準装備です。
↓こんな感じ。
docker run -d -v /usr/bin/dumb-init:/dumb-init:ro --entrypoint=/dumb-init <image> <command>
これら以外にも Buildroot のパッケージから必要最小限のユーティリティを搭載しています。
https://github.com/bargees/barge-os/blob/master/README.md#features
パッケージ・インストーラ
アプリケーションの実行は Docker におまかせ!
とは言え、はやり、ホスト側に git や make、(標準の busybox の vi ではなく)vim があれば楽ですよね。
criu、ipvsadm、bindfs や su-exec 等の Docker を補完するツールも欲しいです。
そこで、Docker を利用して、Barge のビルド時と同じ環境の Docker イメージを用意し、Buildroot の膨大なパッケージ群の中から、いつでも好きなパッケージを個別にビルド、インストール出来るツールを作成しました。
https://github.com/bargees/barge-pkg
さらに、本来 Buildroot には無い、criu、ipvsadm、bindfs や su-exec 等も extra パッケージとして加えてあります。
https://github.com/bargees/barge-pkg/tree/master/extra/package
一度作成したパッケージは保存されて再利用出来ますし、事前にビルドしたパッケージを集めたリポジトリもご用意。リポジトリにあるパッケージはビルドする必要は無く、自動的にダウンロードして、インストールされます。
https://github.com/bargees/barge-pkg/releases
Vagrant 用 Box
Vagrant の便利さはもう説明が要らないと思います。
最近はデグレードも多く不安定ですが、まだまだ使えます。
何と言っても、
- VM の作成/破棄が気軽に出来ること。
- 環境の共有/再現が簡単に出来ること。
が大きいです。
Barge も Vagrant 用 box を標準で提供。
https://app.vagrantup.com/ailispaw/boxes/barge
Docker provisioner の利用、Port Forward の設定、Private Network の設定、Shared Folder の設定等々、Vagrant の機能をそのまま利用することが出来ます。
また、Docker for Mac/Windows では出来ない、複数 VM の起動や連携、Vagrantfile で環境自体の共有が可能です。
VirtualBox に最適化
※ 最新の VirtualBox 用にはパッチは適用していません。
VirtualBox は重いし使えない子、と言われることが多いですが、やはり、フリーで、かつ Mac/Windows を問わず、同じ環境を共有できるメリットは大きいと思います。
とは言え、VirtualBox Shared Folder (vboxsf) には致命的な問題もありますので、Vagrant 版の Barge では独自に GuestAdditions にパッチを当てて対処しています。
https://github.com/bargees/barge-packer/tree/master/virtualbox/iso/patches
- VM 内で vboxsf 上のファイルの変更が正しく反映されない問題
https://github.com/ailispaw/docker-root-packer/issues/2 - vboxsf 上のホスト↔ VM 間のファイル転送バッファを最大にして転送速度の改善
特に転送速度はリード/ライト共に標準の2倍〜5倍の転送速度を実現しています。
Mac のような NFS が簡単に使える環境の方は NFS の方がもちろん速いですが、
軽量なアプリを Mac/Windows で環境を共有する必要がある場合は vboxsf も選択肢としてありかなと思っています。
Raspberry Pi 3 のサポート
※ 現在 Raspberry Pi のサポートは停止しています。
最近 Docker 界隈でも話題になっている Raspberry Pi。
Docker から公式に ARM 版バイナリの提供も始まりましたし、
resin.io や HyproitOS も ARM 環境での Docker をサポートしています。
ただ、やはり大きいですよ、イメージが。
ここは Barge も使えるようにしてみようと、最近サポートを開始しました。
VM では必要なかった各種デバイス・ドライバを含めても 32MB と軽量で、SD Card への書き込みも数秒。
VM 版と同様に高速に起動しますし、軽量なので SD Card の残りスペースも Docker 用に十分に確保出来ます。
また、ファイルシステムが RAM に展開されるので SD Card に優しいです。
https://github.com/bargees/barge-os/releases/tag/2.5.4-rpi
https://github.com/bargees/barge-rpi-contrib
今後の課題や検討事項
- Cloud 対応
現状でも Cloud 上の VM で利用できるとは思いますが、最初のコンフィグレーションには cloud-init の対応が必須だろうと思っています。 - Bare Metal 対応
Cloud 対応と同様ですが、Raspberry Pi や Bare Metal でもコンフィグレーションを容易にするために、device-init のようなツールの搭載を考えています。 - Docker 最新版の標準搭載
Docker v1.12 から overlay2 が利用可能になりましたので、それが速度、安定性共に良いようであれば、サイズを犠牲にしても入れる価値があるか検討したいです。 - バグや機能不足の洗い出し
利用状況が限定的な現状では問題発生への対応は簡単ではありますが、レアなケースを含めて全てを洗い出すことは不可能ですし、アイデアも限られます。出来ればより多くの人に多様な使い方をしてもらいながら、良いものに出来ればと思っています。
リンク集
-
https://github.com/bargees/barge-os
Barge OS のビルド環境 -
https://github.com/bargees/barge-pkg
パッケージ・インストーラとパッケージ・リポジトリ -
https://github.com/bargees/barge-packer
Vagrant 用 box と QEMU 用 qcow2 イメージ -
https://github.com/bargees/barge-docker-image
Barge OS の Docker イメージ -
https://github.com/bargees/barge-xhyve
xhyve hypervisor 用 Barge 環境の作成ツール -
https://github.com/bargees/barge-rpi-contrib
Raspberry Pi 版 Barge の補助ユティリティ -
https://github.com/bargees/armhf-docker
ARM 版 Docker Engine のビルドファイル - https://app.vagrantup.com/ailispaw/
- https://hub.docker.com/u/ailispaw/
サンプル
-
https://github.com/ailispaw/swarm-barge
Docker Swarm Mode クラスタの構築 -
https://github.com/ailispaw/rexray-barge
REX-Ray volume driver plugin の利用 -
https://github.com/ailispaw/yapc-barge
YAPC:Docker を利用しないコンテナ作成ツール -
https://github.com/ailispaw/rkt-barge
rkt 実行環境の構築 -
https://github.com/ailispaw/clair-barge
Clair 実行環境の構築 -
https://github.com/ailispaw/ubuntu-essential
最小構成の Ubuntu Docker イメージのビルド -
https://github.com/bargees/barge-packer/blob/master/virtualbox/Vagrantfile
vagrant-serverspec を利用した Barge Vagrant box のテスト -
https://github.com/bargees/barge-fstest
vboxsf のバグ検証 -
https://github.com/ailispaw/k3s-barge
k3s を利用した Kubernetes の環境構築
Barge ご利用のプロジェクト
-
https://wckr.github.io/
Wocker: Docker を使って WordPress の開発環境を高速に作成するツール -
https://github.com/yappabe/vagrant-docker
Vagrant + Docker による Web 開発環境 -
https://github.com/aberresch/udre
Vagrant + Docker + Ansible を組み合わせた統合開発環境 -
https://github.com/liteart/docker-suitecrm
SuiteCRM Docker イメージのビルド/実行環境