Digital Ocean の例¶
以下の例では Docker に対応した Digital Ocean ドロップレット(クラウド・ホスト)を作成します。
ステップ1:Digital Ocean アカウントの作成¶
アカウントの取得がまだであれば、 Digital Ocean 上にアカウントを作成し、それからログインします。
ステップ2:自分のアクセス・トークンを生成¶
アクセス・トークンを生成します。
- Digital Ocean 管理コンソールに移動し、ページ上方にある API をクリックします。
- Generate New Token (新しいトークンの生成)をクリックして、トークンの生成に進みます。
- トークン名を指定し(例「machine」)、 Write (Optional) にチェックが入っているのを確認してから Generate Token (トークン生成)をクリックします。
- 生成された長いバイナリの文字列を取得し(クリップボードにコピーします)、どこか安全な場所に保管します。
これが次のクラウド・サーバの作成に必要となる、個人のアクセス・トークンです。
ステップ3:Machineを使ってドロップレットを作成¶
docker-machine create
コマンドの実行時に、digitalocean
ドライバと--digitalocean-access-token
フラグで自分のキーを指定します。あわせて新しいクラウド・サーバ名も指定します。
次の例は、「docker-sandbox」という名前の新しいドロップレットを作成します。
$ docker-machine create --driver digitalocean --digitalocean-access-token xxxxx docker-sandbox
Running pre-create checks...
Creating machine...
(docker-sandbox) OUT | Creating SSH key...
(docker-sandbox) OUT | Creating Digital Ocean droplet...
(docker-sandbox) OUT | Waiting for IP address to be assigned to the Droplet...
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 created instance...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
To see how to connect Docker to this machine, run: docker-machine env docker-sandbox
Droplet が作成されると、Docker はユニークな SSH 鍵を生成し、自分のローカル・システム上の ~/.docker/machines
に保存します。当初、この鍵はホストプロビジョニング用に使われます。後ほど、 docker-machine ssh
コマンドでドロップレットに簡単にアクセスするときにも使います。Docker Engine はクラウド・サーバ上にインストールされます。そして、TCP を通してリモートからの通信を受け付けられるように TLS 認証を使います。
- Digital Ocean コンソールに移動し、新しいドロップレットの情報を確認します。
- コマンド・ターミナル上で
docker-machine ls
を実行します。
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default - virtualbox Running tcp://192.168.99.100:2376
docker-sandbox * digitalocean Running tcp://45.55.139.48:2376
新しい docker-sandbox
マシンが実行されています。そして、アクティブなホストはアスタリスク(*)印が付いています。新しいマシンを作成すると、コマンド・シェルから自動的に接続できます。何らかの理由により、新しいマシンがアクティブなホストでない場合は docker-machine env docker-sandbox
を実行し、反映するためには eval $(docker-machine env docker-sandbox)
の実行が必要です。
ステップ4:ドロップレット上で Docker コマンドを実行¶
docker-machine
コマンドを使ってリモート・ホストの上方を確認できます。例えば、docker-machine ip <マシン名>
はホスト側の IP アドレスを取得します。より詳しい情報はdocker-machine inspect <マシン名>
で確認できます。
$ docker-machine ip docker-sandbox
104.131.43.236
$ docker-machine inspect docker-sandbox
{
"ConfigVersion": 3,
"Driver": {
"IPAddress": "104.131.43.236",
"MachineName": "docker-sandbox",
"SSHUser": "root",
"SSHPort": 22,
"SSHKeyPath": "/Users/samanthastevens/.docker/machine/machines/docker-sandbox/id_rsa",
"StorePath": "/Users/samanthastevens/.docker/machine",
"SwarmMaster": false,
"SwarmHost": "tcp://0.0.0.0:3376",
"SwarmDiscovery": "",
...
- Docker Engine が正しくインストールされたかどうか確認するため、
docker
コマンドを実行します。
docker run hello-world
のような基本的なコマンドを、新しいリモート・マシン上で実行します。あるいは、より面白いテストとなるよう Docker に対応したウェブサーバを実行します。
次の例は -p
オプションで nginx
コンテナのポート 80 を公開できるようにし、それを docker-sandbox
ホスト上のポート 8000
に割り当てます。
$ docker run -d -p 8000:80 --name webserver kitematic/hello-world-nginx
Unable to find image 'kitematic/hello-world-nginx:latest' locally
latest: Pulling from kitematic/hello-world-nginx
a285d7f063ea: Pull complete
2d7baf27389b: Pull complete
...
Digest: sha256:ec0ca6dcb034916784c988b4f2432716e2e92b995ac606e080c7a54b52b87066
Status: Downloaded newer image for kitematic/hello-world-nginx:latest
942dfb4a0eaae75bf26c9785ade4ff47ceb2ec2a152be82b9d7960e8b5777e65
ウェブブラウザで http://<ホストIP>:8000
を開き、ウェブサーバのホームページを開きます。 ホストIP
の確認は、先ほどの docker-machine ip <マシン名>
コマンドで行いました。 docker run
コマンドを実行すると、指定したポートを開きます。
ステップ5:Machineでドロップレットを削除¶
ホストだけでなく全てのコンテナとイメージを削除するには、マシンを停止するために docker-machine rm
を使います。
$ docker-machine stop docker-sandbox
$ docker-machine rm docker-sandbox
Do you really want to remove "docker-sandbox"? (y/n): y
Successfully removed docker-sandbox
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM
default * virtualbox Running tcp:////xxx.xxx.xx.xxx:xxxx
コマンドを実行後に Digital Ocean コンソールを確認すると、すぐにドロップレットが停止し、削除されるのが分かるでしょう。
Docker Machine は作成したホストは、クラウド・プロバイダのコンソールからも削除できます。ただし Machine は状況が追跡できなくなります。そのため、 docker-machine create
で作成したホストは docker-machine rm
をお使いください。