docker composeを使用してLAMP環境の構築を行います。
ポイントは以下の通りです。
webサーバコンテナとmysqlコンテナを生成する。
2つのコンテナを同じネットワークへ参加させる。
webサーバコンテナはドキュメントルートとローカル端末のディレクトリを共有させる。
mysqlコンテナは、データをローカル端末のディレクトリに共有させる。
目次
ディレクトリ構成
ディレクトリ構成は以下とします。
ディレクトリ or ファイル | 説明 |
---|---|
app | htmlやphpファイルなどを配置する為のディレクトリ |
docker-compose.yml | docker-compose.ymlファイル |
docker/web/Dockerfile | Dockerfileファイル |
docker/db/volume | データベース格納領域 |
定義ファイルの内容
定義ファイル(docker-compose.yml)の内容は以下の通りです。
以降は定義ファイルの記載内容について説明します。
version: '3'
services:
web:
container_name: Laravel5.8
restart: always
build:
context: .
dockerfile: ./docker/web/Dockerfile
privileged: true
ports:
- 4003:80
volumes:
- ./app:/www-contents
db:
container_name: Laravel_mysql_5.7
restart: always
image: mysql:5.7
ports:
- 3307:3306
volumes:
- ./docker/db/volume:/var/lib/mysql
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=sample
- MYSQL_USER=user
- MYSQL_PASSWORD=password
webサーバコンテナ
docker-compose.ymlで”web”と書かれた部分は、webサーバのイメージを生成する内容になります。
dockerファイルのビルド
指定したディレクトリにあるdockerファイルをビルドします。
dockerファイルのファイル名は “Dockerfile” として下さい。
build:
context: .
dockerfile: ./docker/web/Dockerfile
コンテナ名
docker コンテナ名を指定します。今回は Laravel5.8 としました。
container_name: Laravel5.8
ポートの開放
ポートを解放します。
ports:
- 4003:80
ディレクトリ共有
ホストOSとゲストOSのディレクトリを共有します。今回はホスト側の app というディレクトリとゲストOSはApacheのドキュメントルートを共有しています。
volumes:
- ./app:/www-contents
mysqlサーバコンテナ
docker-compose.ymlで”db”と書かれた部分は、mysqlイメージを生成する内容になります。
利用するイメージ
Webサーバのイメージを生成する場合、dockerファイルを利用しました。
mysqlコンテナの生成には、dockerファイルを利用したイメージを使用せず、docker hubに存在するmysqlイメージを指定し使用します。
image: mysql:5.7
環境設定
mysqlコンテナを生成する際に必要な環境設定値を指定します。
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=sample
- MYSQL_USER=user
- MYSQL_PASSWORD=password
ネットワーク
dockerネットワークは、docker composeを実行すると自動で生成されます。
最後に
docker composeの実行は、以下を参照して下さい。