先日、AWSクラウドプラクティショナーの試験に合格し、
そこで知ったAWSのサービスでECRとECSがあります。
Elastic Container RegisryとElastic Container Serviceでどちらも
Dockerのコンテナに関するサービスです。
今更ながらDockerを使っていなかったこともあり、
この際サービスを理解するためにもDockerで開発環境を作ってみたので
その時の手順を記録します。
使用環境は
OS:amazon linux
ミドルウェア:XAMPP
フレームワーク:Laravel
■はローカル側、■はサーバー側のコマンドです。
前提条件として、DockerはPCにインストール済みであることです。
Dockerのインストールについてはたくさん情報が他のサイトでありますので
そちらを参考にしてください。
※以下sampe_appの記述は各環境やお好みに合わせて適時変更してください
1、Amazon Linux2のイメージのダウンロードと起動 |
パワーシェル(windowns)またはターミナル(MacOS)を起動する |
dockerイメージに何があるかを確認する |
docker images |
Amazon Linux2のイメージがなければダウンロードする |
docker pull amazonlinux:2 |
dockerイメージにダウンロードされたことを確認する |
docker images |
イメージからコンテナを立ち上げる。 |
docker run -it -d --privileged --name sample-app -p 8080:80 amazonlinux:2 /bin/bash |
コンテナが起動していることを確認する。 |
docker ps |
コンテナにログイン |
docker exec -it sample-app /bin/bash |
2、コンテナ初期設定 |
AmazonLinuxにログインできたら、システムアップデートと必要なツールのインストールを行う。 |
yum update -y |
yum -y install hostname passwd vim systemd yum-utils unzip wget sudo git net-tools procps |
ユーザーの作成と権限設定 |
useradd app-user |
passwd app-user ※パスワードを入力する |
usermod -aG wheel app-user |
visudo |
=>%wheelの行のコメントを有効化=>「行の先頭の#を削除」 (viのちょっとした操作 「/wheel」で検索、「x」 で一文字削除、[ESC]&「:wq」で保存終了) |
作成した「app-user」にスイッチ |
su app-user |
「app-user」のホームディレクトリに移動 |
cd |
3、XAMPPのインストールとPATH設定 |
最新版のXAMPPをダウンロードとインストール(2019年11月現在) |
wget https://sourceforge.net/projects/xampp/files/XAMPP%20Linux/7.3.11/xampp-linux-x64-7.3.11-0-installer.run |
chmod 755 xampp-linux-x64-7.3.11-0-installer.run |
sudo ./xampp-linux-x64-7.3.11-0-installer.run |
すべて「Y」でインストールし、インストールが完了したらダウンロードしたファイルを削除する |
rm -r xampp-linux-x64-7.3.11-0-installer.run |
xamppは/opt/lamppにインストールされるので、そこにPATHを通す |
/home/app-user/.bash_profileを編集 |
vi .bash_profile |
PATHの行を以下に変更 |
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/lampp/bin:/opt/lampp/sbin |
PATHを有効化 |
source ~/.bash_profile |
PATHの確認 |
echo $PATH |
rootでもPATHを通す |
exit |
cd |
rootになったことを確認して、.bash_profileを編集 |
vi .bash_profile |
PATHの行に以下を記述 |
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/opt/lampp/bin:/opt/lampp/sbin |
export PATH |
PATHを有効化 |
source ~/.bash_profile |
PATHの確認 |
echo $PATH |
作成した「app-user」にスイッチ |
su app-user |
cd |
ショートカット作成 |
sudo ln -s /opt/lampp/lampp /usr/sbin/lampp |
sudo ln -s /opt/lampp/bin/php /usr/sbin/php |
sudo ln -s /opt/lampp/bin/mysql /usr/sbin/mysql |
4、ミドルウェアのアプリケーション設定 |
各ミドルウェアのアプリケーション設定ファイルを編集する |
・phpiniの設定 |
sudo vi /opt/lampp/etc/php.ini |
date.timezone=Asia/Tokyo |
expose_php = Off |
・Apacheの設定 |
sudo vi /opt/lampp/etc/httpd.conf |
※<IfModule unixd_module>内の変更 |
<IfModule unixd_module> |
User app-user |
Group app-user |
</IfModule> |
※DocumentRoot変更 |
DocumentRoot "/opt/lampp/htdocs/sample_app/public" |
<Directory "/opt/lampp/htdocs/sample_app/public"> |
・PhpMyAdminの設定 |
sudo vi /opt/lampp/etc/extra/httpd-xampp.conf |
<Directory "/opt/lampp/phpmyadmin"> |
AllowOverride AuthConfig Limit |
Order allow,deny |
Allow from all |
Require all granted |
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var |
</Directory> |
・Composerのインストール |
curl -sS https://getcomposer.org/installer | php |
sudo mv composer.phar /usr/local/sbin/composer |
・laravelのインストール |
composer global require laravel/installer |
composer require --dev "orangehill/iseed" |
※iseedを有効にするにはconfig/app.php のproviders にOrangehill\Iseed\IseedServiceProvider::class を追加する必要がある |
mysql を起動 |
sudo lampp startmysql |
mysqlにデータベースとユーザーを作成 |
mysql -u root |
create database sample-db; |
create user 'sample-user'@'localhost' identified by 'sample-password'; |
grant all on *.* to 'sample-user'@'localhost' identified by 'sample-password'; |
quit |
・終了する |
exit |
exit |
5、sampleシステムの設置 |
システムのモジュールをローカルドライブ内に保存もしくはGitなどから取得 (自身の管理が行いやすい場所) 例:/Users/user/htdocs/sample-app |
コンテナを停止する |
docker stop sample-app |
CONTAINER IDを確認 |
docker ps -a |
表示されたCONTAINER IDを使用し、Dockerイメージを作成(ここまでの状態をイメージ化する) |
docker commit [CONTAINER ID] sample-app/amazonlinux2:2 |
イメージ化されていることを確認 |
docker images |
プログラムファイルをマウントしたコンテナを起動するため、 使用したコンテナを削除し新しくコンテナを起動する。 |
docker rm -f [CONTAINER ID] |
docker run -it -d -u app-user --privileged --name sample-app -p 8080:80 -v [ローカルに保存したシステムモジュールの絶対パス]:/opt/lampp/htdocs/sample-app sample-app/amazonlinux2:2 /sbin/init |
※windowsの場合は、ドライブの指定は/c/から始める。区切りはスラッシュ。 また、DockerのセッテイングでCドライブが共有されていること、 マウント元のディレクトリのセキュリティ設定で「users」グループをフルアクセス可としておくこと。 |
コンテナにログイン |
docker exec -it sample-app /bin/bash |
マウントの確認 |
ls /opt/lampp/htdocs/sample-app |
.envの確認 |
ls -al |
.envがない場合は.env.exampleをコピーして必要な情報を編集する |
sudo cp -p .env.example .env |
パーミッションの設定 |
sudo chmod -R 777 /opt/lampp/htdocs/sample-app/public |
sudo chmod -R 777 /opt/lampp/htdocs/sample-app/storage |
sudo chmod -R 777 /opt/lampp/htdocs/sample-app/bootstrap/cache |
cd /opt/lampp/htdocs/sample-app |
laravelキャッシュのクリア |
php artisan cache:clear |
php artisan config:clear |
php artisan route:clear |
php artisan view:clear |
lamppの起動 |
sudo lampp start |
※パーミッションエラーが発生する場合はローカル側OSでもパーミッションの確認を行う |
以下、Laravbelのマイグレーションなど データベース定義、データ定義がされている場合に実行 |
テーブルの作成 |
php artisan migrate |
マスターデータ登録 |
php artisan db:seed |
6、Web画面表示 |
・sample-appシステムへブラウザでアクセス |
http://localhost:8080/ |
・PhyMyAdminへブラウザでアクセス |
http://localhost:8080/phpmyadmin/ |
以上で、サクッと環境はできました。
もちろん、用意したシステムのモジュールで
データベース定義・データ用意がしてあれば
すぎに動かせるという条件付きにはなります。
さて、このDockerでできあがったコンテナ環境を
イメージ化することにより、他のローカル環境でも
全く同じ環境をすぐに作成できるようになります。
AWS ECRを使ってリポジトリ管理していますが
とても便利で簡単です。
この説明はまた別の機会に行いたいと思いますが、
このリポジトリをMacで作ってECRにpushして
DockerのインストールされたWindowsでECRからpullして
Dockerで起動したら全く同じ環境が
異なるPCで一瞬でできてしまいました。
Dockerの機能は頭では理解していたのですが、
実際に使って体験してみると、びっくりするくらい簡単で
無駄に時間のかかる開発環境構築が一瞬でできたのは
本当に感動ものでした!