🦁

個人開発 docker compose 使って apache2 + PHP と MySQL が動く環境を作る

2023/03/05に公開

まえがき

  • アウトプットの機会を増やすために個人開発を始めようと決意したものの、作るものが思い浮かばないため todo リストアプリを作成することにしました。
  • 今回はその環境構築
  • 本項に記載の情報はHOWTOではありません。作業した内容をメモしているだけですので、お手元で再現しようとする場合は自己責任でお願いします。

環境

  • WSL2 (Win10 64bit)
    • Ubuntu 22.04.2 LTS
      • docker compose
        • Apache 2.4.54
        • PHP 8.1.16
        • MySQL 8.0.32

フォルダ構成

todo(今回は todo リストアプリを作るためこの名前です。好きな名前でOK)
├── docker-compose.yaml
├── app
│   └── index.html
├── mysql
│   └── Dockerfile
└── php
└── Dockerfile

手順

ディレクトリ& index.html 作成

$ mkdir app
$ mkdir mysql
$ mkdir php
$ touch app/index.html
  • 以下内容を入力して保存
<!-- index.html -->
<p>Hello World!</p>

Dockerfile 作成

PHP

$ touch php/Dockerfile
  • 以下の内容で保存
FROM php:8.1.16-apache
RUN apt update && apt install -y libonig-dev
RUN docker-php-ext-install pdo_mysql mysqli

WORKDIR /var/www/html

EXPOSE 80

MySQL

$ touch mysql/Dockerfile
  • 以下の内容で保存
FROM mysql:8.0.32

EXPOSE 3306

docker-compose.yaml 作成

$ touch docker-compose.yaml
  • 以下の内容で保存
version: '3.9'
services:
  php:
    build: ./php
    volumes:
      - ./app:/var/www/html
    ports:
      - "80:80"
    depends_on:
      - mysql

  mysql:
    build: ./mysql
    volumes:
      - ./mysql/data:/var/lib/mysql
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=password

ビルド&立ち上げ

$ docker compose up --build -d
  • localhost にアクセスして Hello World! と表示されることを確認
  • mysql コンテナに入って、 mysql にアクセスできることを確認
$ docker compose exec mysql /bin/bash
$ mysql -uroot -ppassword
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.32 MySQL Community Server - GPL

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

補足

libonig-dev について

  • 上に記載した PHP の Dockerfile より先に、以下の Dockerfile でビルドを試みたところエラーが出た
FROM php:8.1.16-apache
RUN apt-get update  \
  && docker-php-ext-install pdo_mysql mysqli mbstring

WORKDIR /var/www/html

EXPOSE 80
configure: error: Package requirements (oniguruma) were not met:

No package 'oniguruma' found
  • ググってみると mbstring の関連パッケージらしい。mbstring は日本語の正規表現を使用するために必要らしい。

  • 同じエラーに遭遇している人を発見、PHP のバージョンは違うが、どうやら libonig-dev というパッケージを代わりにインストールすればOKぽい

  • docker-php-ext-install ではなく、普通に apt でインストールしている点に注意

docker-compose.yaml のバージョンについて

Discussion