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



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

Docker学習の最終段階ともいえるデプロイ作業。

今回は Windows PC で Amazon ECS を利用し、 docker-compose.yml で WordPress をデプロイしてみたいと思います。

Docker学習のモチベーションアップ、プログラミング学習のモチベーションアップにつながると思いますので、参考にしてみて下さい。

【デプロイ環境】

使用するパソコンのOS Windows10
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初心者向け】WindowsでWordPressをAWSのDockerで公開
  2. AWSでDockerを使用する方法
  3. WindowsでAmazon ECSを利用してdocker-compose.ymlを利用する流れ
  4. Amazon ECS CLIをインストール①
  5. GnuPGのインストール
  6. Amazon ECS CLI のインストール②
  7. WindowsにAWS CLIをインストール
  8. WindowsでAmazon ECSのクラスターを作成
  9. Windowsでdocker-compose.ymlを使ってDockerコンテナをAWSにセット
  10. WindowsでAmazon ECSを使ってdocker-compose.ymlしてWordPressをデプロイする様子の動画
  11. まとめ

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

AWSでDockerを使用する方法

image

AWS で Docker を利用しようと思うと、 Amazon ECS の利用が代表的ですが、 EC2 や Lightsailサービス でも Docker を利用してサービスを公開することができます。

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

  • EC2のインスタンスに Docker をインストールし、インスタンス内でDockerを起動、そしてサービス公開(上図左)
  • ECS(Elastic柔軟 Container Service)でDocker製アプリを公開(上図右)
  • ECR(Elastic Container Registry)でDocker製アプリを公開
  • Lightsailサービスのシェルスクリプトを利用して Docker製アプリを公開

1番目の EC2のインスタンスに、、、と 4番目の Lightsailサービスを利用して Docker を使う場合、自分のパソコンのローカル環境で Docker を操作するような感覚で Docker を設定可能。比較的分かりやすいやり方ですが、 Docker のインストールが必要だったりしますので、ディスク使用領域がでかくなる傾向に。またコンテナの制御性やスケーラブル性に難が(上図左)。

一方 2番目の ECS を利用して Docker を利用する場合は、 Docker 自体のインストール作業は不要で、 クラスターという単位でプロジェクトを操作。クラスターには EC2 のインスタンスが属し、Docker コンテナ として稼働。プロジェクトの規模を大きくしたい時も容易にインスタンスを増産できる特徴が。 また Amazon ECS は、 Amazon ECS CLI というソフトで自分のパソコンから Amazon ECS を操作でき、 その中で docker-compose.yml の実行も可能に。

今回のような WordPress を Docker で管理する場合、通常 docker-compose.yml でコンテナを起動すると思いますので、今回は Amazon ECS を利用して WordPress を公開したいと思います。

WindowsでAmazon ECSを利用してdocker-compose.ymlを利用する流れ

画像クリックで拡大

公式ドキュメントによると、Windowsで Amazon ECS を使って docker-compose.yml を実行したい場合、以下の環境が必要に。

  • AWSのアカウント
  • 管理者権限で実行できるPowerShell
  • Amazon ECS CLI のインストール
  • GnuPGのインストール
  • AWS CLI のインストール

AWS も Docker も PowerShell もはじめて、という方にとっては非常に学ぶべき点の多い作業内容と思います。

この工程で一番難しい点は、 Amazon ECS CLI のインストールと Amazon ECS のクラスター作成、 ECS CLI を使った docker-compose.yml 実行の 3点。これらのポイントは、エラーが発生しやすいところですが、一つずつ公式ドキュメントに従って作業を進めれば大丈夫でしょう。

AWSアカウントの確認

画像クリックで拡大

AWS アカウント作成ページ

AWSのアカウント作成自体は特に問題無いと思いますが、AWSへログインした後、リージョンを適切に設定しておく必要があります。今回利用する Amazon ECS CLI では、設定コマンドでリージョンコードも使用。そのためアカウントのリージョンと ECS CLI で利用するリージョンが一緒でないとエラーが。今回は東京・・で統一して利用していきます。

Amazon ECS CLIをインストール①

画像クリックで拡大

New-Item ‘C:\Program Files\Amazon\ECSCLI’ -type directory
Invoke-WebRequest -OutFile ‘C:\Program Files\Amazon\ECSCLI\ecs-cli.exe’ https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-windows-amd64-latest.exe

Windowsで Amazon ECS に docker-compose.yml をしようと思うと Amazon ECS CLI が必要。公式ドキュメントに従って Windows に ECS CLI をインストールしていきます。

まずは上記コマンドで Cドライブの Program Files に Amazon ECS CLI 専用のディレクトリを作成し、プログラムをダウンロード。

Windowsでのコマンド操作は、コマンドプロンプト と PowerShell がありますが、今回の作業は基本 PowerShell。しかも管理者権限で PowerShell を使う必要があります。

画像クリックで拡大

管理者権限で PowerShell を利用する場合は、 PowerShellアイコンを右クリックして「管理者として実行する」を選択。すると管理者権限で実行してもいいですか?と聞かれますので「はい」。

画像クリックで拡大

cd ../..

そして管理者権限で PowerShell を開くと、ディレクトリが C:\WINDOWS\system32 になっています。公式ドキュメントを見てみますと C:\ ディレクトリでコマンドを実行(上図参照)。自分の PowerShell の作業ディレクトリを、上記コマンドでドキュメントと一緒にしておきます。

画像クリックで拡大

New-Item ‘C:\Program Files\Amazon\ECSCLI’ -type directory
Invoke-WebRequest -OutFile ‘C:\Program Files\Amazon\ECSCLI\ecs-cli.exe’ https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-windows-amd64-latest.exe

これでやっと一番最初のコマンドを実行する準備が整いました。 Amazon ECS CLI をダウンロードする上記コマンドを実行すると、ダウンロードが進みます。

画像クリックで拡大

そして次のコマンド、ダウンロードが正常に完了したかどうかをチェックするコマンドでは、公式ドキュメントの通り実行すると上図のようにエラーが。 これは現在作業している Cディレクトリに ecs-cli.exe ファイルがないため。 ecs-cli.exe は C:\Program Files\Amazon\ECSCLI\ecs-cli.exe にあるので、この部分を編集してコマンドを実行。

Get-FileHash ‘C:\Program Files\Amazon\ECSCLI\ecs-cli.exe’ -Algorithm MD5

Program Files のディレクトリ名にスペースがあるため、 'シングルクウォート もしくは "ダブルクウォート を使って読み込み先を指定。上記コマンドを実行するとハッシュ値が出力(下図参照)。

画像クリックで拡大

Invoke-WebRequest -OutFile md5.txt https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-windows-amd64-latest.md5
Get-Content md5.txt

そしてダウンロード元のハッシュ値を確認すると、一緒になっていることが確認できます(上図参照)。これで Amazon ECS CLI が正常にダウンロードできたことが確認。

GnuPGのインストール

画像クリックで拡大

Windows に Amazon ECS CLI をインストールしようと思うと署名サポートソフトの GnuPG が必要に。GnuPG まだの方多いと思いますので、インストール手順をご紹介。

まずは Amazon ECS CLI の公式ページに書かれてある GnuPG リンク をクリック。

そして GnuPG 公式ページの中程にある 「WIndows download」 を左クリック(上図右参照)。


画像クリックで拡大

すると GnuPG の実行ファイルをダウンロードした後の作業を聞かれますので「実行」を選択。

画像クリックで拡大

あとは GnuPG のインストーラーに従って Next を数回クリック。

GnuPG のインストールが完了したら、一旦 PowerShell を再起動させて、 gpggpg --version を実行。 GnuPG からリアクションが返ってくればインストール完了です。

Amazon ECS CLI のインストール②

画像クリックで拡大

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

Windows で Amazon ECS CLI を使うために必要なパブリックキーを取得。上記コマンドを実行すると 処理数の合計 : 1 と表示されます。

画像クリックで拡大

Invoke-WebRequest -OutFile ecs-cli.asc https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-windows-amd64-latest.exe.asc

次は上記コマンドで Amazon ECS CLI の署名をダウンロードし、 ecs-cli.asc ファイルが作成。そして下記コマンドで署名を検証。

gpg --verify ecs-cli.asc 'C:\Program Files\Amazon\ECSCLI\ecs-cli.exe'

正常に署名がダウンロードされていれば、上図の様にキーが表示されます。

画像クリックで拡大

C:\existing\path;C:\Program Files\Amazon\ECSCLI

次は Amazon ECS CLI へのパス設定。公式ドキュメントでは上記コマンドを実行していますが、パスの設定、やはりコントロールパネルの方が慣れていますよね。なので Windows の Cortana 入力欄に 「環境変数」 と入力し、 「環境変数を編集」 を選択(下図参照)。

画像クリックで拡大


画像クリックで拡大

環境変数の編集画面が表示されたら、「環境変数」をクリック。そして上段 ユーザー環境変数の Path を左クリックし、「編集」を選択。

画像クリックで拡大

そして Path リストにドキュメントに書かれていた C:\Program Files\Amazon\ECSCLI を追加し、 OK。これで Path の設定が完了。上手く設定できたかどうか、下記コマンドでチェック。

ecs-cli --version

画像クリックで拡大

ecs-cli のバージョン情報が返ってくれば Amazon ECS CLI の設定完了です。バージョン以外の機能は、 ecs-cli で確認できるでしょう。

WindowsにAWS CLIをインストール

画像クリックで拡大

次は最後の項目 「AWS CLI をインストールして設定します」 の項目。ドキュメントに書かれているリンクをクリックすると、AWS CLI のインストール方法ではなく、いきなり設定の項目。

【AWS CLI】 AWSの操作をブラウザではなく、自分のパソコンのコマンドから操作するためのツール。

画像クリックで拡大

AWS CLI を Windows マシンにインストールしていない方も多いと思いますので、まずは AWS CLI ページにアクセスして、インストールを実行。

画像クリックで拡大

インストーラーに従って AWS CLI をインストールします。およそ 5分ぐらいかかるでしょう。

画像クリックで拡大

AWS CLI のインストールが完了したら、一旦 PowerShell を再起動。そして aws --version と入力し、 AWS CLI の情報が返ってくれば OK。

画像クリックで拡大

そして 「AWS コマンドラインインターフェイス」 のページで書かれていた環境変数の設定。 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY はユーザー固有の情報となりますので、 AWS のページからチェック。 上図右のようにアカウント名を左クリックして、「マイセキュリティ資格情報」を選択。すると下記のようなポップアップが表示。

画像クリックで拡大

今回はセキュリティに関する細かい設定は飛ばしますので、左側の 「Continue to Security Credentials」 をクリック。

画像クリックで拡大

そして「アクセスキー」の項目を開いて、「新しいアクセスキーの作成」を左クリック。

画像クリックで拡大

するとアクセスキーID と シークレットアクセスキー が表示されますので、一旦テキストエディタか何かにコピペしておきます。このキー情報を先ほどの 「AWS コマンドラインインターフェイスの環境変数」 で表示されていたコマンドにセット(下図参照)。

$Env:AWS_ACCESS_KEY_ID="アクセスキーID"
$Env:AWS_SECRET_ACCESS_KEY="シークレットアクセスキー"
$Env:AWS_DEFAULT_REGION="東京リージョンのコード"

画像クリックで拡大

AWS CLI の環境変数設定コマンドを実行すると上記の様な反応。ちょっと味気ないですが、これで AWS CLI の設定は完了です。

これでやっと Windows で Amazon ECS CLI 、つまり docker-compose.yml で AWS にコンテナをセットできる準備が整いました。

WindowsでAmazon ECSのクラスターを作成

公式ドキュメントの 「チュートリアル: Amazon ECS CLI を使用して EC2 タスクのクラスターを作成する」 を参考に Windows で docker-compose.yml を使って AWS に Dockerコンテナをセットする手順をご紹介していきたいと思います。

画像クリックで拡大

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

まずは Amazon ECS のクラスター設定から。クラスター名(--cluster)を ec2-tutorial とし、リージョンは東京の ap-northeast-1、それから起動タイプは EC2、コンフィグ名(--config-name)は ec2-tutorial。クラスター名やコンフィグ名は任意の値です。

クラスターの設定コマンドが完了したら、 AWS に接続して処理を行うためのプロファイル設定。

ecs-cli configure profile --access-key AWSのアクセスキーID --secret-key AWSにシークレットアクセスキー --profile-name tutorial-profile

キーは AWS のユーザーアカウント「マイセキュリティの資格情報」から確認した値。プロファイル名(--profile-name)は任意の値。これらのコマンドを実行すると上図右のような結果に。

画像クリックで拡大

次は先程設定したコンフィグやプロファイルを使って Amazon ECS のクラスターを作成。ただクラスターを作成する際、 --keypair の EC2 のキーが必要に。 EC2 のキー情報を確認するため、一旦 EC2 の管理画面を開きます(上図右)。

画像クリックで拡大

EC2 の管理画面が開けたら、左サイドバーにある「キーペア」をクリック。そして「キーペアの作成」をクリック。

画像クリックで拡大

キーファイルの名称を求められますので、任意の値をセット。

画像クリックで拡大

キーペアを作成するとキーファイルが自動でダウンロードされますので、そのキーファイルを Cディレクトリにコピペ。

画像クリックで拡大

そして公式ドキュメントの Amazon ECS クラスター作成コマンドを参考に、キーファイル名などを変更。

ecs-cli up --keypair キーファイル名 --capability-iam --size 2 --instance-type t2.micro --cluster-config ec2-tutorial --ecs-profile tutorial-profile

キーファイル名は今回の場合 mykey、そして --capability-iam は AWS IAM リソースに関するものでユーザーやグループのセットアップ時に利用。 --size 2 でインスタンスの量を指定、今回は WordPress 用コンテナ と MySQL用コンテナを起動したいので 2。インスタンスタイプ(--instance-type)は、無料利用できる t2.micro を選択。コンフィグ(--cluster-config)とプロファイル(--ecs-profile)は先ほど実行したコマンドと同じ名称になるようセット。

以上の内容を実行すると、 4、5分でクラスターが作成されます。コマンドが終了したらAWS の管理画面より ECS や EC2 を確認してみて下さい。

これで docker-compos.yml を実行する ecs-cli compose up のクラスター先が作成できました。次は docker-compose.yml を作成していきます。

Windowsでdocker-compose.ymlを使ってDockerコンテナをAWSにセット

画像クリックで拡大

公式ドキュメントに書かれてある docker-compose.yml の内容をそのままコピペして、自分のパソコンに docker-compose.yml ファイルを作成します。この時リージョンコードを東京(ap-northeast-1)に指定しておく必要が。

また今回は Docker Hub のプレーン状態の WordPress を使用していますが、カスタマイズした WordPress を利用したい場合は事前に Dockerコンテナを Docker Hub に Push しておけば利用可能。 MySQL も手軽に MariaDB や Postgre に変更できるでしょう。

画像クリックで拡大

そして今回は docker-compose バージョン 3 で使用しますので、 ecs-param.yml というインスタンス設定ファイルも必要とのこと。こちらもドキュメントの内容をそのまま自分のパソコンにコピペ。

この後のコマンド ecs-cli compose up でエラーが出た時、 メモリーの上限値が影響しているかもしれません。 t2.micro はメモリー上限 1GB ですが、 ecs-param.yml 内のメモリー上限を 0.3GB、 0.2GB と下げるとエラー回避できたりしました。

画像クリックで拡大

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

ecs-cli compose up で現在作業中のディレクトリにある docker-compose.yml と ecs-param.yml ファイルが読み込まれ、処理。--create-log-groups はログの作成で、 --cluster-config で実行先クラスターの指定、 --ecs-profile で実行先 AWS アカウントを指定、という内容。

問題なければ 4、5分でデプロイは完了します(上図右)。

画像クリックで拡大

ecs-cli ps

実行中のコンテナリストを表示するとポート番号が。こちらにアクセスすると見事 AWS に WordPress の Docker コンテナがセットできたことが確認できます。

【クラスターの様子】

画像クリックで拡大

【インスタンスの様子】

画像クリックで拡大

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

本テキストと合わせて作業風景、ご参考頂ければ幸いです。

まとめ

Windows と Docker はチョット相性の悪そうなところもありますが、今回のデプロイについては Linux や Mac とそれほど目劣りしない内容だったように思います。

しかしそれでも公式ドキュメントに書かれている通りの内容ではデプロイまで辿りつけなかったと思いますし、自分でエラーを解決するにはモチベーションと時間が必要。

就職・転職のために Docker を学習している方であれば、エラーにハマることなく、効率よく Docker スキルを習得したいことでしょう。

現在プログラミングスクールは数多くありますが、 Docker に対応したスクールは CodeCampGATEDIVE INTO CODE ぐらい。受講費用などはかかりますが、時間と内容の正確性を考慮すると決して高くないのでは。

現在 CodeCampGATE では、レッスン内容をより詳しく理解してもらうために無料相談(オンライン)を実施中。 Docker のエラーハンドリングで疲弊してしまう前に一度「相談」してみませんか?

ご興味ある方は CodeCampGATE の 公式ページ より確認してみて下さい。

関連記事

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