Docker Composeを使用する | 自分、ぼっちですが何か? (taki-lab.site)
さぁ、ここから大事になるぞ
.devcontainer/app/Dockerfile
PHPの設定をします。
ここからLaravelのセットアップを行うので、composerをセッティングします。
FROM php:8.0-fpm
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
RUN apt-get update && apt-get install -y \
tzdata \
zip \
unzip \
&& pecl install xdebug \
&& docker-php-ext-install pdo_mysql \
&& rm -rf /var/lib/apt/lists/*
ENV TZ=Asia/Tokyo
.devcontainer/app/php.ini
[Logs]
log_errors = On
error_log = /dev/stderr
[Date]
date timezone = Asia/Tokyo
[mbstring]
mbstring language = Japanese
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_port = 9003
xdebug.client_host=host.docker.internal
xdebug.idekey = VSCODE
.devcontainer/db/Dockerfile
こちらはMySQLの設定を行います。
FROM mysql:8.0
COPY ./my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/conf.d/my.cnf
.devcontainer/db/my.conf
[mysql]
default-character-set=utf8mb4
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
[client]
default-character-set=utf8mb4
.devcontainer/devcontainer.json
VSCodeからリモート接続する設定ファイルです。
{
"name": "Laravel Basic",
"dockerComposeFile": "docker-compose.yml",
"service": "app",
"workspaceFolder": "/var/www/html",
"extensions": [
"felixfbecker.php-debug",
"felixfbecker.php-intellisense"
],
"settings": {
"editor.tabSize": 2
}
}
.devcontainer/docker-compose.yml
version: '3.8'
services:
app:
image: laravel/app:1.0
build: ./app
container_name: 'laravel1_app'
ports:
- '8000:8000'
stdin_open: true
tty: true
working_dir: '/var/www/html'
volumes:
- ./app/php.ini:/usr/local/etc/php/php.ini
- ../app:/var/www/html
depends_on:
- db
db:
image: laravel1/mysql:1.0
build: ./db
container_name: 'laravel1_db'
expose:
- "3306"
environment:
- TX=Asia/Tokyo
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=my
- MYSQL_USER=my
- MYSQL_PASSWORD=my
volumes:
- ../db/database:/ver/lib/mysql
- ../db/init:/docker-entrypoint-initdb.d
app/.vscode/lanch.json
PHPをVSCode上でデバッグ実行するための設定ファイルです。
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9003
},
{
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9003
}
]
}
app/sample/は後ほどLaravelセットアップ時に作成されるので、今は削除しておいて大丈夫です。
db/databaseもDB構築時に作成されるフォルダなので、削除しておいて大丈夫です。
db/init/01_create_table.sql
create table books
(
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(100),
insert_timestamp DATETIME DEFAULT NULL
);
db/init/02_insert_data.sql
INSERT INTO books VALUES(1, 'プログラミング言語C', current_timestamp);
INSERT INTO books VALUES(2, 'やさしいコンピュータ-科学', current_timestamp);
INSERT INTO books VALUES(3, 'ゲーテル、エッシャー、バッハーあるいは不思議の環', current_timestamp);
INSERT INTO books VALUES(4, 'TeXブック コンピュータによる組版システム', current_timestamp);
INSERT INTO books VALUES(5, '人月の神話 狼人間を撃つ銀の弾はない', current_timestamp);
db/.gitignore
データベースの中身はgitにコミットから除外させます。
/db/database
長くなったので、続きは次回。