EC2にもう一つのServerを建ててみた。

今回は、Dockerを利用して、EC2にもう一つのServerを建ててみました。
2021.06.19

こんにちは!クラスメソッド(Classmethod)のキム・ジェウク(Kim Jaewook)と申します!

今回はDockerを利用して、EC2にもう一つのServerを建ててみました。

環境設定

EC2インスタンスのOSはUbuntuを選びました。

apt-get update
apt-get install nginx
apt install php-fpm
apt-get install nano

apt update実行した後、nginxをダウンロードします。そして、phpではなくphp-fpmをダウンロードしますが、php-fpmはPHP Fast CGI Process Managerという意味で、GCIより速度が早いバージョンです。 CGIは実行するたびに、新しいプロセスを作成して起動しますが、このしたら負荷がかかって遅くなります。しかし、Fast CGIはすでに作成したプロセスを再利用する方法を使用するため、処理がより速いというメリットがあります!

しかし、なぜphp-fpmなのかと言うと、apacheの場合、apache用phpモジュールがありますので、いかなる設定もする必要なく、phpを認識しますが、nginxの場合、phpを認識できないので、php-fpmをインストールしてnginxと連動しなければなりません。

最後にnanoの場合、nginxとphpを連動させるためにはテキストを修正しなければならないので、nanoをインストールしました。

cd /etc/nginx/sites-available
nano default

インストールが終わったら、/etc/nginx/sites-availableに入ります。そして、lsコマンドを実行してみると、defaultがありますので、インストールしたnanoでテキストを修正します。

ここに index.phpを追加してください。

その後、下の部分にイメージどうり「#」を消してください。セーブするコマンドは、Ctrl+Oで、nanoから抜け出すコマンドはCtrl+Xです。

では、phpとnginxの連動が終わったので、テストをやってみましょう。

EC2のPublic IPに接続してみると、

nginxページが出ます。

その後、

nano index.php "hello world PHP"

コマンドを実行して、phpファイルを作菜します。

systemctl restart nginx

次、nginxを再起動した後、EC2に/index.phpをつけて接続してみましょう。

このページが出たら、nginxとphpの連動は成功です。

Docker環境を設定

apt install docker.io

Dockerをダウンロードします。

その後、「Docker」というコマンドを実行すると、Dockerのコマンドリストが出たら、インストール成功です。

まず、Dockerfileを作成する前にDockerfileのディレクトリを設定する必要があります。

cd /etc/nginx/sites-available
mv deafult /./home/ubuntu

私は、Dockerfileのディレクトリをhome/ubuntuに設定しました。そして、phpを設定したdefaultファイルも必要ですので、ubuntuディレクトリにコピーします。最後には、ubuntuディレクトリで「nano phpinfo.php -> <?php phpinfo(); ?>」でphpファイルを作成します。

Dockerfileを作成

では、Dockerfileを作成しましょう!

  • MAINTAINERは「作成者の名前をイメージに付与するコマンド」
  • RUNは「ビルド時に任意のコマンドを実行できるコマンド」
  • COPYは「ホスト側のファイルをイメージ側の指定したディレクトリにコピーするコマンド」
  • WORKDIRは「作業ディレクトリを指定(ない場合は新しく作成)するコマンド」
  • CMDは「docker run か docker-compose run を実行するときに実行されるコマンド」
  • EXPOSEは「コンテナが公開するポートを指定するコマンド」になります。

Dockerについては、こちらを参考してください。

Dockerfileをビルド

では、作成したDockerfileをビルドしてみましょう!

docker build -t ubuntu-nginx-php:latest .

コマンドを実行した後、「docker images」コマンドを実行してみると、

Dockerfileが成功的にビルドされました。

Container化

次は、ImageをContainer化してみましょう

docker create -i -t --name ubuntu-nginx-php -p 8000:80 image-id
docker ps -a

image-idには、「docker images」のコマンドを実行して、IMAGE IDの部分を入力します。portは、Dockerfileではport 80を入力しましたけど、port 8000に変えてContainer化してみましょう。80:80しても大丈夫です。

そして、docker ps -a コマンドで作成したDocker Containerを見れます。

docker start Containter-ID

では、上のコマンドで、Containerを起動します。

次は、Security GroupでPort 8000を設定してください。

Dockerのテスト

では、port 8000に接続してみると、nginxページが出ます。ここまでが、EC2にDokcerを利用してもう一つのServerを構築する過程でした。

最後に

後は、今回構築したDocker ServerでAWS Serviceである、RDSにも連動してみようと思います。これから機会があったらDockerについてたくさん書いてみるつもりです!