🦁
個人開発 docker compose 使って apache2 + PHP と MySQL が動く環境を作る
まえがき
- アウトプットの機会を増やすために個人開発を始めようと決意したものの、作るものが思い浮かばないため todo リストアプリを作成することにしました。
- 今回はその環境構築
- 本項に記載の情報はHOWTOではありません。作業した内容をメモしているだけですので、お手元で再現しようとする場合は自己責任でお願いします。
環境
- WSL2 (Win10 64bit)
- Ubuntu 22.04.2 LTS
- docker compose
- Apache 2.4.54
- PHP 8.1.16
- MySQL 8.0.32
- docker compose
- Ubuntu 22.04.2 LTS
フォルダ構成
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 のバージョンについて
- 記述方法のバージョンがたくさんあって、今回は最新の Compose 記法(3.9)を使用
- 詳しくはこちら https://docs.docker.jp/compose/compose-file/compose-versioning.html
Discussion