概要
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