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
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 コマンドを実行¶
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 を公開できるようにし、それを 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
次はどちらへ¶
参考
- Amazon Web Services (AWS) EC2 example
- https://docs.docker.com/machine/examples/aws/