Digital Ocean の例

以下の例では Docker に対応した Digital Ocean ドロップレット(クラウド・ホスト)を作成します。

ステップ1:Digital Ocean アカウントの作成

アカウントの取得がまだであれば、 Digital Ocean 上にアカウントを作成し、それからログインします。

ステップ2:自分のアクセス・トークンを生成

アクセス・トークンを生成します。

  1. Digital Ocean 管理コンソールに移動し、ページ上方にある API をクリックします。
  1. Generate New Token (新しいトークンの生成)をクリックして、トークンの生成に進みます。
  1. トークン名を指定し(例「machine」)、 Write (Optional) にチェックが入っているのを確認してから Generate Token (トークン生成)をクリックします。
  1. 生成された長いバイナリの文字列を取得し(クリップボードにコピーします)、どこか安全な場所に保管します。

これが次のクラウド・サーバの作成に必要となる、個人のアクセス・トークンです。

ステップ3:Machineを使ってドロップレットを作成

  1. 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 認証を使います。

  1. Digital Ocean コンソールに移動し、新しいドロップレットの情報を確認します。
  1. コマンド・ターミナル上で 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 コマンドを実行

  1. 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": "",
    ...
  1. 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 をお使いください。