はじめに
今年の4月から未経験で関西の受託開発企業に就職し、エンジニアとして働いている者です。これまでXAMPPを使ってローカルで開発を行っておりましたが、新しい技術にも挑戦したい考え、Dockerで開発環境を構築してみました。その時の復習として本記事を書きました。
間違い等ございましたらご指摘をバンバンいただけると幸いです。
対象者
- PHPの環境をDockerを使って構築をしたい方
- XAMPPからDockerへ移行したい方
目的
- DockerでXAMPPっぽい開発環境を構築し、phpMyAdminとphpinfoをブラウザで表示させる!
※MacBook Air M2 Sonoma14.4、windows 11で動作確認済みです。
※PHPのバージョン7.4.8、 MySQLのバージョン8.1の環境を作成します。
目次
章 | タイトル |
---|---|
1 | Dockerについて |
2 | ディレクトリ構成 |
3 | Dockerfile作成 |
4 | docker-compoes.yml作成 |
5 | 実際にコンテナを動かしてみる |
6 | 参考文献 |
1章 Dockerについて
Dockerを触るのが久しぶりだったので、主要な概念を改めて勉強し直しました。
Docker →コンテナと呼ばれる仮想環境の中でアプリケーションの作成、配布、実行などを行うためのプラットフォームです。(データやプログラムを隔離できる仕組みを提供しています。)コンテナを利用することで、開発やデプロイの効率化、環境の再現性の確保、システムの可搬性などのメリットがあります。
コンテナ→アプリケーションの実行に必要な要素をすべて含んでいる「箱」のようなもの。
イメージ→コンテナを作る設計図のようなもの。イメージをもとにコンテナが作られる。
ボリューム→コンテナ内で使われるデータを保持するための仕組み。コンテナによって作成される。
マウント→「取り付ける」という意味。コンテナに自分のPCのストレージの一部(これをボリュームと呼ぶ)をマウントする、といったように使う。マウントの方法は2種類あるみたいだが、それについては今後勉強しようと思います。
2章 ディレクトリ構成
├── docker
│ ├── mysql
│ │ ├── dockerfile
│ │ └── my.cnf
│ └── php
│ ├── dockerfile
│ └── php.ini
├── docker-compose.yml
└── public
└── index.php
ディレクトリ構成は上記のようになっています。
public配下にアプリケーションのフォルダやファイルを作成していくことを想定としています。
3章 Dockerfile作成
MySQL
MySQLのDockerfileは以下のような内容となっています。
FROM mysql:8.1
COPY ./docker/mysql/my.cnf /etc/my.cnf
- FROM・・・mysql:8.1とすることでDocker公式が提供しているMySQLイメージをインストールしている。
- COPY・・・ローカルにあるmy.cnfをインストールしたmy.cnfにコピー、上書きしている。(my.cnfファイルとはMySQLの設定ファイルです)
my.cnfは以下のような内容となっています。
[mysqld]
default_authentication_plugin=mysql_native_password
- 新しいユーザーを作成する際に使用されるデフォルトの認証方式を設定している。
PHP
PHPのDockerfileは以下のような内容となっています。
FROM php:7.4.8-apache
RUN apt-get update && apt-get install -y \
libonig-dev \
&& docker-php-ext-install pdo_mysql mysqli
COPY ./docker/php/php.ini /usr/local/etc/php/php.ini
- FROM・・・php:7.4.8-apacheとすることでDocker公式が提供しているPHPとApacheがセットになったイメージをインストールしている。
- COPY・・・ローカルにあるphp.iniをインストールしたphp.iniにコピー、上書きしている。(php.iniファイルとはPHPの設定ファイルです)
- RUN・・・各種パッケージのインストールを行っています。(-yは最新verでインストしてくれるオプション)バックスラッシュで改行できる。&&でコマンドとコマンドを繋いでいる。
php.iniは以下のような内容となっています。
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
- デフォルトのタイムゾーンを日本標準時に設定
- PHPの内部文字エンコーディングをUTF-8に設定
- マルチバイト文字列関数のデフォルトの言語設定を日本語に設定
4章 docker-compoes.yml作成
version: '3'
services:
# PHP
php:
container_name: php
build:
context: .
dockerfile: ./docker/php/Dockerfile
volumes:
- ./public:/var/www/html/
depends_on:
- db
ports:
- "80:80"
# MySQL
db:
container_name: mysql_host
build:
context: .
dockerfile: ./docker/mysql/Dockerfile
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_db
MYSQL_USER: test_user
MYSQL_PASSWORD: test_password
TZ: 'Asia/Tokyo'
volumes:
- ./public/docker/db/data:/var/lib/mysql
- ./public/docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./public/docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
# phpMyAdmin
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: root
ports:
- 8081:80
depends_on:
- db
5章 実際にコンテナを動かしてみる
ターミナルでdocker-comopose.ymlファイルの上のディレクトリに移動して、以下のコマンドを打ってコンテナを作成、起動していきます。
まず、Dockerfileからイメージを作成する。(このコマンドは、Dockerfileやdocker-compose.ymlを編集した時にも叩くコマンドです)
docker compose build
コンテナを作成、起動する。
docker compose up
phpMyAdminにアクセスする。http://localhost:8081/
※ユーザー名、パスワードともにroot
phpinfoにアクセスする。http://localhost:80/
両方にアクセスできたら完了です。
参考文献