Amazon Web Services (AWS) EC2 の例

以下の例では Docker に対応した Amazon Web Services (AWS) EC2 インスタンスを作成します。

ステップ1:AWS にサインアップして証明書を取得

  1. まだ AWS の利用者でなければ、 AWS にサインアップし、EC2 クラウド・コンピュータに対して root アクセスを持つアカウントを作成します。

既に Amazon アカウントをお持ちであれば、自分の root ユーザ・アカウントを利用できます。

  1. IAM (Identity and Access Management) 管理ユーザと管理グループを作成し、リージョンに鍵ペアを関連づけます。

まず、AWS メニューの サービス から IAM を選びます。

AWS 上でマシンを作成するには、2つのパラメータが必要です。

  • AWS アクセスキー
  • AWS シークレットアクセスキー

AWS にある Amazon EC2 でのセットアップ のドキュメントをご覧ください。この中にある「IAM ユーザーを作成する」「キーペアを作成する」の各手順を進めます。

ステップ2:Machine でインスタンスを作成

  1. オプションで AWS 認証用ファイルを作成できます。

~/.aws/credentials ファイルを作成し、AWS 鍵を記述できます。そうしておけば、 docker-machine create コマンドを実行する度に入力する必要はありません。以下が認証用ファイルの例です。

[default]
aws_access_key_id = AKID1234567890
 aws_secret_access_key = MY-SECRET-KEY
  1. docker-machine create コマンドの実行時、 amazonec2 ドライバと鍵と新しいインスタンス名を指定します。

認証用ファイルを使う場合

鍵を認証用ファイルに入れている場合は、次のコマンドを実行すると aws-sandbox という名前のインスタンスを起動します。

$ docker-machine create --driver amazonec2 aws-sandbox

キーをコマンドラインで指定する場合

認証用ファイルを使わない場合は、コマンドラインで --amazonec2-access-key--amazonec2-secret-key を指定します。

$ docker-machine create --driver amazonec2 --amazonec2-access-key AKI******* --amazonec2-secret-key 8T93C*******  aws-sandbox

リージョンの指定

デフォルトでは、ドライバは新しいインスタンスを us-east-1 (North Virginia) リージョンで作成します。別のリージョンで作成するには --amazonec2-region フラグを使います。例えば「aws-01」マシンを us-west-1 (Northern California)で作成するには、次のように実行します。

$ docker-machine create --driver amazonec2 --amazonec2-region us-west-1 aws-01
  1. AWS EC2 ダッシュボードに移動し、新しいインスタンスを確認します。

AWS に IAM 証明書でログインし、EC2 実行中のインスタンスの画面に移動します。

注釈

メニュー右上で対象のリージョンを選択してください。そうすると、インスタンスが見えるでしょう。 docker-machine create 実行時にリージョンを指定しなければ(オプションの --amazonec2-region フラグを使う)、デフォルトでは US East リージョンになります。

  1. コマンド・ターミナル上で docker-machine ls を実行します。
$ docker-machine ls
NAME             ACTIVE   DRIVER         STATE     URL                         SWARM   DOCKER        ERRORS
aws-sandbox      *        amazonec2      Running   tcp://52.90.113.128:2376            v1.10.0
default          -        virtualbox     Running   tcp://192.168.99.100:2376           v1.10.0-rc4
docker-sandbox   -        digitalocean   Running   tcp://104.131.43.236:2376           v1.9.1

 The new aws-sandbox instance is running, and it is the active host as indicated by the asterisk (*). When you create a new machine, your command shell automatically connects it. If for some reason your new machine is not the active host, you’ll need to run docker-machine env aws-sandbox, followed by eval $(docker-machine env aws-sandbox) to connect to it.

新しい aws-sandbox マシンが実行されています。そして、アクティブなホストはアスタリスク(*)印が付いています。新しいマシンを作成すると、コマンド・シェルから自動的に接続できます。何らかの理由により、新しいマシンがアクティブなホストでない場合は docker-machine env aws-sandbox を実行し、反映するためには eval $(docker-machine env aws-sandbox) の実行が必要です。

ステップ3:インスタンス上で Docker コマンドを実行

  1. docker-machine コマンドを使ってリモート・ホストの上方を確認できます。例えば、 docker-machine ip <マシン名> はホスト側の IP アドレスを取得します。より詳しい情報は docker-machine inspect <マシン名> で確認できます。
$ docker-machine ip
192.168.99.100

$ docker-machine inspect aws-sandbox
{
    "ConfigVersion": 3,
    "Driver": {
     "IPAddress": "52.90.113.128",
     "MachineName": "aws-sandbox",
     "SSHUser": "ubuntu",
     "SSHPort": 22,
     ...
  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 コマンドを実行すると、指定したポートを開きます。

ステップ4:Machineでインスタンスを削除

ホストだけでなく全てのコンテナとイメージを削除するには、マシンを停止するために docker-machine rm を使います。

$ docker-machine stop aws-sandbox
$ docker-machine rm aws-sandbox
Do you really want to remove "docker-sandbox"? (y/n): y
Successfully removed aws-sandbox