DockerでPHP+DB+Laravelを構成してみる

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

長くなったので、続きは次回。

「DockerでPHP+DB+Laravelを構成してみる」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください