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

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

ITニュース(04/29)

[三井公一の「スマホカメラでブラブラ」] 「iPhone 14」「iPhone 13」「iPhone SE(第3世代)」撮り比べ! オススメの機種は? – ケータイ Watch

ホンダ・GSユアサ、日本国内にEV電池工場 4000億円規模 – 日本経済新聞

画像生成AI “クリエーターの権利脅かされる” 法整備など提言 – nhk.or.jp

<ワタシは家事ロボット?>家族は大切!でも、ワタシだって自分の人生を楽しみたい!【第6話まんが】 – ママスタセレクト

米Amazonがうっかり掲載、「Beats」の新しいノイキャンイヤフォンが今後登場か スケルトンもある – ITmedia NEWS

家電からインテリアまで幅広い! 今月ギズ屋台で売れた人気アイテム3選 – GIZMODO JAPAN

Steamでゲームを販売する上で重視するべきポイントをまとめたワークシートが公開中、とにかくウィッシュリストに登録されることが大事 – GIGAZINE(ギガジン)

povo2.0で300MBもらえる プロモコード無料配布 – ITmedia NEWS

Pixel Fold。画面やカメラ、価格など多くの仕様がリークされる – すまほん!! – すまほん!!

「高い」「時代遅れ」 あれだけ騒がれた「メタバース」、早くもこんなに残念な状態に – Newsweekjapan

VAIO P復活!? リファービッシュPCと周辺デバイスで「VAIO第2章」スタート:スクープ! – ITmedia PC USER – ITmedia PC USER

ソニーがXperia新製品を5月11日に発表へ 「Xperia 1 V(仮)」登場か – ITmedia Mobile – ITmedia Mobile

機械獣が闊歩するマルチ対応オープンワールドサバイバルFPS『Karagon』正式リリース!ロボットを修理して搭乗し終末世界を冒険【今週のインディー3選】 – Game*Spark

ZENAIM、ゲーミングキーボード「ZENAIM KEYBOARD」を5月16日より販売! 価格は48180円に 自動車部品メーカー・東海理化が手掛けるゲーミングギア第1弾 – GAME Watch

機能的なのは当然。しかもデスクを彩ってくれるおしゃれガジェット3選! – GIZMODO JAPAN

骨伝導イヤホン派の私がAirPods Proを使って感じたこと – GIZMODO JAPAN

「現時点で完全回復の予定なし」 Google Cloudのパリリージョンで障害 データセンター浸水 発生から27時間 – ITmedia NEWS

定番音楽プレイヤー「foobar2000」v2.0が公開 ~12年ぶりのメジャーバージョンアップ!/x64/ARMネイティブ対応、ライト・ダークモード対応、各所の高速化を実現 – 窓の杜

「Pixel 7a」の公式資料がリーク。ワイヤレス充電、64MPカメラなどが確定 – HelenTech

ChatGPTアカウントの転売、ダークウェブで増加 制限回避のため需要高まる – ITmedia NEWS

経済ニュース(04/29)

米国株、ダウ反発 メタ急伸でハイテク中心に買い ナスダックは2%高 – 日本経済新聞

豊田自動織機が排ガス認証で不正、国内トップ企業故の慢心か – ITpro

米地銀 ファースト・リパブリック・バンク株価急落 警戒強まる – nhk.or.jp

北電、過去最大884億円の赤字 23年3月期連結決算|北日本新聞webunプラス – 北日本新聞社 webun

中野美奈子が四国電力グループの総合設備企業・四電工の社外取締役に内定 – ニッカンスポーツ

経済同友会の新たな代表幹事・新浪氏、少子化対策の財源議論は「時期尚早」(2023年4月27日) – ANNnewsCH

暖房機器のコロナ、2階建て新幹線E4系を衣類乾燥除湿機で復活させる – 読売新聞オンライン

画像AIは「著作権侵害」 イラスト画家ら法規制訴え – 産経ニュース

日産の23年3月期、純利益2%増に上方修正 一転増益に – 日本経済新聞

ホンダ・GSユアサ、日本国内にEV電池工場 4000億円規模 – 日本経済新聞

米GDP、1-3月は1.1%増に減速-設備投資と在庫落ち込む – ブルームバーグ

ChatGPTに「会話を学習させない」モードが追加。設定方法はこちら – GIZMODO JAPAN

銀行窓口で他行振り込みしたら990円…三菱UFJが10月に最大550円引き上げ – 読売新聞オンライン

「バーグルエン哲学・文化賞」に哲学者の柄谷行人さん – nhk.or.jp

コクヨ商品422万個回収 中国「健康に悪影響」 – 産経ニュース

アクティビジョン・ブリザード英国CMAの買収却下受け決算繰上げ発表―売上高前年同期比35%増で好調アピール – Game*Spark

トヨタ系8社の24年3月期、7社が増益 デンソーは最高 – 日本経済新聞

「恐怖しかなかったです」ドライブレコーダーが捉えた“衝撃の瞬間”2連発! 信号待ちで予期せぬ事態が…|TBS NEWS DIG – TBS NEWS DIG Powered by JNN

米IT大手幹部相次ぎ来日 自民党議員らと意見交換 – 産経ニュース

セブン元オーナーに高裁も賠償命令、総額1億円超 「異常な顧客対応」が原因と認定 – 産経ニュース