軽量コンテナとして注目を浴びているDockerがバージョン0.8から正式にOS Xでの動作をサポートしました。
さっそく環境を構築してみたので、簡単な解説をしてみます。
正式サポートの概要
DockerはこれまでもOS Xの上で動かそうと思えば、動かすことはできました。これはOS Xの上でVagrant(実稼働しているのはVirtualBox)などを利用した仮想マシンで通常のUbuntuやCentOSなどのLinuxを立ち上げて、そのLinux環境の中でDockerを稼働させるというものが中心でした。もちろん公式サポートはされていませんでした。
これはDockerそのものがLXC (Linux Containers) と呼ばれるLinuxのOSレベルでの仮想化技術を利用したものなので、Linuxの上でしか利用できなかったからです。よって、バージョン0.8からもOS Xの上でネイティブに動作するわけではありません。
では、どのようにして正式サポートしたのかというと、Dockerが専用の軽量仮想マシンイメージを用意し、OS Xからこの仮想マシンに対してDockerの操作ができるクライアントを用意したことにより、正式サポートとしたようです。用意された軽量仮想マシンは24MBで10秒かからずに起動すると公式のBlogでは説明されています。
DockerをOS Xの上で環境構築する方法
環境構築の方法についてはDocker公式のドキュメントにも存在します。ここではOSX Mavericksでの環境構築をします。
前提として
- Homebrewがインストールされている
- VirtualBoxがインストールされている
とします。
Dockerの環境構築は
- 今回用意された軽量仮想マシンをインストールする(Boot2Docker)
- 仮想マシンのDocker daemonとやりとりをするDockerクライアントをインストールする
以上の2ステップだけです。
インストール
インストールはHomebrewで簡単にできます。(Boxen向けのモジュールもあります)
$ brew tap homebrew/binary
$ brew install docker boot2docker
以上で軽量仮想マシンを操作するためのboot2dockerとクライアントになるコマンドであるdockerがインストールされます。
boot2dockerのセットアップ
boot2dokerをインストールしただけでは軽量仮想マシンが起動されていません。軽量仮想マシンをダウンロードして起動する状態にするのに以下のコマンドを実施してください。
$ boot2docker init
[2014-02-08 20:34:15] Creating VM boot2docker-vm
Virtual machine 'boot2docker-vm' is created and registered.
UUID: 2a249c91-a7ce-41d0-8c8e-c622aea16968
Settings file: '/Users/hirocaster/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vbox'
[2014-02-08 20:34:15] Setting VM settings
[2014-02-08 20:34:15] Setting VM networking
[2014-02-08 20:34:15] boot2docker.iso not found.
[2014-02-08 20:34:18] Latest version is v0.5.4, downloading...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 342 100 342 0 0 337 0 0:00:01 0:00:01 --:--:-- 337
100 27.0M 100 27.0M 0 0 1700k 0 0:00:16 0:00:16 --:--:-- 3161k
[2014-02-08 20:34:34] Done
[2014-02-08 20:34:34] Setting VM disks
[2014-02-08 20:34:34] Creating 40000 Meg hard drive...
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Disk image created. UUID: 212e5260-deda-4b16-b9d7-b349b467ecb4
Converting from raw image file="format-flag.txt" to file="format-flag.vmdk"...
Creating dynamic image with size 5242880 bytes (5MB)...
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VMDK'. UUID: 212e5260-deda-4b16-b9d7-b349b467ecb4
[2014-02-08 20:34:35] Done.
[2014-02-08 20:34:35] You can now type boot2docker up and wait for the VM to start.
以下のコマンドで、軽量仮想マシンを起動してください
$ boot2docker up
[2014-02-08 20:37:26] Starting boot2docker-vm...
[2014-02-08 20:37:46] Started.
仮想マシンへはboot2docker sshでアクセスすることができます。
boot2docker ssh
Warning: Permanently added '[localhost]:2022' (RSA) to the list of known hosts.
docker@localhost's password:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.5.4
docker@boot2docker:~$ exit
Connection to localhost closed.
クジラ可愛いですね!今は特に操作することはないのでexitして抜けておきます。
dockerコマンドの設定
dockerコマンドは環境変数であるDOCKER_HOSTの値を見てリモートのDocker daemonが稼働しているホストを自動的に判断します。環境変数を自分の稼働しているOS Xを指定するために以下のコマンドを実行します。
export DOCKER_HOST=tcp://
これで、自分の手元のマシンを参照するようになります。dockerコマンドが正常に稼働していれば以下のような表示となるはずです。
$ docker version
Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8
Server version: 0.8.0
Git commit (server): cc3a8c8
Go version (server): go1.2
こんなところでもGoが利用されているんですね。これでDockerの環境が構築できました。
動作確認
Ubuntuの動作を確認してみます。
$ docker pull ubuntu
Pulling repository ubuntu
9cd978db300e: Download complete
eb601b8965b8: Download complete
5ac751e8d623: Download complete
9cc9ea5ea540: Download complete
9f676bd305a4: Download complete
511136ea3c5a: Download complete
7a4f87241845: Download complete
f323cf34fd77: Download complete
6170bb7b0ad1: Download complete
1c7f181e78b9: Download complete
321f7f4200f4: Download complete
コンテナを起動します。
$ docker run -i -t ubuntu:12.04 /bin/bash
root@d7e5a672de30:/#
無事に起動することができました!Mac単体でも快適にDockerを利用する事ができそうです。
余談:Dockerがすぐに利用できるディストリビューション「CoreOS」
Dockerを利用する人向けの軽量LinuxディストリビューションとしてCoreOSというのも存在します。あまったマシンにDockerで環境をいくつも使い捨てにしたいのであれば、ホストOSとして採用してみてはいかがでしょうか。