@znz blog

ZnZ の memo のようなもの

boot2dockerでdockerを試す

| Comments

boot2docker で最新の docker を試してみました。 他ではあまり書いていないアンインストール方法も書いているので、 不要になった時や何か変になった時の削除方法も参考になると思います。

対象バージョン

  • Mac OS X 10.9.1 で試しましたが Linux でも同様に動くはずです
  • VirtualBox 4.3.6
  • boot2docker 0.6.0
  • docker 0.8.1

014-08-03 追記: 追記部分の確認バージョン

  • boot2docker 1.1.2
  • docker 1.1.2

VirtualBox

あらかじめ VirtualBox をインストールしておきます。

boot2docker

http://docs.docker.io/en/latest/installation/mac/ の手順に従って boot2docker を入れてみます。

インストール

適当なディレクトリに boot2docker をダウンロードして実行可能にします。

1
2
3
4
 mkdir -p ~/boot2docker
 cd ~/boot2docker
 curl https://raw.github.com/boot2docker/boot2docker/master/boot2docker > boot2docker
 chmod +x boot2docker

この段階でのアンインストールは boot2docker を削除するだけです。

(2014-08-03 追記: Mac OS X なら brew install boot2docker などでもインストールできます。)

VM イメージの作成

初回は ./boot2docker init を実行して iso のダウンロードと VM の作成をします。

(2014-08-03 追記: ISO のダウンロードだけなら boot2docker download で、 既に ISO があっても最新にするなら boot2docker upgrade で ダウンロードできます。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
% ./boot2docker init
[2014-02-22 23:43:36] Creating VM boot2docker-vm
Virtual machine 'boot2docker-vm' is created and registered.
UUID: 61e0ec36-fc80-4b70-ac11-899f6526a57e
Settings file: '/Users/kazu/VirtualBox VMs/boot2docker-vm/boot2docker-vm.vbox'
[2014-02-22 23:43:36] Setting VM settings
[2014-02-22 23:43:36] Setting VM networking
[2014-02-22 23:43:36] boot2docker.iso not found.
[2014-02-22 23:43:38] Latest version is v0.6.0, downloading...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   346  100   346    0     0    319      0  0:00:01  0:00:01 --:--:--   319
100 24.0M  100 24.0M    0     0   295k      0  0:01:23  0:01:23 --:--:--  498k
[2014-02-22 23:45:02] Done
[2014-02-22 23:45:02] Setting VM disks
[2014-02-22 23:45:02] Creating 40000 Meg hard drive...
Converting from raw image file="stdin" to file="/Users/kazu/.boot2docker/boot2docker-vm.vmdk"...
Creating dynamic image with size 41943040000 bytes (40000MB)...
[2014-02-22 23:45:02] Done.
[2014-02-22 23:45:02] You can now type boot2docker up and wait for the VM to start.

この段階のやり直しは VM が起動していれば ./boot2docker stop で止めて、 ./boot2docker delete で VM を削除するだけではダメで、 ~/.boot2docker も削除する必要があります。

パスは boot2docker の中の BOOT2DOCKER_CFG_DIR に書かれていて、 以下の設定は $HOME/.boot2docker/profile で設定変更できます。

  • VM_NAME : VirtualBox での VM の名前 (デフォルト: boot2docker-vm)
  • DOCKER_PORT : ホスト側で docker 用に使うポート (デフォルト: 4243)
  • SSH_HOST_PORT : ホスト側で ssh サーバー用に使うポート (デフォルト: 2022)
  • VM_DISK : vmdk ファイルのパス (デフォルト: ${BOOT2DOCKER_CFG_DIR}/${VM_NAME}.vmdk)
  • VM_DISK_SIZE : vmdk の容量 (デフォルト: 40000 メガバイト)
  • VM_MEM : メモリ (デフォルト: 1024)
  • BOOT2DOCKER_ISO : ISO ファイルのパス (デフォルト: ${BOOT2DOCKER_CFG_DIR}/boot2docker.iso)

VM を作り直すだけなら ./boot2docker delete して ./boot2docker init すれば ISO はダウンロードし直さずに VM だけ作り直せます。

間違えて先に ~/.boot2docker を削除してしまうと VirtualBox の状態が不整合になるので、 VirtualBox の GUI の方の仮想メディアマネージャーで存在しなくっているファイルを除去するなどの対処をして直します。

VM の起動

docker デーモンの VM を ./boot2docker up で起動します。

1
2
3
4
5
6
% ./boot2docker up
[2014-02-22 23:50:43] Starting boot2docker-vm...
[2014-02-22 23:51:03] Started.

To connect the docker client to the Docker daemon, please set:
export DOCKER_HOST=tcp://localhost:4243

止めるのは ./boot2docker stop です。

ssh で中に入る

vagrant と似た感じで ./boot2docker ssh で中に入れます。 ユーザーは docker でパスワードは tcuser です。 Tiny Core Linux ベースなので、こういうパスワードになっているのだと思います。

(2014-08-03 追記: 最近の boot2docker では、 ssh でのログインや sudo はパスワードなしで出来るようになっているようです。 su - docker で確認したところ、パスワードは tcuser のままでした。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
% ./boot2docker ssh
docker@localhost's password:
                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.6.0
docker@boot2docker:~$

docker を使ってみる

ホスト OS 側に docker コマンドをインストールして、そこから使っても良いのですが、 Homebrew でインストールできたバージョンが 0.8.0 で少し古かったので、 主に VM の中の docker コマンドを使いました。

ドキュメントでは sudo docker で実行していますが、 TCP 接続だったり、ローカルの unix socket の場合でもグループのアクセス権限で許可されている場合などは sudo なしの docker コマンドだけで大丈夫です。

boot2docker の VM の場合は /var/run/docker.sockdocker グループに読み書きが許可されていて、 docker ユーザーが docker グループに属しているため、 sudo が不要になっています。

バージョンなどの情報確認

docker versiondocker info で情報を確認します。

boot2docker の場合は問題ないと思いますが、 docker のサーバーとの接続がうまくいかない場合はここでエラーなどになるので、 環境変数 DOCKER_HOST やポートフォワーディングや firewall などの設定を確認します。

まず VM の外の Homebrew でインストールした docker コマンドから確認しました。 ここでバージョンが古かったので、後は ssh で入った VM の中で docker コマンドを使うことにしました。

(2014-08-03 追記: 最近のバージョンでは boot2docker up の時に export DOCKER_HOST=tcp://192.168.59.103:2375 のようなメッセージが出てくるように docker の接続に使う IP アドレスとポート番号が変わっています。)

1
2
3
4
5
6
7
8
9
10
% export DOCKER_HOST=tcp://127.0.0.1:4243
% docker version
Client version: 0.8.0
Go version (client): go1.2
Git commit (client): cc3a8c8d8ec57e15b7b7316797132d770408ab1a

Server version: 0.8.1
Git commit (server): a1598d1
Go version (server): go1.2
Last stable version: 0.8.1, please update docker

VM の中では Server と Client のバージョンが最新版で一致しています。 ついでに docker info も確認しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
docker@boot2docker:~$ docker version
Client version: 0.8.1
Go version (client): go1.2
Git commit (client): a1598d1
Server version: 0.8.1
Git commit (server): a1598d1
Go version (server): go1.2
Last stable version: 0.8.1
docker@boot2docker:~$ docker info
Containers: 0
Images: 0
Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Dirs: 0
Debug mode (server): true
Debug mode (client): false
Fds: 10
Goroutines: 13
Execution Driver: lxc-0.8.0
EventsListeners: 0
Kernel Version: 3.13.3-tinycore64
Init Path: /usr/local/bin/docker
docker@boot2docker:~$

docker を試してみる

docker pull ubuntu であらかじめダウンロードしてから docker run を実行しても良いのですが、 いきなり docker run -i -t ubuntu /bin/bash を実行しても、 自動的にダウンロードしてから実行されます。

ダウンロードはサーバー側が遅いのか、時間がかかることがあるようなので、 ゆっくり待った方が良さそうです。

引数に指定した /bin/bash がコンテナの中の唯一のプロセスとして起動するので、 自由に試してみて、 exit などで /bin/bash が終了すればコンテナも終了します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
docker@boot2docker:~$ docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu' locally
Pulling repository ubuntu
9cd978db300e: Download complete
eb601b8965b8: Download complete
5ac751e8d623: Download complete
9cc9ea5ea540: Download complete
9f676bd305a4: Download complete
511136ea3c5a: Download complete
f323cf34fd77: Download complete
6170bb7b0ad1: Download complete
1c7f181e78b9: Download complete
7a4f87241845: Download complete
321f7f4200f4: Download complete
root@a64cca91db41:/# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 15:32 ?        00:00:00 /bin/bash
root         9     1  0 15:33 ?        00:00:00 ps -ef
root@a64cca91db41:/# exit
exit
docker@boot2docker:~$

Dockerで不要になったコンテナやイメージを削除する に書いたようにコンテナが溜まっていくので、削除しておきます。

1
2
3
4
5
docker@boot2docker:~$ docker ps -a -q
a64cca91db41
docker@boot2docker:~$ docker rm `docker ps -a -q`
a64cca91db41
docker@boot2docker:~$

ちょっと試すだけなら -rm オプションを付けて自動削除するのが良さそうです。

(2014-08-03 追記: 最近の docker では -rm ではなく --rm を使うように警告 「Warning: '-rm' is deprecated, it will be replaced by '--rm' soon. See usage.」 が出てくるので、 将来のバージョンでは長いオプションには - 2個が必須になるようです。)

1
2
3
4
5
docker@boot2docker:~$ docker run -i -t -rm ubuntu /bin/bash
root@f810cbccf394:/# exit
exit
docker@boot2docker:~$ docker ps -a -q
docker@boot2docker:~$

Comments