Edited at

Docker Machine を使って VirtualBox に Dockerホストを立てる

More than 1 year has passed since last update.


概要

Docker公式オーケストレーションツールの 1 つ Docker Machine を使って VirtualBox に Docker がインストールされた VM を作成し、hello world を出力するコンテナを走らせてみるという話


必要なもの


  • VirtualBox 4.3.20 以上


Hello World

docker-machine ls コマンドでDockerホストの一覧を出す。

(まだマシンを作成してないので何も出ない)

$ docker-machine ls

NAME ACTIVE DRIVER STATE URL SWARM

Dockerホストマシンを作るには、docker-machine createを使う。

--driverオプションに virtualbox を指定し、引数にマシン名 dev を渡す。

$ docker-machine create --driver virtualbox dev

INFO[0000] Creating CA: /Users/seigo/.docker/machine/certs/ca.pem
INFO[0000] Creating client certificate: /Users/seigo/.docker/machine/certs/cert.pem
INFO[0002] Downloading boot2docker.iso to /Users/seigo/.docker/machine/cache/boot2docker.iso...
INFO[0141] Creating SSH key...
INFO[0141] Creating VirtualBox VM...
INFO[0149] Starting VirtualBox VM...
INFO[0150] Waiting for VM to start...
INFO[0182] "dev" has been created and is now the active machine.
INFO[0182] To point your Docker client at it, run this in your shell: $(docker-machine env dev)

マシンリストを見てみる

$ docker-machine ls

NAME ACTIVE DRIVER STATE URL SWARM
dev * virtualbox Running tcp://192.168.99.100:2376

ACTIVE カラムの * は マシン dev がアクティブなホストであることを示している。

これまでのDockerであれば、リモートのDockerホストを使うには、DOCKER_HOSTを指定して通信する。

docker-machine env dev コマンドで、ホストマシンのDocker Remote API のエンドポイントや、certファイルのパスが表示される。

$ docker-machine env dev

export DOCKER_TLS_VERIFY=yes
export DOCKER_CERT_PATH=/Users/seigo/.docker/machine/machines/dev
export DOCKER_HOST=tcp://192.168.99.100:2376

ここで表示される export コマンドを打ってもいいが、docker-machine config というコマンドも用意されていて、docker コマンドのオプションの形にしてくれる。

$ docker-machine config dev

--tls --tlscacert=/Users/seigo/.docker/machine/machines/dev/ca.pem --tlscert=/Users/seigo/.docker/machine/machines/dev/cert.pem --tlskey=/Users/seigo/.docker/machine/machines/dev/key.pem -H="tcp://192.168.99.100:2376"

これを利用して、dockerコマンドを実行する

$ docker $(docker-machine config dev) ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

Hello World

$ docker $(docker-machine config dev) run busybox echo hello world

Unable to find image 'busybox' locally
511136ea3c5a: Pull complete
df7546f9f060: Pull complete
ea13149945cb: Pull complete
4986bf8c1536: Pull complete
busybox:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.

Status: Downloaded newer image for busybox:latest
hello world

マシンをストップしてみる

$ docker-machine stop dev

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev * virtualbox Stopped

ストップしたマシンをスタートしてみる

$ docker-machine start dev

INFO[0000] Waiting for VM to start...
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev * virtualbox Running tcp://192.168.99.100:2376

SSH ログイン

$ docker-machine ssh dev

## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.5.0, build master : a66bce5 - Tue Feb 10 23:31:27 UTC 2015
Docker version 1.5.0, build a8a31ef
docker@dev:~$

SSH 経由でのコマンド実行

$ docker-machine ssh dev "hostname && uname -a"

dev
Linux dev 3.18.5-tinycore64 #1 SMP Sun Feb 1 06:02:30 UTC 2015 x86_64 GNU/Linux

マシンの削除

$ docker-machine rm dev

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM


REF