ミニマムdocker/ecr使用方法メモ
私がミニマムでdocker/docker-compose/ecrを使用した時のメモ
ECRとは
Amazon Elastic Container Registory. コンテナイメージをpush/pullできる。
インフラストラクチャをインストールやスケーリングをすることなくコンテナイメージを Amazon ECR にプッシュし、どの管理ツールを使用してもイメージをプルできます。
dockerを利用するには
コンテナを実際に作って動かすためには、コンテナイメージが必要となる。コンテナイメージをその場で作ることもできるが、一般には、コンテナイメージは"どこか"のリポジトリから取ってくる。
イメージのビルド
Dockerfileを作って、docker build
する。(必ずしもfileでなくても引数にわたすことはできるが、一般的にはDockerfileを作る)
なお、Dockerfileの差分が検出できないと、ビルド時にキャッシュを使ってしまい、まともにビルド処理が行われない場合がある。
タグ付け
単にビルドすると、イメージにタグが付かず、docker-compose等で扱いにくい状態になる。
イメージにタグをつけるには、
docker build -t namaedayo:tagdayo
などのようにするとよい。
namaedayoがイメージ名として扱われ、tagdayoが狭義のタグとして扱われる。
リポジトリ付きのタグ
タグには
repositorydayo/namaedayo:tagdayo
のパターンもある。repositorydayoはリポジトリ名を表す。ECRを指定して
xxxxyyyyzzzz..dkr.ecr.ap-northeast-1.amazonaws.com/namaedayo:tagdayo
などとする事もある。
複数のタグ付け
一つのイメージに複数のタグを付けることもできる。
コンテナの単独起動
コンテナを一つ動かすためには、docker run
すればよい。
コンテナの協調動作
コンテナを協調動作させるためには、docker-compose
を使う。
docker-compose.yml
というファイルを作り、その中にどのイメージがどう動作するかを定義する。詳細は後述。
webアプリコンテナとDBコンテナを協調動作させるためには、docker-composeを使えばよい。
docker-compose up -d
-dを渡さないと、同期で標準出力にログがでてくる。
コンテナの停止(docker-compose down)
docker-compose up -d
で起動した場合は、docker-compose down
で停止およびコンテナの削除ができる。Docker-Desktopの画面を見ていると、コンテナが削除されることを確認できる。
イメージのpull
DockerHub
mysqlのようにDockerHubから取ってこれるイメージの場合には、単に
docker pull mysql:8.0.32
とすることでイメージを取得できる。
ECRのIAM
ECRの場合には、awsクライアントツールを使って、ECRにログインする必要がある。
そのためには、適切なIAMを付ける必要がある。
リソースを指定する必要がない場合には、以下のようなポリシーをIAMに割り当てればよい。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GetAuthorizationToken",
"Effect": "Allow",
"Action": "ecr:GetAuthorizationToken",
"Resource": "*"
},
{
"Sid": "BatchGetImage",
"Effect": "Allow",
"Action": "ecr:BatchGetImage",
"Resource": "*"
},
{
"Sid": "GetDownloadUrlForLayer",
"Effect": "Allow",
"Action": "ecr:GetDownloadUrlForLayer",
"Resource": "*"
}
]
}
ECRから取得する一連のコマンド
aws configure
(適切に設定)
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxyyyyzzzz.dkr.ecr.ap-northeast-1.amazonaws.com
これでECRにログインできる。ログインしたらpullできるようになる。
docker xxxxyyyyzzzz.dkr.ecr.ap-northeast-1.amazonaws.com/namaedayo:tagdayo pull
イメージのpush(ECR)
ECRにpushするには、まずローカルでタグ付けをしている前提で、AWSにログインしてから次のようにすればよい。
docker push xxxxyyyyzzzz.dkr.ecr.ap-northeast-1.amazonaws.com/namaedayo:tagdayo
prune
不要なイメージのキャッシュが残っていたりするので、適宜削除する。
docker builder prune
docker-desktopを使う場合の注意点
PCの起動直後など、docker-desktopを起動しないとバックグラウンドサービスが立ち上がらず、コマンドがエラーになる場合がある。
docker-compose.ymlについて
ポート指定
docker-compose.ymlの中で、開放するポートを選べる。
ホストのIPを渡すのが少し大変
.envで環境変数を定義して、docker-compose.ymlの中などでその変数を参照するようにすればなんとかIPを渡せる。
たとえば、.envでHOST_IP=192.168.0.2
などとしておくと、このHOST_IPをdocker-compose.ymlの中で参照できるので、起動コマンドに含めるなどの対応ができる。
docker-compose.ymlのサンプル
version: "3.9"
services:
app:
image: namaedayo:tagdayo
command: "nanka command dayo ${HOST_IP}"
ports:
- "80:80"
- "443:443"
working_dir: /app/root/dayo
environment:
MYSQL_HOST: mysql
MYSQL_USER: root
MYSQL_PASSWORD: passworddayo
MYSQL_DB: dbdayo
mysql:
image: mysql:8.0.32
volumes:
- app-data:/var/lib/mysql
- ./sql:/sql # 初期化用SQLを配置したフォルダをマウント
environment:
MYSQL_ROOT_PASSWORD: passworddayo
MYSQL_DATABASE: dbdayo
volumes:
app-data:
Discussion