Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away