Docker Machine をローカル VM で始めるには¶
VirtualBox 上で、docker-machine
を使った Docker ホストの作成・使用・管理を見ていきましょう。
まず、 VirtualBox 4.3.28 がシステム上に正しくインストールしているのを確認します。
ここで docker-machine ls
コマンドを実行すると、利用可能な全てのマシンを表示しますが、この時点ではまだホストを作成していません。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL
docker-machine create
コマンドを使い、1つ作成します。ここでは --driver
フラグに virtualbox
文字列を与えます。最後の引数はマシン名を追加します。この例ではマシンに対して “dev” という名前を付けます。
このコマンドは軽量な Linux ディストリビューション( boot2docker )をダウンロードし、Docker デーモンをインストールします。それから Docker が実行する VirtualBox 仮想マシンを起動します。
$ docker-machine create --driver virtualbox dev
Creating CA: /home/username/.docker/machine/certs/ca.pem
Creating client certificate: /home/username/.docker/machine/certs/cert.pem
Image cache does not exist, creating it at /home/username/.docker/machine/cache...
No default boot2docker iso found locally, downloading the latest release...
Downloading https://github.com/boot2docker/boot2docker/releases/download/v1.6.2/boot2docker.iso to /home/username/.docker/machine/cache/boot2docker.iso...
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env dev
作成したマシンを見るには、再び docker-machine ls
コマンドを実行します。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
dev virtualbox Running tcp://192.168.99.100:2376
次に、 docker-machine create
コマンドの出力に注目します。その仮想マシンに対して Docker が通信できるようにしなくてはいけません。これを docker-machine env
コマンドによって行います。例えば、次のように実行します。
$ eval "$(docker-machine env dev)"
$ docker ps
注釈
もし fish
や Powershell や cmd.exe
のような Windows シェルを使っている場合、先ほどのコマンドをそのまま入力しても動作しません。その代わり、 envコマンドのドキュメント
を参照し、シェルに適した環境変数の設定方法を学んでください。
これは Docker クライアントが特定の TLS 設定を読み込むよう環境変数を指定します。新しいタブを開いたり、マシンを再起動する度に、毎回実行する必要があるので注意してください。
何が設定されるか確認するには、 docker-machine env dev
コマンドを実行します。
$ docker-machine env dev
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.16.62.130:2376"
export DOCKER_CERT_PATH="/Users/<your username>/.docker/machine/machines/dev"
export DOCKER_MACHINE_NAME="dev"
# Run this command to configure your shell:
# eval "$(docker-machine env dev)"
これで対象となるホスト上で Docker コマンドを実行できます。
$ docker run busybox echo hello world
Unable to find image 'busybox' locally
Pulling repository busybox
e72ac664f4f0: Download complete
511136ea3c5a: Download complete
df7546f9f060: Download complete
e433a6c5b276: Download complete
hello world
Docker ホスト上でポートを公開している場合、ホストの IP アドレスは docker-machine ip
コマンドで調べられます。
$ docker-machine ip dev
192.168.99.100
例えば、ウェブサーバ(コンテナ内には nginx )を次のように実行します。
イメージの取得が終われば、docker-machine ip
コマンドで取得した IP アドレスで、サーバの 8000 ポートにアクセスします。以下は実行例です。
$ curl $(docker-machine ip dev):8000
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
ローカルで Docker が動く仮想環境を多く作成・管理するには、同様に docker-machine create
を実行します。作成したマシンを全て表示するには docker-machine ls
を実行します。
対象のホストを暫く使わないのであれば、 docker-machine stop
で停止し、後から再び docker-machine start
で開始できます。マシン名を引数として必ず指定してください。
$ docker-machine stop dev
$ docker-machine start dev