ECRにDockerイメージをプッシュして、ECSのクラスターをつくって、EC2にコンテナを起動させる為のメモ
ECRにDockerイメージをプッシュして、ECSのクラスターをつくって、EC2にコンテナを起動させる為のメモです。
自分用のメモなのであまり参考にならないと思います。
ローカルで簡単なdockerコンテナを起動する
サンプルファイルをcloneする。
$ git clone https://github.com/aws-samples/ecs-demo-php-simple-app
cloneしたフォルダに移動。
$ cd ecs-demo-php-simple-app
dockerイメージを作成。
$ docker build -t amazon-ecs-sample .
コンテナを起動。
$ docker run -d -p 80:80 --name amazon-ecs-sample amazon-ecs-sample:latest
http://localhost/
でアクセス。
ECRにdockerイメージをpush
AWSコンソールのECS > ECRから、リポジトリを作成する。
リポジトリが作成されます。
次に「プッシュコマンドの表示」を押します。
プッシュコマンドを順番に実行していく。
- 認証トークンを取得し、レジストリに対して Docker クライアントを認証します。 AWS CLI を使用します。
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin XXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com
- 以下のコマンドを使用して、Docker イメージを構築します。
docker build -t amazon-ecs-sample .
- 構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます。
docker tag amazon-ecs-sample:latest XXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-ecs-sample:latest
- 以下のコマンドを実行して、新しく作成した AWS リポジトリにこのイメージをプッシュします。
docker push XXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-ecs-sample:latest
リポジトリ内にイメージが作成される。
タスクを定義する
EC2でコンテナを起動させるにはタスクを定義する必要があります。
タスクとは複数のコンテナをグループにしたものです。
docker-compose.ymlに似ている。
起動するコンテナが1つでも複数でも定義が必要になる。
タスクはjsonファイルで登録することができるので、以下のサンプルを利用します。 https://github.com/aws-samples/ecs-demo-php-simple-app/blob/master/simple-app-task-def.json
◎ simple-app-task-def.json
{ "family": "console-sample-app", "volumes": [ { "name": "my-vol", "host": {} } ], "containerDefinitions": [ { "environment": [], "name": "simple-app", "image": "{ECRにアップロードしたイメージ}", "cpu": 10, "memory": 500, "portMappings": [ { "containerPort": 80, "hostPort": 80 } ], "mountPoints": [ { "sourceVolume": "my-vol", "containerPath": "/var/www/my-vol" } ], "entryPoint": [ "/usr/sbin/apache2", "-D", "FOREGROUND" ], "essential": true }, { "name": "busybox", "image": "busybox", "cpu": 10, "memory": 500, "volumesFrom": [ { "sourceContainer": "simple-app" } ], "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"while true; do /bin/date > /var/www/my-vol/date; sleep 1; done\"" ], "essential": false } ] }
タスクを登録する。
aws ecs register-task-definition --cli-input-json file://simple-app-task-def.json
"family": "console-sample-app"
に定義したconsole-sample-app
というタスクが作成されます。
クラスターを作成
クラスターとは、タスクを配置するEC2インスタンス群のこと。タスクの実行環境になります。
イメージとしてはこんな感じ(自信なし)??
クラスターの作成手順
ECS > クラスターから「クラスターを作成」を押す。
「EC2 Linux + ネットワーキング」を選択して「次のステップ」を押す。
とりあえず以下の設定して「作成」を押す。
項目 | 値 |
---|---|
クラスター名 | sample-cluster |
EC2 インスタンスタイプ | t2.micro |
インスタンス数 | 2 |
キーペア | 作成したもの |
クラスターが作成される。
クラスターでタスクを実行
タブの「タスク」から「新しいタスクの実行」を押す。
以下の設定をして「タスクの実行」を押す。
タスクが実行されインスタンスが作成されます。
インスタンスのパブリックDNSでアクセスしてみると、以下の画面が表示されます。