【AWS】【Docker】ECS+ECR+Fargateの構成でコンテナ環境を作成して実行する手順

AWS の ECS+ECR+Fargate の組み合わせの構成でコンテナ環境を作成して実行する手順です。

 

 

 

手順の概要

今回は、以下の手順でコンテナ環境を作成して実行してみます。

  1. Dockerインストール
  2. Docker環境の作成
  3. Dockerイメージの作成
  4. ECRにレポジトリを作成
  5. ECRにDokerイメージをプッシュ
  6. ECS クラスターの作成
  7. ECS クラスターのタスクの定義と実行
  8. タスクの実行
  9. 結果確認

 

 

 

 

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」「サブネット」を選択して「タスクの実行」ボタンをクリックします。

 

 

 

 

 

 

 

 

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

AlphaOmega Captcha Medica  –  What Do You See?
     
 

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください