Amazon Web Services (AWS) EC2 の例¶
以下の例では Docker に対応した Amazon Web Services (AWS) EC2 インスタンスを作成します。
ステップ1:AWS にサインアップして証明書を取得¶
まだ AWS の利用者でなければ、 AWS にサインアップし、EC2 クラウド・コンピュータに対して root アクセスを持つアカウントを作成します。
既に Amazon アカウントをお持ちであれば、自分の root ユーザ・アカウントを利用できます。
IAM (Identity and Access Management) 管理ユーザと管理グループを作成し、リージョンに鍵ペアを関連づけます。
まず、AWS メニューの サービス から IAM を選びます。
AWS 上でマシンを作成するには、2つのパラメータが必要です。
AWS アクセスキー
AWS シークレットアクセスキー
AWS にある Amazon EC2 でのセットアップ のドキュメントをご覧ください。この中にある「IAM ユーザーを作成する」「キーペアを作成する」の各手順を進めます。
ステップ2:Machine でインスタンスを作成¶
オプションで AWS 認証用ファイルを作成できます。
~/.aws/credentials
ファイルを作成し、AWS 鍵を記述できます。そうしておけば、 docker-machine create
コマンドを実行する度に入力する必要はありません。以下が認証用ファイルの例です。
[default]
aws_access_key_id = AKID1234567890
aws_secret_access_key = MY-SECRET-KEY
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
AWS EC2 ダッシュボードに移動し、新しいインスタンスを確認します。
AWS に IAM 証明書でログインし、EC2 実行中のインスタンスの画面に移動します。
注釈
メニュー右上で対象のリージョンを選択してください。そうすると、インスタンスが見えるでしょう。 docker-machine create
実行時にリージョンを指定しなければ(オプションの --amazonec2-region
フラグを使う)、デフォルトでは US East リージョンになります。
コマンド・ターミナル上で
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
aws-sandbox - digitalocean Running tcp://104.131.43.236:2376 v1.9.1
新しい aws-sandbox
マシンが実行されています。そして、アクティブなホストはアスタリスク(*)印が付いています。新しいマシンを作成すると、コマンド・シェルから自動的に接続できます。何らかの理由により、新しいマシンがアクティブなホストでない場合は docker-machine env aws-sandbox
を実行し、反映するためには eval $(docker-machine env aws-sandbox)
の実行が必要です。
ステップ3:インスタンス上で Docker コマンドを実行¶
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,
...
Docker Engine が正しくインストールされたかどうか確認するため、
docker
コマンドを実行します。
docker run hello-world
のような基本的なコマンドを、新しいリモート・マシン上で実行します。あるいは、より面白いテストとなるよう Docker に対応したウェブサーバを実行します。
次の例は -p
オプションで nginx
コンテナのポート 80 を公開できるようにし、それを aws-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 "aws-sandbox"? (y/n): y
Successfully removed aws-sandbox