LoginSignup
7
10

More than 5 years have passed since last update.

DockerをAWS ECSで運用する。

Posted at

はじめに

 ホスト側(ローカルマシン上)に作成したDockerイメージを
 AWS ECSにデプロイを行い、ブラウザに出力("Hello Docker")するまでの手順を記載します。
 ※ マシンのOSのバージョンは、macOS High Sierra 10.13.4です。

前提条件

 (1) AWS アカウントの作成
  以下のサイトで、事前にAWS アカウントを作成して下さい。
  https://aws.amazon.com/jp/register-flow/
 (2) ローカル環境にDockerイメージ、コンテナを構築
  初めて構築される方は、参考情報(Dockerイメージ、コンテナを構築)を参考下さい。

1. AWS CLIのインストール

1-1. pip3の最新化

 ターミナルを開き、「pip3 install --upgrade pip」を実行します。

$ pip3 install --upgrade pip
Requirement already up-to-date: pip in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (10.0.1)

1-2. awscliのインストール

 ターミナルで、「pip3 install awscli」を実行します。

$ pip3 install awscli
Collecting awscli
  Downloading https://files.pythonhosted.org/packages/80/2b/ed30c7941731231afb7d3e97368accd2319047123c75fa7dd043ca39be04/awscli-1.15.59-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 5.3MB/s 
Requirement already satisfied: docutils>=0.10 in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from awscli) (0.14)
Requirement already satisfied: rsa<=3.5.0,>=3.1.2 in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from awscli) (3.4.2)
Requirement already satisfied: s3transfer<0.2.0,>=0.1.12 in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from awscli) (0.1.13)
Requirement already satisfied: PyYAML<=3.13,>=3.10 in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from awscli) (3.12)
Collecting botocore==1.10.58 (from awscli)
  Downloading https://files.pythonhosted.org/packages/cb/6e/4d961f0c98007ba077a64626f4e0056e5351cca54653b15d12bb03c32110/botocore-1.10.58-py2.py3-none-any.whl (4.4MB)
    100% |████████████████████████████████| 4.4MB 3.9MB/s 
Requirement already satisfied: colorama<=0.3.9,>=0.2.5 in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from awscli) (0.3.9)
Requirement already satisfied: pyasn1>=0.1.3 in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from rsa<=3.5.0,>=3.1.2->awscli) (0.3.2)
Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from botocore==1.10.58->awscli) (0.9.3)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1; python_version >= "2.7" in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from botocore==1.10.58->awscli) (2.6.0)
Requirement already satisfied: six>=1.5 in /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages (from python-dateutil<3.0.0,>=2.1; python_version >= "2.7"->botocore==1.10.58->awscli) (1.10.0)
Installing collected packages: botocore, awscli
  Found existing installation: botocore 1.10.48
    Uninstalling botocore-1.10.48:
      Successfully uninstalled botocore-1.10.48
Successfully installed awscli-1.15.59 botocore-1.10.58

 ※ 以下のエラーが発生した場合
  pyasn1-modules 0.0.11 has requirement pyasn1==0.3.2, but you'll have pyasn1 0.3.3 which is incompatible.

  ターミナルで、以下のコマンドを実行し、pyasn1のバージョンを0.3.2に指定します。
  pip3 install -U pyasn1==0.3.2 pyasn1-modules==0.0.11

1-3. 確認

 ターミナルで、「aws --version」を実行します。
 以下のように出力されていれば、成功です。

$ aws --version
aws-cli/1.15.59 Python/3.6.0 Darwin/17.5.0 botocore/1.10.58

2. IAM ユーザーの作成

 (1) AWS のコンソールにログイン
 (2) IAM サービスにアクセス
 (3) サイドメニューから「ユーザー」を押下
 (4) 「ユーザーを追加」ボタンを押下
  user01.png

 (5) 必須情報の入力
  ・任意のユーザー名を入力します。
  ・アクセスの種類で「プログラムによるアクセス」にチェックを入れます。
  user01.png

 (6) 「次のステップ:アクセス制限」ボタンを押下
 (7) 「既存のポリシーを直接アタッチ」を押下
  user03.png

 (8) 以下に示す項目をチェック
  AmazonEC2FullAccess
  AmazonEC2ContainerRegistryFullAccess
  AdministratorAccess
  AmazonECS_FullAccess
  AmazonEC2ContainerServiceFullAccess
  AmazonEC2ContainerServiceforEC2Role
  AmazonEC2ContainerServiceRole

 (9) 「次のステップ:確認」ボタンを押下
 (10) 「ユーザーの作成」ボタンを押下
 (11) 「.csvのダウンロード」ボタンを押下し、ファイルをダウンロード
  ※ .csvには、アクセスに関わる情報が記載されています。
 (12) 「閉じる」ボタンを押下

3. 認証情報(アクセスキー)の作成と設定

3-1. 認証情報(AWS)の設定

 (1) ターミナルで、「aws configure」を実行
 (2) 2.で取得した.csvに記載されている「Access key ID」を入力
 (3) 2.で取得した.csvに記載されている「Secret access key」を入力
 (4) 東京リージョンを入力
  ※ ap-northeast-1が東京リージョンを指します。
 (5) JSONを入力

3-2. 確認

 ターミナルで、「aws configure list」を実行します。
 以下のように出力されていれば、成功です。

$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************LLFQ shared-credentials-file    
secret_key     ****************aE5A shared-credentials-file    
    region           ap-northeast-1      config-file    ~/.aws/config

4. ECSリポジトリの作成と設定

4-1. リポジトリの設定

 (1) AWS のコンソールにログイン
 (2) コンソール右上のリージョンを「東京」に設定
 (3) Elastic Container Service サービスにアクセス
 (4) サイドメニューから「リポジトリ」を押下
 (5) 「今すぐ始める」ボタンを押下
  rep01.png
 (6) 必須情報の入力
  ・リポジトリ名を入力します。
   ここでは、「php-apache-ecs-rep」を入力しました。
  rep02.png

 (7) 「次のステップ」ボタンを押下

4-2. Dockerイメージの構築、タグ付け、プッシュ

 コマンドが表示されるので、上から順番に実行します。
 (1) Elastic Container Registryに対して、Docker クライアントからログイン
  表示されているコマンドの 1)、2) を実行します。
 (2) Dockerイメージを構築
  表示されているコマンドの 3) を実行します。
  ※ あらかじめ作成しておいた「Dockerfile」が配置されているパスを指定して下さい。
   ここでは、参考情報(Dockerイメージ、コンテナを構築)で作成した「Dockerfile」のパスを指定します。
  ※ 実行後、Dockerイメージの確認を行います。
   以下のように出力されていれば、成功です。

$ docker build -t php-apache-ecs-rep .
Sending build context to Docker daemon  10.75kB
Step 1/1 : FROM php:7.2.7-apache
 ---> c2700d1900ac
Successfully built c2700d1900ac
Successfully tagged php-apache-ecs-rep:latest
$ docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
php-apache-ecs-rep   latest              c2700d1900ac        7 days ago          377MB
php                  7.2.7-apache        c2700d1900ac        7 days ago          377MB
php_apache_image     ver001              c2700d1900ac        7 days ago          377MB 

 (3) Dockerイメージにタグ付け。
  表示されているコマンドの 4) を実行します。
 (4) AWS リポジトリに作成したDockerイメージをプッシュ
  表示されているコマンドの 5) を実行します。
 (5) 「完了」ボタンを押下

5. タスク定義

 (1) Elastic Container Service サービスにアクセス
 (2) サイドメニューから「タスク定義」を押下
 (3) 「新しいタスク定義の作成」ボタンを押下
  task01.png
 (4) 起動タイプに「EC2」を選択し、「次のステップ」ボタンを押下
 (5) 必要な情報の入力
  ・ タスク定義名を入力します。
   ここでは、「php-apache-ecs-taskdef」を入力しました。
 (6) 「コンテナの追加」ボタンを押下
  ・コンテナ名を入力します。
   ここでは、「php-apache-ecs-container」を入力しました。
  ・イメージを入力します。
   ※ 4-2.(3)でタグ付けした名前を指定します。
  ・メモリ制限(MB)に「128」を入力します。
  ・ポートマッピングのホストポート、コンテナポートにそれぞれ「80」を入力します。
  ・CPU ユニット数に「1」を入力します。
 (7) 「追加」ボタンを押下
 (8) 「作成」ボタンを押下

6. クラスター

 (1) Elastic Container Service サービスにアクセス
 (2) サイドメニューから「クラスター」を押下
 (3) 「クラスターの作成」ボタンを押下
  cluster01.png

 (4) 「EC2 Linux + ネットワーキング」を選択し、「次のステップ」を押下
 (5) クラスター名を入力し、「作成」ボタンを押下(その他項目はデフォルトのまま)
  ここでは、「php-apache-ecs-cluster」を入力しました。

7. サービス

 (1) Elastic Container Service サービスにアクセス
 (2) サイドメニューから「クラスター」を押下
 (3) 作成したクラスター名を押下
  cluster02.png

(4) 「サービス」タブから「作成」ボタンを押下
  cluster03.png

 (5) 必要な情報の入力
  ・ 起動タイプに「EC2」を選択します。
  ・ サービス名を入力します。
   ここでは、「php-apache-ecs-service」を入力しました。
  ・ タスクの数に「1」を入力しました。
 (6) 「次のステップ」ボタンを押下
 (7) 必要な情報の入力
  ・ サブネットにをプルダウンから選択します。
  ・ ELB タイプに「なし」を選択します。
 (8) 「次のステップ」ボタンを押下
 (9) 「次のステップ」ボタンを押下
 (10) 「サービスの作成」ボタンを押下

8. 動作確認

 パブリックDNSまたはパブリックIPをブラウザで開き、
 “Hello Docker”と表示される事を確認して下さい。
 ※ クラスター → 「ECS インスタンス」タブ → コンテナインスタンスを開くと、確認できます。

参考情報(Dockerイメージ、コンテナを構築)

 (1) 作業ディレクトリとファイルの準備
  (1)-1 ディレクトリとファイルは以下のような構成となります。

$ tree php_apache
php_apache
├── Dockerfile
└── html
    └── index.php

1 directory, 2 files

  (1)-2 各ファイルの中身を以下に示します。

Dockerfile
FROM php:7.2.7-apache
COPY ./html/index.php /var/www/html/
index.php
<?php echo 'Hello Docker'; ?>

 (2) Dockerイメージのビルド
  ターミナルで、以下のコマンドを実行します。
  ※ 「Dockerfile」ファイルが配置されているパスで実行して下さい。

$ docker build ./ -t php_apache_image:ver001
Sending build context to Docker daemon  10.75kB
Step 1/2 : FROM php:7.2.7-apache
7.2.7-apache: Pulling from library/php
683abbb4ea60: Pull complete 
5ba6c1ec1bb7: Pull complete 
30c400495d2e: Pull complete 
47082fd94ae9: Pull complete 
db1399ce8b37: Pull complete 
d9055cd97604: Pull complete 
3dc42f043a06: Pull complete 
718b9cd7325a: Pull complete 
a7b97ac10aed: Pull complete 
24e62ac9193c: Pull complete 
ab519c71ddf5: Pull complete 
4bb2eea5ed3b: Pull complete 
839db073d17d: Pull complete 
694b4d33596a: Pull complete 
91d76bc9d54f: Pull complete 
Digest: sha256:868995dfcc485ee259b5102ccb7e56c9ead60677450fe755d5ad3d338395f632
Status: Downloaded newer image for php:7.2.7-apache
 ---> c2700d1900ac
Step 2/2 : COPY ./html/index.php /var/www/html/
 ---> 16c09dac14b5
Successfully built 16c09dac14b5
Successfully tagged php_apache_image:ver001

 (3) Dockerコンテナの起動
  ターミナルで、以下のコマンドを実行します。

$ docker run -d -p 80:80 --name php_apache_container php_apache_image:ver001
1b7c81ffb9ec55a3525803a03bd49faff62ae28cf92784f02c42d7af4fbda98f
7
10
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
7
10