今回はDockerについてお話しようと思います。
Docker?
Docker?何それ?とお思いの方の多いと思いますが、Docker というのは Docker社(旧dotCloud)が開発したオープンソースのコンテナ型のサーバー仮想化ソフトウェアです。
仮想化の技術では内部でLXC(Linux Containers) を使用しており、複雑だった処理をgitのような操作性で簡単に使えるようにし、更に+αの機能を追加したものがDockerです。
DockerでHDD容量を削減!
私は、これまでVMWareやVirtualBoxなどのホストOS型の仮想化ソフトウェアでサーバーを立ち上げ開発を行っていましたが、一部開発環境のみをDockerに置き換えてみる事にしました。元々はDockerへの移行をする気が湧いていなかったのですが、ホストマシンのHDD容量が逼迫していることに気づき、これ以上仮想マシンを増やしたらPCが限界を迎えてしまうので、Dockerに置き換えることにしました。
というのも、Dockerによる仮想化はカーネル空間は仮想化せず、ユーザー空間のみ仮想化を行っているため、ユーザー空間のみをHDDに保持しているため容量が軽くなるからです。
Dockerの移行によってHDDの容量がだいぶ空いたので他の仮想マシンもDockerの移行でHDDの容量を空けていこうと計画中です。
また、Dockerには様々な便利な機能やセキュリティ面でも嬉しい機能があるので少しだけ!紹介したいと思います。
仮想マシン上でDockerを動かす
Dockerコンテナは、仮想マシンの上でも動きます。実際に、Boot2Docker というDockerを動かすためのLinux軽量ディストリビューションを boot2docker/osx-installer や boot2docker/windows-installer といったDockerの使用に必要なLXCが使用できないOSでも、Dockerを使えるようにするためのインストーラが公開されており、簡単なインストール処理でVirtualBoxがインストールされ、その上でBoot2Dockerが起動し、Dockerが使えるようになっています。
kvm on kvm では気になる性能面も、この組み合わせではほぼ性能を気にする事無く運用することが可能になります。
コンテナがサンドボックスになる
これは開発環境に限った話ではなく、実際に運用した場合のお話ですが、サーバーの運用でいつも気がかりのはセキュリティですね。Dockerを使った場合は、コンテナそのものがサンドボックスとなるのでセキュリティの向上が望めます。コンテナはLinuxカーネル部分を共用していますが、コンテナ側からはカーネル部分を書き替えたりといったことは出来ません。更に、/etc/hosts などのOS全体に影響がでるようなファイルやネットワークの設定などは、例え sudo だとしても標準では書き替えることは出来ません。(オプションによって書き替えることが可能です)
Webサービスなどのサービスを提供する場合、いかにしてサンドボックス化を行うか 対策を練る必要がありますが、Dockerコンテナを利用するのも一つの手かもしれませんね。
コンテナをイメージ化してtarで固める
Dockerはコンテナをイメージ化することも可能です。更に、tarで固めて保管することも可能です。
Dockerは Registryサーバーを持つ事でpullやpushを行う事でイメージファイルをやり取りしコンテナ起動させたりもできますが、Registryサーバーを建てるまでもない場合は、tarで固めてsftp等で送っても良いかもしれません。
# コンテナをtarで固める
docker commit container-id repository:tagdocker save repository:tag > filename.tar
魅力が一杯のDockerですが、もっと便利な使い方や運用法があるよ!っていう方いましたら高橋まで教えてくれると嬉しいです!
以上、高橋でした!