Dockerを使ってLaravelの開発環境を作成します。Dockerをインストールするところから、phpのファイルをブラウザで表示、mysqlに接続、Laravelをインストール、Laravelの初期画面を表示させるところまでを見ていきます。
最終的なファイル構成
最終的なファイル構成になります。既存のDocuentsフォルダーにlaravel_projectディレクトリを作成して作業をしていきます。
Dockerをインストールして起動する
下のURLから使っているPCに対応したDocker Desktopをダウンロードします。
Docker Desktopをインストールしたら、アプリを起動させます。起動が成功したらDockerのアイコンが表示されます。
ターミナルで確認する
起動できていると、Dockerのバージョンが表示されます。
$ docker --version
Docker version 20.10.10, build b485636
phpのファイルをブラウザで表示
laravel_projectディレクトリで作業をするので、Documentsディレクトリに移動して、laravel_projectディレクトリを作成して、laravel_projectディレクトリに移動します。
$ cd Documents
$ mkdir laravel_project
$ cd laravel_project
必要なファイルを作成する
docker-compose.ymlファイルとsrcディレクトリを作成します。
$ touch docker-compose.yml
$ mkdir src
phpディレクトリを作成します。
$ mkdir ./src/php
$ touch ./src/php/Dockerfile
$ touch ./src/php/php.ini
nginxディレクトリを作成します。
$ mkdir ./src/nginx
$ touch ./src/nginx/nginx.conf
VScodeを使ってファイルの中身を書いていきます。laravel_projectディレクトリでVScodeを起動させます。
$ code .
ターミナルからVScodeを起動させる方法
2023年01月10日
Websrc/php/Dockerfile
FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y zlib1g-dev mariadb-client git zip unzip vim libzip-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
src/php/php.ini
phpの設定ファイル
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
src/nginx/nginx.conf
server {
listen 80;
server_name _;
root /var/www/html;
index index.php index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(ht|svn|git) {
deny all;
}
}
5: ドキュメントルートの指定、/var/www/html内のindex.*ファイルに接続します。
docker-compose.yml
version: '3.9'
services:
php:
build: ./src/php
volumes:
- ./src/app:/var/www/html
nginx:
image: nginx:latest
ports:
- 8000:80
volumes:
- ./src/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./src/app:/var/www/html
depends_on:
- php
コンテナを起動すると、10: localhost:8000ポートでブラウザに接続することができます。
6, 13: ローカルの./src/appディレクトリと/var/www/htmlディレクトリを同期させています。
ファイルを保存できたらコンテナの作成と起動を行います。
$docker compose up -d --build
イメージのビルド、コンテナの作成、起動ができました。
src/app/index.phpファイルを作成してブラウザでアクセスする
<?php
phpinfo();
ブラウザで localhost: 8000 もしくは 127.0.0.1:8000 と入力してアクセスすると、phpのバージョン情報が表示されます。
mysqlをインストールして接続する
設定ファイルのmy.cnfファイルを作成、docker-compose.ymlファイルにコードを追加して、dbディレクトリにmysqlをインストールしてコンテナを作成・起動をしていきます。mysqlをブラウザで確認するためにphpmyadminコンテナも作成します。
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
default-time-zone = 'Asia/Tokyo'
[mysqldump]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
version: '3.9'
services:
php:
build: ./src/php
volumes:
- ./src/app:/var/www/html
depends_on:
- db
nginx:
image: nginx:latest
ports:
- 8000:80
volumes:
- ./src/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./src/app:/var/www/html
depends_on:
- php
+ db:
+ image: mysql:8.0
+ ports:
+ - 3306:3306
+ command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
+ volumes:
+ - ./src/data:/var/lib/mysql
+ - ./src/my.cnf:/etc/mysql/conf.d/my.cnf
+ environment:
+ MYSQL_ROOT_PASSWORD: root
+ MYSQL_DATABASE: laravel_project
+ MYSQL_USER: user
+ MYSQL_PASSWORD: password
+ phpmyadmin:
+ image: phpmyadmin/phpmyadmin:latest
+ ports:
+ - 8080:80
+ depends_on:
+ - db
+ environment:
+ PMA_HOST: db
+ MYSQL_ROOT_PASSWORD: root
- 30: mysqlに root のパスワードで接続することができます。
- 31-33: mysql内に laravel_project databaseが作成されます。
- 38: 8080ポートでphpmyadminに接続します。
ファイルができたので、コンテナを停止・作成・起動を行います。
$ docker compose down
$ docker compose up -u --build
phpmyadminで確認する
ブラウザで http://localhost: 8080 もしくは 127.0.0.1:8080 と入力してアクセスすると、phpmyadminに接続できます。
ユーザー名: root パスワード: rootで接続します。
mysqlに接続できているのと、laravel_project データベースが作成されています。後ほどこのデータベースにLaravelから接続する設定をしていきます。
phpファイルからmysqlに接続する
PDOを使ってmysqlに接続するために、./src/php/Dockerfileにコードを追加します。確認用にindex.phpファイルを変更します。
FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/
RUN apt-get update \
&& apt-get install -y zlib1g-dev mariadb-client git zip unzip vim libzip-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
+ && docker-php-ext-install pdo_mysql
\ と一行を追加します
<?php
- phpinfo();
+ $pdo = new PDO("mysql:host=db;dbname=laravel_project", "root", "root");
+ var_dump($pdo);
- 21: host=db
- 31: dbname=laravel_project
- 30: 2個目のroot
ファイルができたので、コンテナを停止・作成・起動を行います。
$ docker compose down
$ docker compose up -u --build
ブラウザで http://localhost: 8080 もしくは 127.0.0.1:8080 と入力してアクセスして、object(PDO)#1 (0) { }と表示されてれば接続できています。
Laravelをインストールして初期画面を表示させる
Laravelをインストールするためにcomposerをインストールします。Dockerfileにコードを追加します。
FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/
+ ENV COMPOSER_ALLOW_SUPERUSER=1 \
+ COMPOSER_HOME=/composer
+ COPY --from=composer:2.0 /usr/bin/composer /usr/bin/composer
RUN apt-get update \
&& apt-get install -y zlib1g-dev mariadb-client git zip unzip vim libzip-dev \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& docker-php-ext-install pdo_mysql
一旦コンテナを停止・作成・起動を行います。
$ docker compose down
$ docker compose up -u --build
composerが使えるようになったので、composerを使ってLaravelをインストールしていきます。
phpコンテナのシェルに接続する
$ docker compose exec php bash
続いて現在のディレクトリにLaravelのインストールを行います。今回はversion8をインストールします。version指定しなければ最新版がインストールされます。
composer create-project --prefer-dist laravel/laravel=8.* .
esit
/var/www/html/にLaravelがインストールできました。
Laravelのデータベース設定
./src/app/.envファイルのデータベースの設定の値に、作成済みのlaravel_projectデータベースの情報を入力していきます。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_project
DB_USERNAME=user
DB_PASSWORD=password
作成済みのlaravel_projectデータベースの情報は docker-compose.ymlファイルに記載されています。
version: '3.9'
services:
php:
build: ./src/php
volumes:
- ./src/app:/var/www/html
depends_on:
- db
nginx:
image: nginx:latest
ports:
- 8000:80
volumes:
- ./src/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
- ./src/app:/var/www/html
depends_on:
- php
db:
image: mysql:8.0
ports:
- 3306:3306
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./src/data:/var/lib/mysql
- ./src/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_project
MYSQL_USER: user
MYSQL_PASSWORD: password
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
ports:
- 8080:80
depends_on:
- db
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: root
artisan migrateコマンドでLaravel内にデータベースを構築します。
php artisan migrate
ブラウザからLaravelの初期画面にアクセス
/var/www/html/publicに接続するとLaravelの初期画面を表示させることができます。
localhost:8000番で/var/www/html/publicに接続できるようにしていきます。
server {
listen 80;
server_name _;
+ root /var/www/html/public;
index index.php index.html;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(ht|svn|git) {
deny all;
}
}
5: 8000ポートに接続すると./src/app/publicディレクトリに接続できるようになりました。
以上でDockerを使ってLaravelの環境構築ができました。