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
長くなったので、続きは次回。