はじめに
DockerでLaravelを構築した時にいろいろと問題にぶち当たり、メモ程度にまとめました。
目次
- nginxの構築
- MYSQLの構築
- PHPの構築
- Laravelプロジェクトの作成
- コンテナの作成
- おわりに
使ったもの
- Docker Desktop
- ubuntu 22.04.2 LTS
- nginx
- MYSQL 8.0.32
- PHP 8.2.3-fpm
- laravel
ディレクトリ全体像
Dockerのディレクトリの全体像を先に示しておきます。
$ tree
├── docker-compose.yml
├── mysql
│ └── my.ini
├── nginx
│ ├── Dockerfile
│ └── nginx.conf
└── php
└── Dockerfile
nginxの構築
docker composeを使うのでdocker-compose.ymlを編集しました。
version: '3.9'
services:
nginx:
image: nginx:latest
#Dockerfileのディレクトリ
build: ./nginx
container_name: nginx
volumes:
#コンフィグファイルの同期
./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
./src:/var/www/html
ports:
- 80:80
次にDockerfileを編集しました。
FROM nginx:latest
RUN service nginx start
次にnginxのコンフィグファイルを記載します。
server{
root /var/www/html/laravelのプロジェクト名/public;
listen *:80;
listen [::]:80;
index index.html index.php;
location /{
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
locationより下の処理は、書かないとwebページの表示ではなく、phpファイルがダウンロードされたので必要です。
以上でnginx関連は終了です。
MYSQLの構築
nginxの時のdocker-compose.ymlに追記をします。
version: '3.9'
services:
nginx:
image: nginx:latest
build: ./nginx
container_name: nginx
volumes:
./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
./src:/var/www/html
ports:
- 80:80
mysql:
image: mysql:8.0.32
container_name: mysql
volumes:
#コンフィグファイルの同期
./mysql/my.ini:/etc/my.ini
environment:
MYSQL_ROOT_PASSWORD: 管理者のパスワード
MYSQL_USER: ユーザー名
MYSQL_PASSWORD: ユーザーのパスワード
MYSQL_DATABASE: データベース名
ports:
3306:3306
MYSQLではDockerfileを使用しませんでした。次はmy.iniに文字コードについての処理を記載します。
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
以上でMYSQLは終了です。
PHPの構築
MYSQL同様、docker-compose.ymlに追記していきます。
version: '3.9'
services:
nginx:
image: nginx:latest
build: ./nginx
container_name: app-web
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./src:/var/www/html
ports:
- 80:80
mysql:
image: mysql:8.0.32
container_name: mysql
volumes:
- ./mysql/my.ini:/etc/my.ini
environment:
MYSQL_ROOT_PASSWORD: 管理者のパスワード
MYSQL_USER: ユーザー名
MYSQL_PASSWORD: ユーザーのパスワード
MYSQL_DATABASE: データベース名
ports:
- 3306:3306
php:
image: php:8.2.3-fpm
#Dockerfileのディレクトリ
build: ./php
container_name: php
volumes:
- ./src:/var/www/html
ports:
- 9000:9000
#PHPとmysqlを簡単に接続できるようにする
depends_on:
- mysql
次にDockerfileの処理です。
FROM php:8.2.3-fpm
RUN apt-get update && apt-get install -y libonig-dev && \
docker-php-ext-install pdo_mysql mysqli mbstring
必要なライブラリのインストールなどです。
Laravelプロジェクトの作成
DockerfileへcomposerとLaravelプロジェクト作成のコマンドを追記します。
FROM php:8.2.3-fpm
RUN apt-get update && apt-get install -y libonig-dev && \
docker-php-ext-install pdo_mysql mysqli mbstring
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN ./composer.phar create-project laravel/laravel laravelのプロジェクト名
以上ですべてのファイルが用意できました。
コンテナの作成
Ubuntuのコマンド上で以下を実行させます。
$ docker-compose up -d --build
これでnginx,mysql,phpのコンテナが作成されます。念のため以下のコマンドで確認しておきます。
$ docker-compose ps -a
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
nginx php:8.2.3-fpm "docker-php-entrypoi…" php 24 hours ago Up 12 hours 0.0.0.0:9000->9000/tcp
mysql mysql:8.0.32 "docker-entrypoint.s…" mysql 2 days ago Up 12 hours 0.0.0.0:3306->3306/tcp, 33060/tcp
php nginx:latest "/docker-entrypoint.…" nginx 12 hours ago Up 12 hours 0.0.0.0:80->80/tcp
全てのステータスがUpになった状態でlocalhostを表示し、Laravelの初期画面が表示されたら成功です!
おわりに
Qiitaの練習とDockerのメモのためにこの記事を作ったので端折るところや言葉足らずのところが多くても許してください。
それと、とりあえずLaravelを導入したかっただけなのでこれで自作コードが動かないかもしれないのでこのままの環境でLaravelの学習を続けていきたいと思います。