目次
資料収集中
Dockerコンテナの作成
ターミナル(Ubuntu)を開き、Docker用のフォルダーに移動して、今回のプロジェクト用のフォルダーを作る
mkdir sample5プロジェクト用フォルダーに移動してVSCodeを起動する
cd sample5
code . &フォルダの作成
コンテナ定義はdockerフォルダ下に作成
- appコンテナ:(PHP+Laravel)
- dbコンテナ:(MySQL)
- webコンテナ:(nginx)
下記を参照してフォルダを作る
.
├── docker
│ ├── app
│ │ ├── Dockerfile
│ │ └── php.ini
│ ├── db
│ │ ├── Dockerfile
│ │ └── my.conf
│ └── web
│ ├── Dockerfile
│ └── default.conf
├── docker-compose.yml
└── srcappコンテナ(PHP+Laravel)
まずはLaravelの開発環境を構築するための、appコンテナを作成します。
- docker-compose.ymlへの記述(共通ファイル)
- appコンテナ用のDockerfile
- appコンテナ用の設定ファイル(php.ini)
docker-compose.yml
version: "3.9"
services:
app:
build:
context: .
dockerfile: ./docker/app/Dockerfile
volumes:
- ./src/:/app
Dockerfile
参考サイトではphpのバージョンが8.0だったが、導入したいLaravelの推奨の関係で8.1とした。またcomposerが2.0となっていたが、2.2とした。
FROM php:8.1-fpm
ENV TZ Asia/Tokyo
RUN apt-get update && \
apt-get install -y git unzip libzip-dev libicu-dev libonig-dev && \
docker-php-ext-install intl pdo_mysql zip bcmath
COPY ./docker/app/php.ini /usr/local/etc/php/php.ini
COPY --from=composer:2.2 /usr/bin/composer /usr/bin/composer
WORKDIR /appphp.ini
zend.exception_ignore_args = off
expose_php = on
max_execution_time = 30
max_input_vars = 1000
upload_max_filesize = 64M
post_max_size = 128M
memory_limit = 256M
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /var/log/php/php-error.log
default_charset = UTF-8
[Date]
date.timezone = Asia/Tokyo
[mysqlnd]
mysqlnd.collect_memory_statistics = on
[Assertion]
zend.assertions = 1
[mbstring]
mbstring.language = Japanese起動チェック
一旦起動
docker-compose up -d --build起動したコンテナを確認する
docker-compose psコンテナの中に入ってみる
docker-compose exec app bash色々チェック
# Dockerfileの「WORKDIR /app」で指定したカレントディレクトリ通りか確認
pwd
# Dockerfileの「WORKDIR /app」で指定したカレントディレクトリ通りか確認
php -v
# Composerのバージョン確認
composer -v
# gitのバージョン確認
git --version
# インストール済の拡張機能の一覧
php -m
# php.iniがコピー出来ているか確認
cat /usr/local/etc/php/php.iniコンテナから抜ける
exitwebコンテナ(nginx)
docker-compose.yml
ポートが記事の作者の方の都合で8081になっていたので、8080にした。
services:
api:
// 中略
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
ports:
- 8080:80
depends_on:
- app
volumes:
- ./src/:/appDockerfile(nginx)
FROM nginx:1.20-alpine
ENV TZ Asia/Tokyo
COPY ./docker/web/default.conf /etc/nginx/conf.d/default.conf
設定ファイル(default.conf)
server {
listen 80;
server_name example.com;
root /app/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
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; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass app:9000;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
コンテナを再起動する
docker-compose up -d --build確認
docker-compose exec web nginx -vdbコンテナ(MySQL)
docker-compose.yml(MySQL)
services:
// 中略
db:
build:
context: .
dockerfile: ./docker/db/Dockerfile
ports:
- 3306:3306
environment:
MYSQL_DATABASE: database
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_ROOT_PASSWORD: password
TZ: 'Asia/Tokyo'
volumes:
- mysql-volume:/var/lib/mysql
volumes:
mysql-volume:
Dockerfile(MySQL)
FROM mysql:8.0
COPY ./docker/db/my.conf /etc/my.conf
設定ファイル(my.conf)
[mysqld]
# character
character_set_server = utf8mb4
collation_server = utf8mb4_0900_ai_ci
# timezone
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# Error Log
log-error = mysql-error.log
# Slow Query Log
slow_query_log = 1
slow_query_log_file = mysql-slow.log
long_query_time = 1.0
log_queries_not_using_indexes = 0
# General Log
general_log = 1
general_log_file = mysql-general.log
[mysql]
default-character-set = utf8mb4
[client]
default-character-set = utf8mb4
コンテナを再起動する
docker-compose up -d --build確認
docker compose exec db mysql -VLaravel環境構築
Laravelのプロジェクトを作成したら、DBとLaravelを接続します。
そしてマイグレーションを行ってDBにテーブルを作成してから、MySQLにログインしてDBを使う動作確認をしたいと思います。
プロジェクトの作成
コンテナに入る。
docker compose exec app bashプロジェクトを作成
composer create-project --prefer-dist "laravel/laravel=10.*" .同期がかかっているのでVSCode側で見ているとsrcにファイル/フォルダが作成されていく。
パーミッションの変更
storageフォルダのパーミッションを変更
chmod 777 -R storage確認
バージョンチェック
php artisan -v動作チェック
- http://localhost:8080/にアクセス。
- Laravelの画面が表示されればOK!
DBの接続
- /src/.env
- docker-compose.ymlのenvironmentを見ながら各項目を修正
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
↓
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=user
DB_PASSWORD=password不採用:確認1
コンテナに入る
docker compose exec app bash確認
Laravelのデフォルトで用意されているマイグレーションファイル通りにテーブルが作成されるかどうか?
php artisan migrate確認2をするために、DBコンテナから抜けておく:exit
不採用:確認2
コンテナに入る
docker-compose exec db bashMySQLコンソール起動
パスワードを求められる:password
mysql -u root -p確認
use database;
show tables;- テーブルが表示されればOK
- MySQLコンソールとコンテナから抜けておく:exitを多分2回
Laravel Breezeの導入
環境整備
フロントエンドの依存関係管理とビルドプロセスにNode.jsとnpm(Node Package Manager)を使用するため、予めサーバーにインストールしておく必要がある。
コンテナに入る
docker-compose exec app bashNode.jsとnpmのインストール
(rootでない場合はsudoが必要と思われる)
apt-get update
apt-get install nodejs
apt-get install npmインストール後の確認。下記コマンドを実行してパスが返ればOK
which node
which npmLaravel Breezeのインストール
インストール
composer require laravel/breeze --dev
php artisan breeze:install blade不採用1
公式はこのような記述
composer require laravel/breeze --dev
php artisan breeze:install blade
php artisan migrate
npm install
npm run dev不採用2
composer require laravel/breeze
php artisan breeze:install途中でいくつか質問される。
- Which stack would you like to install?:0(blade)
- Would you like to install dark mode support?:no
- Would you prefer Pest tests instead of PHPUnit?:no
ここで、node.jsやnpmが入っていないとエラーになる。
確認
- http://localhost:8080/にアクセス
- 画面右上にLoginボタンが表示されていればOK!