はじめに
業務でLaravel
の開発環境をdocker-compose
で構築することがありました。
しかし詳しいことは全く知らなかったので、自分で1から作ってみようと思います。
環境はWEB(nginx)
、PHP
、DB(MySQL)
サーバーの構成となります。
今回は目次の
3、4、5についてです。
1、2に関してはこちらをご覧ください。
目次
1. docker-compose.ymlについて
2. 必要なディレクトリ、ファイルの準備
3. nginxコンテナの作成 → 今回はここから
4. PHPコンテナの作成
5. Laravelプロジェクトの作成 → 今回はここまで
6. MySQLコンテナの作成
nginxコンテナの作成
それでは、nginx
コンテナの作成をしていきます。
前回作成したweb
ディレクトリ配下にある、Dockerfile
とdefault.conf
に書き込みを行い、それに伴いdocker-compose.yml
にもコンテナについて定義していきます。
laravel
└── docker
├── docker-compose.yml --> 書き込み
├── web
│ ├── Dockerfile --> 書き込み
│ └── default.conf --> 書き込み
└── php
│ ├── Dockerfile
│ ├── php.ini
└── db
├── Dockerfile
└── my.conf
1. nginxの設定ファイルdefault.confの作成
設定ファイルはlaravel公式ドキュメントを参考にしました。
server {
# サーバが待ち受けるポートの指定
listen 80;
listen [::]:80;
# ルートディレクトリの指定
root /var/www/html/public;
# ヘッダーの追加
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
# indexディレクティブの指定
index index.php;
# 文字コードの指定
charset utf-8;
# URIのパス毎の指定
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
# 404エラーが起きた際のページの指定
error_page 404 /index.php;
}
2. Dockerfileの作成
コンテナ作成に必要なDockerfile
を作成します。
# ベースイメージの指定
# FROM <イメージ>:<タグ>
FROM nginx:stable-alpine
# 作成した設定ファイルをnginxコンテナの設定ファイルにコピー
# COPY <コピー元> <コピー先>
COPY ./web/default.conf /etc/nginx/conf.d/default.conf
3. docker-compose.ymlの作成
上で作成したファイルを元にdocker-compose.yml
にnginx
コンテナを定義します。
# docker-composeのバージョン
version: "3"
# コンテナの定義
services:
# nginxコンテナ
web:
# コンテナ名
container_name: "web"
# コンテナ作成に使用するDockerfileのパス
build:
dockerfile: "./web/Dockerfile"
# ホストとコンテナのポート番号の対応付け
# <ホスト側のポート>:<コンテナ側のポート>
ports:
- "8080:80"
# volumeをバインド
# <ホスト側のパス>:<コンテナ側のパス>
# srcは後ほど作成するlaravelプロジェクト
volumes:
- "../src:/var/www/html"
以上でnginx
コンテナを起動する準備ができました。
コマンドで起動をします。
$ cd docker
$ docker compose up -d --build
以下のとおり正常に起動したのを確認し、http://localhost:8080にアクセスしてみましょう。
[+] Running 2/2
⠿ Network docker_default Created
⠿ Container web Started
しかし現段階だと、指定したroot配下にファイルがないためエラー画面が表示されてしまいます。
一旦このままPHP
コンテナの作成に進みたいと思います。
PHPコンテナの作成
nginx
コンテナと同様に、Dockerfile
とphp.ini
に書き込みを行い、
docker-compose.yml
にもコンテナについて定義していきます。
laravel
└── docker
├── docker-compose.yml --> 書き込み
├── web
│ ├── Dockerfile
│ └── default.conf
└── php
│ ├── Dockerfile --> 書き込み
│ ├── php.ini --> 書き込み
└── db
├── Dockerfile
└── my.conf
1. PHPの設定ファイルphp.iniの作成
タイムゾーンと言語の設定を定義します。
# タイムゾーンの指定
[Date]
date.timezone = "Asia/Tokyo"
# 言語の指定
[mbstring]
mbstring.language = "Japanese"
2. Dockerfileの作成
コンテナ作成に必要なDockerfile
を作成します。
# ベースイメージの指定
FROM php:fpm-buster
# 作成した設定ファイルをphpコンテナの設定ファイルにコピー
COPY ./php/php.ini /usr/local/etc/php/php.ini
# コンテナ内で作業する際のカレントディレクトリの指定
WORKDIR /var/www/html
3. docker-compose.ymlの作成
上で作成したファイルを元にdocker-compose.yml
にPHP
コンテナを定義します。
# docker-composeのバージョン
version: "3"
# コンテナの定義
services:
# nginxコンテナ
web:
### 省略 ###
# PHPコンテナ
php:
# コンテナ名
container_name: "php"
# コンテナ作成に使用するDockerfileのパス
build:
dockerfile: "./php/Dockerfile"
# volumeをバインド
volumes:
- "../src:/var/www/html"
以上でPHP
コンテナを起動する準備ができました。
コマンドで起動をします。
$ docker compose up -d --build
以下のとおり正常に起動したのを確認できました。
[+] Running 3/3
⠿ Network docker_default Created
⠿ Container php Started
⠿ Container web Started
Laravelプロジェクトの作成
Laravel
プロジェクトを作成するには、composer
やpdo_mysql
など各種インストールが必要です。
Dockerfile
にインストールする内容を記載し、イメージ構築時に必要なものをインストールするようにします。
1. Dockerfileの修正
既存のDockerfile
にインストールする命令を追記します。
# ベースイメージの指定
FROM php:fpm-buster
# 作成した設定ファイルをphpコンテナの設定ファイルにコピー
COPY ./php/php.ini /usr/local/etc/php/php.ini
# パッケージのインストール
RUN apt-get update \
&& apt-get -y install git zip unzip vim
RUN docker-php-ext-install pdo_mysql
# composerのインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
# コンテナ内で作業する際のカレントディレクトリの指定
WORKDIR /var/www/html
2. Laravelプロジェクトの作成
上記でインストールした内容を反映させるために再度コンテナを起動します。
$ docker compose up -d --build
正常に起動したのを確認し、PHP
コンテナ内でLaravel
プロジェクトを作成します。
$ docker compose exec php bash
$ composer create-project --prefer-dist "laravel/laravel=" .
カレントディレクトリはPHP
のDockerfile
で指定した/var/www/html
となり
nginx
のDockerfile
で指定したルート/var/www/html/public
は、作成したLaravel
プロジェクトのpublic
ディレクトリ配下を指します。
改めてhttp://localhost:8080にアクセスしてみましょう。
Laravel
の画面が確認できました。
ここまででフォルダ構成は以下のようになります。
laravel
└── docker
├── docker-compose.yml
├── web
│ ├── Dockerfile
│ └── default.conf
└── php
│ ├── Dockerfile
│ ├── php.ini
└── db
├── Dockerfile
└── my.conf
├── src -->laraveプロジェクト
まとめ
今回はnginx
とPHP
のコンテナ作成、Laravel
プロジェクトの作成まで行いました!
次はDB(MySQL)
コンテナを作成していきます!
参考