【Docker第9回】ハンズオン/PHPの環境構築/docker-composeで複数コンテナを一括で起動_その2 (環境構築自動化)

【Docker第9回】ハンズオン/PHPの環境構築/docker-composeで複数コンテナを一括で起動_その2 (環境構築自動化)

本記事では、前回の手順をアップデートしましたので記載します。

【アップデートしたところ】

  • ローカルのMacに環境構築をするシェルスクリプトを作成
  • Git HubでISSUEを作成、ISSUEをクローズする手順を追加

【ソースコードはこちら】
build_LEMP-env.sh(ローカルのMacに環境構築をするシェルスクリプト)

【参考記事】


【関連記事】


構築する環境

ローカルMacのPATH(好きな場所でOK)

~/Development/development_public/tutorial_docker

ローカルMacのDIR構成

tutorial_docker       # Dockerをインストールしたディレクトリ(任意)  
├── other DIRs        # その他のDIRs 本作業には無関係
├── build_LEMP-env.sh # 今回使用する環境構築用シェル
├── docker-LEMP       # 今回作成するDIR

LEMP DIRを作成していく

LEMP DIRで環境でできること

前提

  • DockerをローカルPCにインストールしておく
  • WORK-DIRを作成しておく(今回はtutorial_docker)

Docker上でできること

  • PHP(LEMP環境)で簡単なWEBアプリを開発する
    ※LEMP環境 Linux Nginx MySQL PHP
  • PHPでコンソール上で動くプログラムを開発する
    ex) じゃんけんアプリやバッチファイルなど
  • myphpadminでMySQLを使った開発をする
    ex) GUI上でRDBMSの開発が可能

RDBMS

  • リレーショナル・データベース・マネジメント・システム
  • Relational Database Management System
  • 関係データベースを管理するためのシステムのこと

構築する環境の概要

docker-LEMPで構築する開発環境

WEBサーバー Nginx
開発環境   PHP
DB         myphpadmin
OS         ubuntu

docker-LEMP で構築するDIR構成

docker-LEMP/
├── docker-compose.yml
├── mysql/
│ └── data/
├── nginx/
│ └── nginx.conf
├── php/
│ ├── Dockerfile
│ ├── mysql/
│ └── src/
└── www/
  └── html/
    └── index.php

ignoreするファイル

今回は環境構築メインなので、以下のソースコードはGitHubにはアップしません。

docker-LEMP/mysql/mysql
docker-LEMP/mysql/data
docker-LEMP/mysql/
docker-LEMP/php/src
docker-LEMP/php/mysql

開発が進んだ場合はどうなる?

・永続化データでデータは保存される
・新しいパッケージやライブラリを追加する場合は、新たにイメージを作成するのが望ましい

docker-LEMPを構築する手順

0. Git HubでISSUEを立てる(任意)

  • ISSUEを立てる
  • タスク内容に応じたブランチを作成する
  • ローカルでブランチを移動する/コマンドは以下の通り
git fetch origin
git checkout <feature_任意のブランチ名>

1. プロジェクト用ディレクトリを作成し、移動する

# 手動
$ mkdir ~/work/docker-LEMP
$ cd docker-LEMP

# 自動
# 1) 以下の環境構築用シェルスクリプトをMacのローカルにダウンロード
# 2) Dockerをインストールしたディレクトリに格納
# 3) ワークディレクトリに移動
$ cd ~/work-DIR/

# 4) 以下のシェルを起動すれば、自動で環境構築可能
$ ls
build_LEMP-env.sh

$ bash build_LEMP-env.sh
Creating network "docker-lemp_default" with the default driver
Creating docker-lemp_db_1 ... done
Creating docker-lemp_php_1 ... done
Creating docker-lemp_phpmyadmin_1 ... done
Creating docker-lemp_nginx_1 ... done

# docker-LEMPが作成されたことを確認
$ ls -la
drwxr-xr-x 7 yoshi staff 224 Apr 15 18:10 docker-LEMP

【ソースコードはこちら】
build_LEMP-env.sh(ローカルのMacに環境構築をするシェルスクリプト)

2. 必要なファイルとディレクトリを作成する

# 手動 手動で作成
# 自動 「build_LEMP-env.sh」で作成される

必要なファイルとディレクトリはこちら

docker-LEMP/
├── docker-compose.yml
├── mysql/
│ └── data/
├── nginx/
│ └── nginx.conf
├── php/
│ ├── Dockerfile
│ ├── mysql/
│ └── src/
└── www/
└── html/
└── index.php

【ソースコードはこちら】

build_LEMP-env.sh(ローカルのMacに環境構築をするシェルスクリプト)

3. docker-compose.ymlを作成する

# 手動 手動で作成
$ touch docker-compose.yml

# 自動 「build_LEMP-env.sh」で作成される

【ソースコードはこちら】
build_LEMP-env.sh(ローカルのMacに環境構築をするシェルスクリプト)

4. Dockerイメージをビルドする

$ cd docker-LEMP
$ docker-compose build

5. コンテナを起動する

$ docker-compose up -d

6. 動作確認

# Nginx
curl http://localhost:8080

# phpmyadmin
curl http://localhost:8888

ID root
PASS secret
# インストール後の確認

ex)
# APサーバーのコンテナIDを確認
$ docker ps

# APサーバーにログイン
$ docker exec -it <コンテナIDまたは名前> bash
# dpkg --list | grep nginx

# reslt
ii nginx 1.23.4-1~bullseye arm64 high performance web server
ii nginx-module-geoip 1.23.4-1~bullseye arm64 nginx GeoIP dynamic modules
ii nginx-module-image-filter 1.23.4-1~bullseye arm64 nginx image filter dynamic module
ii nginx-module-njs 1.23.4+0.7.11-1~bullseye arm64 nginx njs dynamic modules
ii nginx-module-xslt 1.23.4-1~bullseye arm64 nginx xslt dynamic module

7. 動作確認に問題なければ、開発を実施

・開発中で作成したコード基本的に永続化される
・念の為のバックアップは以下のシェルを実行すればバックアップされる

$ bkup_src.sh

【ソースコードはこちら】

bkup_src.sh(ソースコードをMacのローカルに作成するシェルスクリプト)

8. GitHub上でPRをマージ・関連ブランチを削除・Issueをクローズ(任意)

GitHub上で以下の手順を実施

GitHub上でPRをマージする場合

1) プルリクエストを開く
2) "Merge"ボタンをクリック
3) マージしたいベースブランチを選択
4) "Confirm merge"ボタンをクリック
5) マージが完了すると、マージされたコミットがベースブランチに反映される

関連するブランチを削除する手順

1) リポジトリのページを開く
2) Pull requestsタブをクリック
3) 削除したいブランチを選択
4) 右側の「Delete branch」をクリックする
5) 確認メッセージが出るので、Deleteをクリック
6) これでIssueがクローズされ、関連するブランチが削除される

Issueをクローズ(一般的な方法)

1) Issueページを開く
2) 右側の「Close issue」をクリック
3) 確認メッセージが出るので、問題が解決された旨を記入して、Close issueをクリック
4) Issueをクローズしたら、そのIssueに関連するブランチを削除することができる
※GitHubの場合、ブランチ削除はPull Requestがマージされた後に行うことが推奨されている

【注意点】

  • Issueをクローズする場合、問題が解決した旨を記入する代わりに、クローズ理由を簡潔に記述することが推奨される
  • GitHubでは通常、ブランチを削除する前にリモートリポジトリからブランチを削除することが推奨されている
  • これにより、ローカルリポジトリのブランチが不要になっても、リモートリポジトリに残らないようになる

ローカルで不要なブランチを削除する手順

# 1) 不要なブランチを確認
$ git branch

# 2) 削除したいブランチを選択し、以下のコマンドを実施
$ git branch -d <ブランチ名>

# 3) 削除されたことを確認
$ git branch

【注意点】

  • 削除対象のブランチが現在チェックアウトされている場合は、-d オプションでは削除できないため、-D オプションを使用する必要がある

9. 開発が終了したら、Dockerの環境をリセット

  • 以下のコマンドを実行することで、Dockerの環境をリセットできる
  • ただし、データボリュームを使用していて、再利用しない場合は、docker volumeコマンドを使用してボリュームも削除する必要がある
  • 以下のコマンドを実行すると、全てのコンテナやネットワーク、ボリュームが完全に削除される
# Docker Compose で作成したすべてのコンテナを停止し、削除
# ※メンテナンスでホストOSを再起動する場合も、以下の手順でOK
# ※開発を再開する場合は、

# 1) Docker Composeで作成されたコンテナ・ネットワーク・ボリュームを削除 
$ docker-compose down

# 2) 現在実行されている全てのコンテナを停止(Docker Composeで管理されていないコンテナを停止・削除する場合に使用)
$ docker stop $(docker ps -aq)

# 3) 停止した全てのコンテナを削除
$ docker rm -f $(docker ps -aq)
# 作成したDIR(今回はdocker-LEMP)を削除
$ cd ../
$ rm -rf docker-LEMP

 

10. 次回再開発したい場合

# 1) 手動で環境を作成する、または環境構築用のシェルを起動する
 ※ build_LEMP-env.sh

# 2) Dockerイメージをビルドする
docker-compose build

# 3) コンテナを起動する
docker-compose up -d

エラー対応

構築時にエラーが発生した場合の対応は以下の通り

ポート番号競合

ポート番号競合

  • nginxが80番ポートを使用しようとしてるが、すでに他のプロセスが使用している場合エラーとなる
  • まず、docker-compose downコマンドで現在のDockerコンテナをすべて停止
  • 次にdocker ps -aコマンドですべてのDockerコンテナが停止されていることを確認
  • その後、ポート番号80を使用しているプロセスがあるかどうかを確認するために、以下のコマンドを実行
# 不要なDockerコンテナがあれば削除する
docker-compose down

# 実行中のコンテナを停止
# その後に削除
docker stop $(docker ps -q)
docker rm $(docker ps -a -q)

# port 80 を利用しているプロセスをストップする
sudo lsof -i :80
sudo apachectl stop
sudo kill -9

DB接続エラー

  • 本作業に関係ないコンテナを削除
  • Macを再起動
  • 手順をやりなおしたら解消した

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


上の計算式の答えを入力してください

CAPTCHA