AWS の ECS+ECR+Fargate の組み合わせの構成でコンテナ環境を作成して実行する手順です。
手順の概要
今回は、以下の手順でコンテナ環境を作成して実行してみます。
Dockerインストール
Docker環境の作成
Dockerイメージの作成
ECRにレポジトリを作成
ECRにDokerイメージをプッシュ
ECS クラスターの作成
ECS クラスターのタスクの定義と実行
タスクの実行
結果確認
Dockerインストール
まずはDockerをインストールします。
■yum-config-managerでDockerレポジトリを追加する
Dockerのレポジトリは以下のURLよりダウンロードします。
https://download.docker.com/linux/centos/docker-ce.repo
[root@CentOS7 ~]# yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo
読み込んだプラグイン:fastestmirror
adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@CentOS7 ~]#
■Dockerをインストールする
[root@CentOS7 ~]# yum install -y docker-ce docker-ce-cli containerd.io
Docker環境の作成
インストールが完了したら環境を設定します。
■Dockerサービスを起動する
[root@CentOS7 ~]# systemctl start docker
[root@CentOS7 ~]#
■Dockerサービスの起動確認をする
[root@CentOS7 ~]# systemctl start docker docker dockert dockeru dockers docker
● docker.service – Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: active (running) since 日 2020-05-24 11:58:53 JST; 6s ago
Docs: https://docs.docker.com
Main PID: 8779 (dockerd)
Tasks: 10
Memory: 40.2M
CGroup: /system.slice/docker.service
mq8779 /usr/bin/dockerd -H fd:// –containerd=/run/containerd/containerd.sock
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.053066870+09:00″ level=info msg=”scheme \”unix\” not register…le=grpc
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.053104500+09:00″ level=info msg=”ccResolverWrapper: sending u…le=grpc
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.053124461+09:00″ level=info msg=”ClientConn switching balance…le=grpc
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.107081181+09:00″ level=info msg=”Loading containers: start.”
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.293853868+09:00″ level=info msg=”Default bridge (docker0) is …ddress”
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.362063976+09:00″ level=info msg=”Loading containers: done.”
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.384658586+09:00″ level=info msg=”Docker daemon” commit=9d9883…19.03.9
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.384789876+09:00″ level=info msg=”Daemon has completed initialization”
5月 24 11:58:53 CentOS7 dockerd[8779]: time=”2020-05-24T11:58:53.410489881+09:00″ level=info msg=”API listen on /var/run/docker.sock”
5月 24 11:58:53 CentOS7 systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
[root@CentOS7 ~]#
■Dockerサービスの自動起動を設定する
[root@CentOS7 ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@CentOS7 ~]#
■Dockerのバージョンを確認する
[root@CentOS7 ~]# docker –version
Docker version 19.03.9, build 9d988398e7
[root@CentOS7 ~]#
Dockerイメージの作成
Dockerイメージを作成します。
■CentOS7をPullする
[root@CentOS7 ~]# docker pull centos:centos7
■PullしたDockerイメージを確認する
[root@CentOS7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 b5b4d78bc90c 2 weeks ago 203MB
[root@CentOS7 ~]#
■alpineをpullする
[root@CentOS7 ~]# docker pull alpine
■PullしたDockerイメージを確認する
[root@CentOS7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos7 b5b4d78bc90c 2 weeks ago 203MB
alpine latest f70734b6a266 4 weeks ago 5.61MB
[root@CentOS7 ~]#
Docker イメージを削除するコマンド
Docker コマンドが増えてくると管理しづらくなってくるので、Docker イメージを削除します。
■Docker イメージを一括して削除する
[root@CentOS7 ~]# docker images ← イメージを確認する。
REPOSITORY TAG IMAGE ID CREATED SIZE
2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7wget latest 7cd8889f9d55 5 hours ago 247MB
centos7wget latest 7cd8889f9d55 5 hours ago 247MB
centos latest 831691599b88 6 weeks ago 215MB
2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7python latest db9c308b1ebc 6 weeks ago 271MB
centos7python latest db9c308b1ebc 6 weeks ago 271MB
centos 470671670cac 6 months ago 237MB
centos 7.5.1804 cf49811e3cdb 16 months ago 200MB
[root@CentOS7 ~]#
[root@CentOS7 ~]# docker rmi $(docker images -q) -f ← Dokcer イメージを一括して削除する。
Untagged: 2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7wget:latest
Untagged: 2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7wget@sha256:a4eb3e98531a148633fb93019cfb5d5f7454a5f32ff671d23032f2a1a10b1a1c
Untagged: centos7wget:latest
Deleted: sha256:7cd8889f9d5549928a56043b6e64dbee707223a3e4c07eee051083cb953f5a77
Deleted: sha256:b5477ac889121ab78a41fddc5a8d548021cb92ed2601ce9d8f5337b7e1ada902
Untagged: centos:latest
Untagged: centos@sha256:4062bbdd1bb0801b0aa38e0f83dece70fb7a5e9bce223423a68de2d8b784b43b
Deleted: sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f
Deleted: sha256:eb29745b8228e1e97c01b1d5c2554a319c00a94d8dd5746a3904222ad65a13f8
Untagged: 2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7python:latest
Untagged: 2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7python@sha256:5a01577322b70afe7f9eaee69a1111ee3a02c7eed53a2bf14f346e64cddcd80a
Untagged: centos7python:latest
Deleted: sha256:db9c308b1ebcdcb56f2ee8746e219326238a0a5db16f4bde60a8c714f0fef7f6
Deleted: sha256:4b6be2d143165a1cb1a53ca67bf50ce90c9d7c87e003e62b0a30e5e27556e62e
Untagged: centos@sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Deleted: sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee
Deleted: sha256:0683de2821778aa9546bf3d3e6944df779daba1582631b7ea3517bb36f9e4007
Error: No such image: 7cd8889f9d55
Error: No such image: db9c308b1ebc
[root@CentOS7 ~]# docker images ← 再度イメージを確認するとすべて削除されている。
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@CentOS7 ~]#
プログラムをデプロイする場合
コンテナ環境で、プログラムをデプロイした Docker イメージを作成し、作成した Docker イメージを Amazon ECR(Elastic Container Registry)にプッシュします。
■イメージを確認する
[root@CentOS7 python]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@CentOS7 python]#
■CentOS7 の Docker イメージを Pull する
[root@CentOS7 python]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
[root@CentOS7 python]#
■コンテナイメージを確認する
[root@CentOS7 python]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 470671670cac 4 months ago 237MB
[root@CentOS7 python]#
■プルしたDockerイメージをコンテナ上でシェルを実行する
[root@CentOS7 ~]# docker run -i -t centos /bin/bash
[root@0fc43e51f03f /]#
■プルしたDockerイメージをコンテナ上でシェルを実行する
[root@0fc43e51f03f /]# yum install wget
■動作確認をする
[root@0fc43e51f03f /]# wget
wget: missing URL
Usage: wget [OPTION]… [URL]…
Try `wget –help’ for more options.
[root@0fc43e51f03f /]#
■コンテナを終了する
[root@0fc43e51f03f /]# exit
exit
[root@CentOS7 ~]#
■コンテナを確認する
[root@CentOS7 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0fc43e51f03f centos “/bin/bash” 15 hours ago Exited (1) 15 hours ago pedantic_feynman
902d19175daa centos:7.5.1804 “/bin/bash” 13 days ago Exited (0) 13 days ago test01
c2523674d92f 470671670cac “/bin/bash” 6 weeks ago Exited (0) 6 weeks ago goofy_borg
1c4542c511c2 470671670cac “/bin/bash” 6 weeks ago Exited (0) 6 weeks ago gifted_elgamal
[root@CentOS7 ~]#
■コンテナよりDockerイメージを作成する
[root@CentOS7 ~]# docker commit 0fc43e51f03f centos7wget
sha256:7cd8889f9d5549928a56043b6e64dbee707223a3e4c07eee051083cb953f5a77
[root@CentOS7 ~]#
■コンテナイメージを確認する
[root@CentOS7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos7wget latest 7cd8889f9d55 44 seconds ago 247MB
centos latest 831691599b88 6 weeks ago 215MB
2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7python latest db9c308b1ebc 6 weeks ago 271MB
centos7python latest db9c308b1ebc 6 weeks ago 271MB
centos 470671670cac 6 months ago 237MB
centos 7.5.1804 cf49811e3cdb 16 months ago 200MB
[root@CentOS7 ~]#
ECRにレポジトリを作成
次に ECR(Elastic Container Registry )を作成します。
「リポジトリを作成」 ボタンをクリックします。
「リポジトリを作成」 画面で「リポジトリ名」 を設定し、「リポジトリを作成」 ボタンをクリックします。
リポジトリが作成されていることを確認します。
ECRにDokerイメージをプッシュ
ECR に Docker イメージをプッシュします。
先ほど作成したリポジトリをクリックします。
「プッシュコマンドの表示」 ボタンをクリックします。
プッシュコマンドの手順が表示されるので、この手順通りにコンテナイメージをレポジトリにプッシュします。
1. AWS CLI コマンドで認証トークンを取得し、レジストリに対して Docker クライアントを認証します。
[root@CentOS7 ~]# aws ecr get-login-password –region ap-northeast-1 | docker login –username AWS –password-stdin 2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@CentOS7 ~]#
2. Docker イメージはすでに作成済みなので、リポジトリに Docker イメージをプッシュできるように、Docker イメージにタグを付けます。
[root@CentOS7 ~]# docker tag centos7wget:latest 2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7wget:latest
[root@CentOS7 ~]#
3. Docker イメージを確認します。
[root@CentOS7 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7wget latest 7cd8889f9d55 29 minutes ago 247MB
centos7wget latest 7cd8889f9d55 29 minutes ago 247MB
centos latest 831691599b88 6 weeks ago 215MB
2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7python latest db9c308b1ebc 6 weeks ago 271MB
centos7python latest db9c308b1ebc 6 weeks ago 271MB
centos 470671670cac 6 months ago 237MB
centos 7.5.1804 cf49811e3cdb 16 months ago 200MB
[root@CentOS7 ~]#
4. 以下のコマンドを実行して、新しく作成したリポジトリに Docker イメージをプッシュします。
[root@CentOS7 ~]# docker push 2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7wget:latest
The push refers to repository [2xxxxxxxxxxx4.dkr.ecr.ap-northeast-1.amazonaws.com/centos7wget]
c0820e9c6301: Pushed
eb29745b8228: Pushed
latest: digest: sha256:a4eb3e98531a148633fb93019cfb5d5f7454a5f32ff671d23032f2a1a10b1a1c size: 741
[root@CentOS7 ~]#
5. リポジトリに Docker イメージがプッシュされたことを確認します。
ECS クラスターの作成
ECS クラスターを作成します。
左側ペインより「クラスター」 をクリックします。
「クラスターの作成」 ボタンをクリックします。
クラスターテンプレートの選択画面で「ネットワーキングのみ」 を選択し、「次のステップ」 ボタンをクリックします。
クラスターの設定画面で「クラスター名」 を設定し「CloudWatch Container Insights」 の設定をして「作成」 ボタンをクリックします。
起動ステータスが完了したことを確認して「クラスターの表示」 ボタンをクリックします。
ECS クラスターのタスクの定義と実行
次に ECS クラスターのタスクの定義と実行です。
最初にタスクを定義します。
左側ペインより「タスク定義」 をクリックします。
タスク定義の画面で「新しいタスク定義の作成」 ボタンをクリックします。
起動タイプの互換性の選択画面で「FARGATE」 を選択して「次のステップ」 ボタンをクリックします。
タスクとコンテナの定義の設定で「タスク定義名」 を入力して下にスクロールします。
タスクの実行 IAM ロールで「タスク実行ロール」 を選択します。(下図はデフォルトの ecsTaskExecutionRole を選択しています。)
タスクサイズで「タスクメモリ」 と「タスク CPU」 を設定して下にスクロールします。
コンテナの定義で「コンテナの追加」 ボタンをクリックします。
コンテナの追加画面が表示されるので、「コンテナ名」 と「イメージ」 を入力します。
イメージは ECR のリポジトリの URI を入力します。
※リポジトリの URI
必要に応じて「ポートマッピング」 の設定や「詳細コンテナ設定」 で設定します。
環境を設定します。
下図は、コンテナにインストールした wget コマンドを実行しています。
必要に応じて「コンテナタイムアウト」 や「ネットワーク設定」 をします。
必要に応じて「ストレージとログ」 の設定をします。
必要に応じて「リソースの制限」 や「DOCKERラベル」 の設定をして「追加」 ボタンをクリックします。
下図のようにコンテナが追加されていることを確認します。
必要に応じて設定し、下にスクロールします。
各種設定が完了したら「作成」 ボタンをクリックします。
下図のようにタスク定義が完了したら「タスク定義の表示」 ボタンをクリックします。
タスク定義が作成されていることを確認します。
タスクの実行
タスクを作成したらタスクを実行します。
タスク定義の「アクション」 ‐「タスクの実行」 をクリックします。
タスクの実行画面で下図のように各種設定します。
コンテナを実行する「VPC」 や「サブネット」 を選択して「タスクの実行」 ボタンをクリックします。
タスクの状態が「RUNNING」 になっていることを確認します。
しばらくしたらタスクの状態が「STOPPED」 になっていることを確認します。
結果確認
タスクの実行が完了したら、タスクの実行結果を確認します。
「STOPPED」になっているタスクをクリックします。
コンテナの名前の左側にある三角「▲」をクリックして展開します。
ログ設定の「CloudWatch のログを表示」をクリックします。
下図のようにログが出力されることを確認します。
タスク定義を更新する方法
上記でタスクを定義してタスクを実行してきましたが、タスク定義を更新したい場合(修正したい場合)の手順です。
更新したい(修正したい)タスク定義をクリックします。
更新したいタスク定義をチェックして「新しいリビジョンの作成」ボタンをクリックします。
更新したいコンテナをクリックします。
更新したら「更新」ボタンをクリックします。
最後に「作成」ボタンをクリックします。
タスクを作成したらタスクを実行します。
タスク定義の「アクション」 ‐「タスクの実行」 をクリックします。
タスクの実行画面で下図のように各種設定します。
コンテナを実行する「VPC」 や「サブネット」 を選択して「タスクの実行」 ボタンをクリックします。
コメント