LoginSignup
10
6

More than 5 years have passed since last update.

ecs-cli ベースでイメージを管理する

Last updated at Posted at 2018-06-23

概要

dockerコンテナを管理するコマンドは複数あるが(docker, docker-composeなど)、デプロイ先に AWS ECS/ECR を考えた場合、ecs-cli ベースで管理すると便利そうだとわかった。

利用方法をメモしておく。

ecs-cli のよいところ

  • 基本的には docker-compose と同じコマンド体系
  • 基本的には docker-compose と同じ構成管理ファイル(docker-compose.yml)が使える
  • ECS専用のパラメータは別ファイルとして切り出せる
  • AWSの認証周りの面倒なところをうまいことラップしてくれる

手順

環境変数を設定する

アカウント情報を環境変数として設定する
direnv で自動読み込みされるようにしておく

AWS_ACCESS_KEY_ID=1234xxxxx
AWS_SECRET_ACCESS_KEY=5678xxxxx
AWS_ACCOUNT_ID=08123xxxx
AWS_DEFAULT_REGION=us-east-1
AWS_REGION=us-east-1

AWS_ECR_REPOSITORY=08123xxxx.dkr.ecr.us-east-1.amazonaws.com

プロジェクトの設定を行う

認証情報をプロフィールとして保村する

$ ecs-cli configure profile --access-key $AWS_ACCESS_KEY_ID --secret-key $AWS_SECRET_ACCESS_KEY --profile-name hello-world
INFO[0000] Saved ECS CLI profile configuration hello-world.

~/.ecs/credentials にファイルが作成される

~/.ecs/credentials
$ cat ~/.ecs/credentials
version: v1
default: default
ecs_profiles:
  default:
    aws_access_key_id: 1234xxxxx
    aws_secret_access_key: 5678xxxxx
  hello-world:
    aws_access_key_id: 1234xxxxx
    aws_secret_access_key: 5678xxxxx

direnv で常に環境変数が設定されるならプロフィールの作成は必要ないかも

ECR にログインする

$ $(aws ecr get-login --no-include-email)

ECR にリポジトリを作成する

$ aws ecr create-repository --repository-name hello-world

ビルドの構成ファイルを作成する

FROM ruby:2.5-alpine
MAINTAINER cohakim "cohakim@gmail.com"

WORKDIR /app
ENV RAILS_ENV production

RUN \
  apk upgrade --no-cache \
  && apk add --update --no-cache \
    bash

COPY . /app

RUN chmod a+x entrypoint.sh
RUN ./entrypoint.sh

ENTRYPOINT ["./entrypoint.sh"]
entrypoint.sh
#!/bin/bash

set -e

echo 'hello world'

exec $@
docker-compose.yml
version: '2'
services:
  app:
    build: .
    image: 08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

docker-compose.yml で環境変数を使えたら最高だが、ecs-cli は環境変数を展開してくれないみたい
ECSにデプロイするときに困るのでここでは直接書いている

ビルドする

ecs-cli は build タスクに未対応っぽい
build は docker-compose で行う

$ docker-compose build
...
Successfully built e4879add2b3a
Successfully tagged 08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world:latest

ECR にPushする

ecs-cli push が使える

$ ecs-cli push 08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world
INFO[0000] Getting AWS account ID...
INFO[0001] Tagging image                                 image=hello-world repository=08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world tag=
INFO[0001] Image tagged
INFO[0002] Pushing image                                 repository=08123xxxx.dkr.ecr.us-east-1.amazonaws.com/hello-world tag=
INFO[0006] Image pushed

参考

Amazon ECS コマンドラインリファレンス

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6