Docker Machine をローカル VM で始めるには¶
動作条件¶
システム上に正しくインストールするには、 最新バージョンの VirtualBox をインストールする必要があります。 Mac または Windows で Docker Machine のインストールに Docker Toolbox を使えば、VirtualBox を自動的にインストールします。
1台目のマシンを Quickstart Terminal で作成したら、ターミナル上で default という名称を持つ環境が自動的に用意されます。この場合、以下の手順をそのまま読み進めても構いませんが、「default」以外の名前( staging や sandbox)で別のマシンの作成も可能です。
Machine を使って Docker コンテナを実行¶
Docker コンテナを実行するには、
新しい Docker 仮想マシンを作成します(あるいは既存マシンを開始します)。
環境変数を新しい仮想マシンに切り替えます。
docker クライアントを使い、コンテナの作成、読み込み、管理を行います。
Docker Machine で作成したマシンは、必要に応じて何度も再利用できます。マシンは VirtualBox 上の仮想マシンと同じ環境であり、どちらでも同じ設定が使われます。
以下の例で、マシンの作成・起動方法、 Docker コマンドの実行方法、コンテナの使い方を見ていきます。
マシンの作成¶
コマンド・シェルやターミナル画面を開きます。
以下の例では Bash シェルを扱います。 C シェルのような他のシェルでは、いくつかのコマンドが動作しない可能性がありますので、ご注意ください。
docker-machine ls
を使い、利用可能なマシンの一覧を表示します。
以下の結果から、マシンがまだ1台も作成されていないことが分かります。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
マシンを作成します。
コマンド docker-machine create
の実行時、 --driver
フラグに virtualbox
の文字列を指定します。そして、最後の引数がマシン名になります。これが初めてのマシンであれば、名前を default
にしましょう。既に「default」という名前のマシンが存在している場合は、別の新しいマシン名を指定します。
$ docker-machine create --driver virtualbox default
Running pre-create checks...
Creating machine...
(staging) Copying /Users/ripley/.docker/machine/cache/boot2docker.iso to /Users/ripley/.docker/machine/machines/default/boot2docker.iso...
(staging) Creating VirtualBox VM...
(staging) Creating SSH key...
(staging) Starting the VM...
(staging) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect Docker to this machine, run: docker-machine env default
このコマンドは Docker デーモンをインストールする軽量 Linux ディストリビューション( boot2docker )をダウンロードし、Docker を動かすための VirtualBox 仮想マシンを作成・起動します。
再び利用可能なマシン一覧表示したら、新しいマシンが出てきます。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://192.168.99.187:2376 v1.9.1
コマンドの環境変数を新しい仮想マシンに設定します。
コマンド docker-machine create
を実行しても、そのまま新しいマシンを操作できないので注意が必要です。新しいマシンの操作には docker-machine env
コマンドを使います。
$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://172.16.62.130:2376"
export DOCKER_CERT_PATH="/Users/<yourusername>/.docker/machine/machines/default"
export DOCKER_MACHINE_NAME="default"
# Run this command to configure your shell:
# eval "$(docker-machine env default)"
シェルを新しいマシンに接続します。
$ eval "$(docker-machine env default)"
注釈
fish
や Powershell 、あるいは cmd.exe
のような Windows シェルでは、先ほどのコマンドは実行できません。自分の使っているシェルで環境変数を有効にする方法は、 env
コマンドのドキュメント をご覧ください。
このシェル上で指定した環境変数を使えば、クライアントは指定された TLS 設定を読み込みます。新しいシェルの起動時やマシン再起動時には、再度指定する必要があります。
あとはホスト上で Docker コマンドを実行できます。
Machine コマンドを使ってコンテナを実行¶
セットアップが完了したことを確認するため、docker run
コマンドを使ってコンテナを起動しましょう。
docker run
コマンドを使い、busybox
イメージをダウンロードし、 簡単なecho
コマンドを実行します。
$ 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
ホストの IP アドレスを確認します。
Docker ホスト上でポート番号が利用可能な IP アドレスの確認は、 docker-machine ip
コマンドを使います。
$ docker-machine ip default
192.168.99.100
コンテナでウェブサーバ( https://www.nginx.com/ )を実行するため、次のコマンドを実行します。
$ docker run -d -p 8000:80 nginx
イメージの取得が完了したら、 docker-machine ip
で確認した IP アドレス上のポート 8000 でサーバにアクセスできます。実行例:
$ curl $(docker-machine ip default):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-machine create
を実行するだけです。作成されたマシン全ての情報を確認するには docker-machine ls
を使います。
マシンの起動と停止¶
ホストを使い終わり、しばらく使わないのであれば、 docker-machine stop
を実行して停止できます。あとで起動したい場合は docker-machine start
を実行します。
$ docker-machine stop default
$ docker-machine start default
マシンの名前を指定せずに操作するには¶
いくつかの docker-machine
コマンドは、マシン名を明示しれなければ default
という名称のマシン(が存在している場合)に対して処理を行います。そのため、 default
ローカル仮想マシンは一般的なパターンとして、頻繁に利用できるでしょう。
実行例:
$ docker-machine stop
Stopping "default"....
Machine "default" was stopped.
$ docker-machine start
Starting "default"...
(default) Waiting for an IP...
Machine "default" was started.
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
$ eval $(docker-machine env)
$ docker-machine ip
192.168.99.100
コマンドは以下の形式でも利用可能です。
docker-machine config
docker-machine env
docker-machine inspect
docker-machine ip
docker-machine kill
docker-machine provision
docker-machine regenerate-certs
docker-machine restart
docker-machine ssh
docker-machine start
docker-machine status
docker-machine stop
docker-machine upgrade
docker-machine url
default
以外のマシンでは、常に特定のマシン名をコマンドの引数として明示する必要があります。
起動時にローカル・マシンの自動起動¶
シェルのセッションを開く度に、Docker クライアントが自動的に毎回設定された状態にするには、対象ユーザのシェル profile (例: ~/.bash_profile
ファイル )に追記( eval $(docker-machine env default)
)します。しかし、 default
のマシンが起動されていなければコマンドは実行できません。そのような場合は、システム起動時に default
マシンが自動的に起動するよう設定します。
以下の例は OS X 上での設定です。
~/Library/LaunchAgents
以下に com.docker.machine.default.plist
ファイルを作成します。内容は次の通りです。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
</dict>
<key>Label</key>
<string>com.docker.machine.default</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/docker-machine</string>
<string>start</string>
<string>default</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
この中にある LaunchAgent
の default
を書き換えれば、任意のマシン(群)を起動できます。