docker ecs
なるものが発表されて話題になってたので試してみたときの備忘録です。
GitHub にサンプルがあるので、まずは fork して試してみました。
Docker Edge
Get Edge を取得してインストールします。
これ説明をちゃんと読まずに入れた後に気がついたのですが、ローカルのコンテナイメージが全部消えてしまいます。
別の作業をしようとしたときに、「あれ、イメージがない...」となって気が付きました。
サンプル試す
GitHub サンプルローカル起動
GitHub のサンプルを試してみます。
$ git clone git@github.com:omuron/ecs-plugin.git $ cd ecs-plugin/example/ $ docker-compose up ERROR: no such image: <<<your docker hub user name>>>/timestamper: invalid reference format
とりあえず、サンプルをローカルで起動しようとすると、上記のエラーが発生します。
そのため docker-compose.yml
の 5,6行目をコメントアウトして起動を確認しました。
無事に起動できれば、以下の URL で「Hello, Docker Folks!」という画面が確認できます。
http://localhost:5000/
docker ecs コマンド思考錯誤
引き続き、 docker ecs
コマンドを試しました。
$ docker ecs setup Enter context name: aws ✔ docker-ecs-user ? Enter region: ap-northeast-1 ? Enter credentials? [y/N] N this tool requires the "new ARN resource ID format"
上記のエラーが発生...
ここでどう直せばいいかわからず解決できなかったところ、ハマコーさんブログで解説記事がでました!
上記のブログより、以下のコマンドで解決ができることがわかりました。
aws ecs put-account-setting-default --name awsvpcTrunking --value enabled aws ecs put-account-setting-default --name containerInsights --value enabled aws ecs put-account-setting-default --name containerInstanceLongArnFormat --value enabled aws ecs put-account-setting-default --name serviceLongArnFormat --value enabled aws ecs put-account-setting-default --name taskLongArnFormat --value enabled
上記設定後、無事 docker ecs setup
が完了し、 context
に追加されていることが確認できます。
$ docker context ls NAME TYPE DESCRIPTION DOCKER ENDPOINT KUBERNETES ENDPOINT ORCHESTRATOR aws aws default * moby Current DOCKER_HOST based configuration unix:///var/run/docker.sock swarm
ここからは、ハマコーさんの神記事があるので、真似して 参考にして進めました。
docker hub アカウント設定
以下のコマンドでログイン。
$ docker login --username omuron
README も読みながら、アクセストークンの設定を aws シークレットマネージャーに行う。
$ docker ecs secret create dockerhubAccessToken --username omuron --password XXXXX can't use "default" with ECS command because it is not an AWS context
コンテキストを切り替えないとダメでしたので、切り替えて設定。
$ docker context use aws aws $ docker ecs secret create dockerhubAccessToken --username omuron --password XXXXX arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:dockerhubAccessToken-45Y3pu
上記の arn
を docker-compose.yml
の 5行目に設定を行う。
6行目は、docker hub のアカウント omuron
を設定。
ここで作成したリソースは以下の URL に当たるマネジメントコンソールで確認可能です。
https://ap-northeast-1.console.aws.amazon.com/secretsmanager/home?region=ap-northeast-1#/listSecrets
起動確認
事前準備が完了したので、以下のコマンドで起動可能。
$ docker ecs compose up
CloudFormation を確認すると example
という名前のスタックが作成されて、関係リソースが構築されているのが確認できる。
EC2 内のロードバランサーメニューを確認すると、新たにロードバランサーが作成されているので、ロードバランサーの DNS 名をコピーして、ポート 5000 にアクセスすると、ローカル起動と同様のサイトが確認できました。
http://exampleloadbalancer-999999999999.elb.ap-northeast-1.amazonaws.com:5000/
後始末
docker compose を落とすと削除できます。
$ docker ecs compose down
所感
最後までたどり着けたのは、ハマコーさんブログのおかげです。 本当に、ECS 含め参考になることが多いので助かります。
先日出た aws copilot
に続き、 ECS を簡単に試す手段が増えてきていいですね。
CoudFormation 含め、ECS 全般を理解してないと難しい部分もありますが、ある程度把握した上で利用するととても助かるツールになりそうです。
あと、アプリを入れるときには英語でもちゃんと説明を読みましょう。 読まずに入れると、環境を壊します... 環境を壊すのがいやで、Docker 上に構築するのを基本にしてたのに、Docker 環境をふっとばしてしまいました。