6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Docker】PHP+MySQL+phpMyAdminの環境構築メモ

Last updated at Posted at 2022-09-21

とりあえずDockerに慣れる意味での簡易的な環境構築方法となります。
Docker初心者が書いているので、おかしな点など有りましたらご指摘いただけると助かります。

Dockerデスクトップをインストール

まずはDockerデスクトップをインストール。
インストール方法はこちらの記事様がわかりやすく解説して下さってます(Windowsです)

必要なファイルを準備

以下の構成でファイル・フォルダを作成。

┌─ html
│  └ index.php
├─ php.ini
└─ docker-compose.yml

※MySQLのフォルダは後で自動作成されるので作成不要。
なお、解説サイトによってはDocekerfile(imageの設計図のようなもの)を別途作成している場合もある。Docekerfileはオリジナルのimageを使用する場合等には必要だが、今回のように既存のimageをそのまま使用するだけなら無くてもOK。

各ファイルの中身

index.php

<?php echo "hello"; ?>

php.ini

[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

docker-compose.yml(内容の意味については当記事下部に別途記載)

version: '3'

services:
  php:
    image: php:7.4.8-apache
    volumes:
      - ./php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
    ports:
      - 8080:80
  mysql:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=test
      - MYSQL_USER=test
      - MYSQL_PASSWORD=test
      - TZ=Asia/Tokyo
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=test
      - PMA_PASSWORD=test
    ports:
      - 4040:80
    volumes:
      - ./phpmyadmin/sessions:/sessions

コンテナ起動

下記コマンドでimageの作成とコンテナ作成・起動が行われる。-dはバックグラウンドで実行するためのオプション。

$ docker-compose up -d 

起動が完了するとdocker-compose.yml等と同じ階層にmysqlフォルダが自動作成されている。
なお、起動中のコンテナ一覧は下記コマンドで確認できる。

$ docker ps

-aオプションを付けてdocker ps -aとすると、起動していないコンテナも表示される。

ちなみに、今回のようにdocker-compose.ymlに書かれた複数のコンテナを同時に作成・起動する場合はdocker-compose upを使用するが、単一のコンテナの作成・起動であればrunコマンドを使用する。そのあたり下記記事様がわかりやすくまとめて下さってます。

動作確認

http://localhost:8080/
にアクセスすると、index.phpの内容が表示されるはず。

http://localhost:4040/
にアクセスすると、phpMyAdminの管理画面が表示されるはず。

コンテナの停止・再開・削除

停止

$ docker-compose stop

再開

$ docker-compose start

削除

$ docker-compose down

なお、downによりコンテナは削除されるがimageが削除される訳ではないので、「stopで停止しstartで再開」でも、「downで削除しupで再作成」でも時間的にはあまり変わらない。

docker-compose.ymlの内容について

長いので上半分のみ。

version: '3' 

services:
  php:
    image: php:7.4.8-apache
    volumes:
      - ./php.ini:/usr/local/etc/php/php.ini
      - ./html:/var/www/html
    ports:
      - 8080:80
  mysql:
    image: mysql:5.7
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root

version:
docker-compose.ymlの書式のバージョン。Docker Desktopがバージョンアップしても古い書式に対応できるように記載する。
services:
ここに「php」や「mysql」などのコンテナ名を書く。
image:
コンテナで使用するDocker Image を指定。
volumes:
少しややこしいので後述します。
ports:
ホストPCのポート番号とDockerコンテナのポート番号を紐づけるための設定。上記phpの設定で言うと8080がホストで80がコンテナのポート番号。
environment:
環境変数の設定。各コンテナに対しての設定を記述する。myaqlの場合ならパスワードやユーザー名などをここで設定している。

volumesについて

volumesでは何を設定する?
ホストPCのディレクトリを、Dockerコンテナのディレクトリにマウントするための設定など。

マウントとは?
機能としてはWindowsのショートカットフォルダ(Macならエイリアス)のイメージに近いと思う。Dockerコンテナ内のディレクトリにホストPC内のディレクトリを紐づけることで、DockerコンテナからホストPCのファイルへアクセスできるようになる。

マウントが必要な理由1:ファイル編集が簡単
例えばindex.phpの内容を編集する場合に、マウントしていればホストPC内のindex.phpを編集するだけでコンテナに自動反映される。

マウントが必要な理由2:データの永続化が出来る
通常、docker-compose downコマンド等でコンテナを削除すると、当然コンテナ内のデータも消えてしまう。しかしマウントしていればホストPC内にデータが残っているので、コンテナを再作成した際などにそのまま使用できる。

実際にマウントできてるか確認する
今回のphpコンテナ(実際にはphp+appach)の例で言うと、volumesの2行目に./html:/var/www/htmlと書かれている。これはホストPCの./htmlとコンテナ内の/var/www/htmlが対応していることを表している。
なので、docker-compose exec php bashコマンドでコンテナの中に入ってみると、ホストPCのhtmlフォルダ内のindex.phpと同じものがコンテナ内の/var/www/htmlフォルダ内にあることが確認できる。

 

参考にさせて頂いた記事様

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?