ECRにDockerイメージをプッシュして、ECSのクラスターをつくって、EC2にコンテナを起動させる為のメモ

ECRにDockerイメージをプッシュして、ECSのクラスターをつくって、EC2にコンテナを起動させる為のメモ

2020/08/05
Docker

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から、リポジトリを作成する。

リポジトリが作成されます。
次に「プッシュコマンドの表示」を押します。

プッシュコマンドを順番に実行していく。

  1. 認証トークンを取得し、レジストリに対して 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
  1. 以下のコマンドを使用して、Docker イメージを構築します。
docker build -t amazon-ecs-sample .
  1. 構築が完了したら、このリポジトリにイメージをプッシュできるように、イメージにタグを付けます。
docker tag amazon-ecs-sample:latest XXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/amazon-ecs-sample:latest
  1. 以下のコマンドを実行して、新しく作成した 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でアクセスしてみると、以下の画面が表示されます。

なにかお手伝いできることがあればご連絡ください。

お問い合わせはこちらから

※Googleフォームが表示されます