- 更新日: 2019年09月09日
- 公開日: 2019年08月28日
【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
【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-config
と ec2-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 では、安心して受講を検討頂けるように「無料相談」も随時実施中(オンライン)。気になる方は 公式ページ をチェックしてみて下さい。
- この記事を書いた人
- オシママサラ