【AWS&Docker初心者向け】WordPressをAWSのDockerで公開 ~Mac編~



【AWS&Docker初心者向け】WordPressをAWSのDockerで公開 ~Mac編~

Macのパソコンで Docker を学習していると、「最終的にどうやって Docker 製アプリを公開するんだろう....」と疑問に思う方もいらっしゃるでしょう。

はじめて Docker でデプロイする時、初期設定とかすこし面倒くさいですが、一度要領を覚えると、すごい便利なことに気づきます。

今回は WordPress を docker-compose.yml で Amazon ECS にデプロイしてみました。

【デプロイ環境】

使用するパソコンのOS macOS Mojave(10.14.6)
AWS は、 ECS と EC2 を利用(無料利用枠)
Amazon ECS CLI と AWS CLI をインストール
docker-compose.yml で WordPressコンテナと MySQLコンテナを起動
公開URLは、 EC2 のデフォルトのホスト番号

【参考ドキュメント】
チュートリアル: Amazon ECS CLI を使用して EC2 タスクのクラスターを作成する
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/ecs-cli-tutorial-ec2.html
目次
  1. 【AWS&Docker初心者向け】MacでWordPressをAWSのDockerで公開
  2. AWSでDockerを使用する方法
  3. MacでECSを利用してWordPressを公開する流れ
  4. MacにAmazon ECS CLIをインストール
  5. MacにAmazon AWS CLIをインストール
  6. Amazon ECSの設定
  7. Amazon ECSでdocker-compose.yml
  8. MacでAmazon ECSを使ってdocker-compose.ymlしてWordPressをデプロイする様子の動画
  9. まとめ

【AWS&Docker初心者向け】MacでWordPressをAWSのDockerで公開

AWSでDockerを使用する方法

今回は Amazon ECS(Elastic柔軟 Container Service) サービスを利用して、 docker-compose.yml を実行、そして WordPress サイトを公開、という流れですが、 AWS での Docker 利用方法はこの限りではありません。

【AWSでDockerを使用する方法】

  • EC2インスタンスに Docker をインストールして、 Dockerコンテナ起動、その結果 WordPress公開
  • Lightsailサービスのシェルスクリプトを利用して、Dockerをインストール、そしてDockerコンテナ起動で WordPress公開
  • ECS で Dockerコンテナを起動し、WordPress公開
  • ECR(Elastic Container Registry)で Dockerコンテナ起動し、WordPress公開

基本的には AWS で Docker を利用する場合は ECS か ECR になると思いますが、 ECS や ECR での Docker 操作、ちょっと特殊ですよね。できれば自分のパソコンで操作していたような感覚で Docker を利用したい、そんな時 EC2 や Lightsailサービスで Docker を使うと便利です。

ただし、 EC2 や Lightsailサービス で Docker を使う場合は、 EC2 や Lightsail 自体に Docker をインストールして利用する必要が(上図左 参照)。ハードディスクの使用領域圧迫やスケーラビリティの観点からあまりオススメされていません。

今回は AWS + Docker 定番の ECS を使って、 WordPress を起動したいと思います。

MacでECSを利用してWordPressを公開する流れ

WordPress を Docker で管理する場合、 WordPress本体用のコンテナとデータベース用のコンテナを起動しますので、よく docker-compose.yml を使ってコンテナを作成・起動すると思います。 Amazon ECS で docker-compose.yml を実行しようと思うと、専用の Amazon ECS CLI というソフトが必要に。 AWS の公式チュートリアルに従って、 Amazon ECS CLI のインストールや WordPress のセットアップを進めていきたいと思います。

【MacでAmazon ECSにdocker-compose.ymlするために必要なソフト群】

  • Amazon ECS CLI
  • GnuPG
  • Python 2.6.5以上 or Python 3.3以上
  • Amazon AWS CLI

今回公式チュートリアルに従って進めましたが、私は AWS CLI のインストールでつまづきました。 AWS CLI のインストール方法、 pip からや AWS CLI実行ファイルからなど 3種類ほどあります。

最初は pip からインストールしようと試みましたが、自分の Mac には Python3 や pip3 が入っていません。まずそこの部分で苦戦。結果的に AWS CLI のインストーラーから実行する方法が一番シンプルで確実だったように思います。追ってご紹介しますね。

MacにAmazon ECS CLIをインストール

画像クリックで拡大

Amazon ECS に docker-compose.yml して WordPress を公開するために、 ECS CLI をインストールしますが、その前に AWS のアカウントが必要。 AWS アカウントがまだの方は、公式ページより作成して下さい。そして AWS にログインした後、アカウントのリージョンを東京にセットしておきましょう(上図参照)。

リージョンはこのあとコマンド上で登場してきたり、プログラムで登場してきたりと、いくつかの違う場所で使用。そのときにリージョンがバラバラだとプログラムエラーが出てしまいます。東京・・なら東京・・に統一して利用しましょう。

画像クリックで拡大

sudo curl -o /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest

それではここから Amazon ECS CLI のインストール 手順に従って作業を進めていきたいと思います。 まずは ECS CLI 本体のダウンロード。上記コマンドを実行するとダウンロードがはじまり、データサイズは約 40MBになります。

画像クリックで拡大

curl -s https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest.md5 && md5 -q /usr/local/bin/ecs-cli

次はダウンロードが正しく完了したかのチェックコマンド。上記コマンドを実行すると、数字の列が 2行表示。上下共同じ内容であればダウンロードが成功、ということに(上図参照)。

画像クリックで拡大

このあとは ECS CLI をインストールするために、署名作業が必要に。まずは 署名処理をサポートする GnuPG というソフトの有無を確認。ターミナルを起動して gpg もしくは gpg --version と入力し、上図のようにリアクションがあれば署名処理行っていけます。 

GnuPGがない場合は、公式ページからインストールしておきましょう。 AWS のチュートリアルでは brew を使って GnuPG をインストールしていますが、公式ページにはインストーラーの GnuPG-2.2.17.dmg ファイルが紹介。コマンド操作慣れていない方は、 .dmg ファイルのインストーラーの方が使いやすいかもしれません。

画像クリックで拡大

gpg --keyserver hkp://keys.gnupg.net --recv BCE9D9A42D51784F

私の Mac の場合は、既に GnuPG がセットされていましたので、上記コマンドでパブリックキーを取得。 処理数の合計:1 と表示されていればOK。

画像クリックで拡大

curl -o ecs-cli.asc https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latest.asc

次は ECS CLI の署名ファイルをダウンロード。上記コマンドを実行すると現在の作業ディレクトリに ecs-cli.asc ファイルが作成されます。

画像クリックで拡大

gpg --verify ecs-cli.asc /usr/local/bin/ecs-cli

先ほどダウンロードした ecs-cli.asc が正常にダウンロードできたか上記コマンドでチェック。上図のようにキーが表示されたら OK です。

画像クリックで拡大

sudo chmod +x /usr/local/bin/ecs-cli

上記コマンドで ECS CLI にアクセス権限を付与、これで ecs-cli コマンドが使えるように。試しに

ecs-cli --version

としてみると ECS CLI のバージョンが返ってきます。その他にも ecs-cli だけで実行すると、 ECS CLI でどんなことが実行できるか参考にすることができますね。

これで Mac への Amazon ECS CLI のインストールは完了。次は Amazon AWS CLI の設定を行っていきます。

MacにAmazon AWS CLIをインストール

画像クリックで拡大

Amazon ECS で docker-compose.yml を実行し、WordPressを公開するためのチュートリアル(上図左)を確認すると、 AWS CLI が必要とのこと。 AWS CLI は、 AWS の操作をブラウザではなく、Macのパソコンから実行できるようにしてくれるソフト。

ECS CLI の公式チュートリアルにある 「AWS CLI インストール」(上図左)のリンクをクリックすると、 AWSの環境設定に関する内容...。まだ AWS はインストールしていませんので、リンク先(画面右)左サイドバー内にある「 AWS CLI のインストール」を選択。

画像クリックで拡大

そして再び左サイドバー内の macOS を選択し、前提条件を確認。適切な Python がパソコンにセットされていないといけないようです。ターミナルを起動して、

python --version

とすると、 Mac の場合デフォルトで Python バージョン2 が入っていますので、既に前提条件をクリア出来ていることが確認できます(上図参照)。

画像クリックで拡大

curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"

今回は AWS インストーラーを利用して AWS CLI をインストールしていきます。上記コマンドを実行すると AWS CLI 本体がダウンロード。現在の作業ディレクトリに .zip ファイルが登場します。

画像クリックで拡大

unzip awscli-bundle.zip

.zip ファイルを展開(解凍)します。コマンドが上手くいかない場合は、フォルダを右クリックして、展開しましょう。

画像クリックで拡大

sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

あとは上記コマンドでインストーラーを実行すれば AWS CLI が実行できるようになります。上記コマンド実行後、

aws --version

と叩いてみて下さい。バージョン情報が表示されれば、 Amazon AWS CLI のインストール完了です。

Amazon ECSの設定

画像クリックで拡大

Amazon ECS CLI、 Amazon AWS CLI のインストールが完了したら、 ECS で docker-compose.yml を実行するための準備です。まずは公式チュートリアルにもあるように config や profile などの接続設定から。上図コマンドの赤文字部分が任意の名称やコードに変わります。とりあえずサンプルのコマンドをテキストエディタにコピペしておきましょう(下図参照)。

画像クリックで拡大

profile 作成のコマンド内に KEY に関する情報が。こちらは AWS の KEY になってきますので、 AWS を開いて、画面右上の ユーザー名を左クリック。そしてメニュー内の 「マイセキュリティ資格情報」 を選択。

画像クリックで拡大

ポップアップ画面が開きますので、 「Continue to Security Credentials」 を選択。

画像クリックで拡大

「アクセスキー」タブを開いて、「新しいアクセスキーの作成」を選択。

画像クリックで拡大

するとアクセスキーID とシークレットアクセスキーが表示。コピーして、テキストに貼り付けておきましょう。

画像クリックで拡大

先ほどのプロファイル作成コマンドに「自分のアクセスキーID」と「シークレットアクセスキー」をセット。

あとクラスター作成コマンドも --region 部分を us から 東京の ap-northeast-1 に変更。

【プロファイルを作成するコマンド】

変更前
ecs-cli configure profile --access-key AWS_ACCESS_KEY_ID --secret-key AWS_SECRET_ACCESS_KEY --profile-name tutorial-profile

変更後
ecs-cli configure profile --access-key AKIAIVHMRKKSOVZJLX5A --secret-key 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 --profile-name tutorial-profile


【クラスター設定】

変更前
ecs-cli configure --cluster ec2-tutorial --region us-east-1 --default-launch-type EC2 --config-name ec2-tutorial

変更後
ecs-cli configure --cluster ec2-tutorial --region ap-northeast-1 --default-launch-type EC2 --config-name ec2-tutorial

上記コマンドを実行すると、上図のようなリアクション。

【クラスター】 Amazon ECS サービスで利用するプロジェクトは ”クラスター” という単位で管理。 1プロジェクトにつき 1クラスターといった感じ。クラスターの中には EC2 インスタンスなどが含まれ、複数個のインスタンスを 1つのクラスターで管理。プロジェクトをスケールアップする際などに便利です。

画像クリックで拡大

次は今作成したクラスターの設定を利用して、クラスターを作る作業。上図のように公式のコマンドを確認すると --keypair という情報が必要に。この --keypair は先程の AWSアカウントから取得した KEY ではなく、 EC2 インスタンスに絡む KEY。

AWS画面で 「サービス」 → 「EC2」 を選択。

画像クリックで拡大

画面左サイドバーの「キーペア」を選択し、「キーペアの作成」をクリック。

画像クリックで拡大

keypair の名称を聞かれますので、今回は mykey としました。作成ボタンをクリックすると、「mykey.pem」 というキーファイルが自動でダウンロードされます。

画像クリックで拡大

ダウンロードされた mykey.pem を現在の作業ディレクトリにコピペ。これで Amazon ECS にクラスターを作成す準備が整いましたので、クラスターを作成するコマンド ecs-cli up を実行します。

画像クリックで拡大

【クラスターの作成】

変更前
ecs-cli up --keypair id_rsa --capability-iam --size 2 --instance-type t2.medium --cluster-config ec2-tutorial --ecs-profile tutorial-profile

変更後
ecs-cli up --keypair mykey --capability-iam --size 2 --instance-type t2.micro --cluster-config ec2-tutorial --ecs-profile tutorial-profile

公式チュートリアルに書かれているクラスター作成コマンドを参考に、 keypair--instance-type を変更。 --instance-type は無料利用枠の t2.micro を選択。 --capability-iam は AWS IAM リソースに関するもので、ユーザーやグループのセットアップ時に利用。あとの --cluster-config--ecs-profile は先ほどセットした プロファイル や クラスター に関するもの、名称を揃える必要があります。

クラスター作成のコマンドを編集して実行するものの、エラーが。

FATA[0000] Error executing 'up':A CloudFormation ・・・・・・ '--force' ・・・・

エラー文に --force を付けてくださいとあります。これは既に実行コマンドと同じプロファイルやクラスターがあるため。はじめて上記コマンドを実行する場合はこのようなエラーは出ないと思います。

ecs-cli up --keypair mykey --capability-iam --size 2 --instance-type t2.micro --cluster-config ec2-tutorial --ecs-profile tutorial-profile --force

--force 付きで事項すると、 5、6分ぐらいでクラスターが作成完了すると思います(上図参照)。 AWS の ECS および EC2 の管理画面を見てみて下さい。新しくクラスターやインスタンスが作成されていますよ。

Amazon ECSでdocker-compose.yml

画像クリックで拡大

今回 Amazon ECS に docker-compose.yml する内容は、上図のチュートリアル通り。ただリージョンがチュートリアルでは us になっていますので、東京(ap-northeast-1)に変更。

今回は Docker Hub に公開されているデフォルトの WordPress ですが、カスタマイズされた WordPress を使いたい場合は、事前にローカル環境で開発した WordPress を docker push で Docker Hub に公開しておくと、利用できます。データベースも MySQL 以外の Postgre や MariaDB なども手軽に利用できるでしょう。

画像クリックで拡大

今回は バージョン3 の docker-compose を(ecs-params.yml)が必要に。とりあえずデフォルトのまま使ってみます。

画像クリックで拡大

ecs-cli compose up --create-log-groups --cluster-config ec2-tutorial --ecs-profile tutorial-profile

上記コマンドで Amazon ECS に docker-compose.yml。 ecs-cli compose up で 同じディレクトリにある docker-compose.yml と ecs-params.yml が自動読み込みされ処理。コンテナの作成、実行先は --cluster-configec2-tutorial --ecs-profile で指定。

しかし、エラーが出ています。どうもメモリーに関するエラーの様子。

画像クリックで拡大

試しにインスタンスのメモリーリミットを下げて、再び ecs-cli compose up を実行。するとコンテナの作成に成功しました。

ecs-cli ps でクラスター内の様子を確認できます。

画像クリックで拡大

コンテナリストに書かれているポートをコピペして、ブラウザでアクセス。すると WordPress が起動できていることが確認できます。これで docker-compose.yml を使って Amazon ECS に WordPress をデプロイできました。

あとは ecs-cli compose up した後の AWS の様子を確認しておきます。

【Amazon ECS クラスーの様子】

画像クリックで拡大

【Amazon EC2 の様子】

画像クリックで拡大

2つのインスタンスが起動中

今作成したクラスターを中止、削除する場合は、 AWS の管理画面からでも操作できますし、下記コマンドでも削除可能。

ecs-cli down --force --cluster-config ec2-tutorial --ecs-profile tutorial-profile

画像クリックで拡大

MacでAmazon ECSを使ってdocker-compose.ymlしてWordPressをデプロイする様子の動画

本テキストと合わせてご参照下さい。

まとめ

AWS での Docker を使ったプロジェクトのデプロイ。最初は Amazon ECS CLI や AWS CLI などの設定が必要ですが、あとは基本 3つのコマンドでサービスをデプロイできます。

普通の VPS などに比べると遥かに簡単ではないでしょうか。

本稿で Docker のデプロイをご参考いただけたと思いますが、 Docker なぜ必要でしょうか? 「就職」「転職」「スキルアップ?」「必要に迫れれて....」

学ぶ目的が 「就職転職」「エンジニア志望」 ということであれば、加速的に Docker やプログラミングを学習できる CodeCampGATE はいかがでしょうか?

CodeCampGATE は、 4ヶ月という短い期間でプログラミング初心者から現場レベルまでのスキルにアッピング。

「Docker難しいな...」「思うようにプログラミング学習進まないな...」そんな時は CodeCampGATE 参考にして下さい。 CodeCampGATE では、安心して受講を検討頂けるように「無料相談」も随時実施中(オンライン)。気になる方は 公式ページ をチェックしてみて下さい。

関連記事

オシママサラ
この記事を書いた人
オシママサラ
\ 無料体験開催中!/自分のペースで確実に習得!
オンライン・プログラミングレッスンNo.1のCodeCamp