HaneCa

独り立ちへ向けた長い道

AWC ECSでdocker composeを設置する方法

投稿日: 2020年3月22日 最終更新日: 2021年3月25日

ここでは、AWS ECS上にdocker-compose.ymlのコンテナを設置する方法をご紹介します。まず、今回はwordpressが動作するdocker-compose.ymlを用意しました。

まず、簡単に手順を説明すると、AWS ECSの場合、まず、クラスターと呼ばれる箱を定義し、その箱の中にEC2インスタンス群を稼働させます。そのインスタンスには、dockerコンテナー動作しています。その後、docker composeで定義した構成のdockerイメージを設置します。

 

ecs-cliコマンドのインストールと初期設定

事前の準備として、amazon-ecs-cliを次のようにインストールします。すると、ecs-cliというコマンドでECSを操作できるようになります。

$ brew install amazon-ecs-cli

 

次に、認証情報を次のコマンドで、登録します。必要なアカウントIDやシークレットきーは予め取得していることを想定しています。

$ ecs-cli configure profile --profile-name profname --access-key xxxxxxxx --secret-key yyyyyyyy

 

コンテナの設置方法

次に設置するECSを次のように作ります。ただし、このコマンドは実際に設置するためのコマンドではなく、作業PC上でクラスターを定義するためのコマンドです。

$ ecs-cli configure --region ap-northeast-1 --cluster ecs-sample

 

次に実際にdockerが動作するEC2インスタンスを設置します。ここで、kpnameには、EC2インスタンスへアクセスする時に利用するキーペア名を指定してください。キーペアとは、EC2などでsshアクセスする時に利用する証明書です。わからない場合は、WebコンソールでEC2を選択し、キーペアのタブを選択すると利用可能なキーペアの一覧が現れます。

$ ecs-cli up --keypair kpname --capability-iam --size 1 --instance-type t2.micro

 

dockerを構成する

次に、Wordpressを構成するためのdocker-composeファイルを、今回は次のように定義しました。

wordpress:
  image: wordpress:latest
  mem_limit: 256MB
  ports:
    - "80:80"
  links:
    - mysql
  environment:
    WORDPRESS_DB_HOST: mysql
    WORDPRESS_DB_USER: wordpressuser
    WORDPRESS_DB_PASSWORD: password
    WORDPRESS_DB_NAME: wordpress

mysql:
  image: mysql:5.7
  mem_limit: 256MB
  environment:
    MYSQL_DATABASE: wordpress
    MYSQL_USER: wordpressuser
    MYSQL_PASSWORD: password
    MYSQL_RANDOM_ROOT_PASSWORD: '1'

 

これを、docker-compose.ymlという名前で保存し、次のコマンドを実行して、ECS上のdockerに設置します。

$ ecs-cli compose -f docker-compose.yml up

 

ここで、エラーが発生しなければ、WebコンソールのEC2で、今回設置したインスタンスのパブリックIPアドレスを調べ、ブラウザでそのURLにアクセスし、次のような画面が表示されるとうまくインストールが完了しています。

ここで、ecs-cli composeの処理が終了してから、実際にアクセスできるようになるまでに、数秒のタイムラグがあります。

また、ecs-cli composeの処理中に、エラーらしきログが出力されない場合でも、「Stopped container…」とプロセスが起動せずに処理が終えていることもあるので、注意しなければなりません。

 

コンテナを停止する方法

作成したコンテナを停止する場合、次のコマンドでEC2インスタンスを停止できます。

$ ecs-cli down

 

参考サイト

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

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