Docker でサクッと構築!PHP 8.3 + MySQL + phpMyAdmin 開発環境の作り方(Mac編)

docker

PHP の開発環境を毎回ローカルにインストールして設定して…という作業、そろそろやめたくありませんか?

この記事では、Docker を使って「PHP 8.3 + MySQL + phpMyAdmin」環境をまとめて構築する手順を、初心者でも迷わないように一つずつ丁寧に解説していきます。

Docker Compose の設定ファイルを用意して、docker compose up するだけで、

ブラウザから PHP と phpMyAdmin にアクセスできる、便利な開発環境が完成します。

これから一緒に、再現性が高くて壊してもすぐ作り直せる、快適な PHP 開発環境を作っていきましょう。

Dockerを環境にインストール

まずは Docker を使えるように、Docker Desktop for Mac をインストールします。Mac なら GUI で簡単にセットアップできるので、ここはサクッと進めてしまいましょう。

▶︎ Step 1:Docker Desktop をダウンロードする

  1. 公式サイトへアクセス https://www.docker.com/products/docker-desktop/
  2. 「Download Docker Desktop」 ボタンにマウスをホバーし、環境にあったインストラーをクリック。
Screenshot

▶︎ Step 2:アプリケーションをインストール

  1. ダウンロードした Docker.dmg を開きます。
  2. 表示されたウインドウで Docker アイコンを Applications フォルダにドラッグ&ドロップ
  3. インストールが完了したら、Applications フォルダから Docker.app を起動します。
    • 初回は以下のような画面がでるが開くをクリック
  • Acceptをクリック
Screenshot
  • recommendedでFinish
    • パスワードを要求されるのでPCのパスワードをいれる
    • その後にいくつかダイアログがでるがyesで進めばOK
  • この画面が出たら右上のSkipでOK

    • 初回起動時に Docker アカウントでのサインイン画面が表示されますが、
      今回はローカル開発で使うだけなので 「Skip」ボタンをクリックしてスキップ してかまいません。
  • アンケートがでるがこれもskip
  • Docker Desktop のインストールが完了すると、上のような管理画面(Dashboard)が表示されます。
    ここから現在動いているコンテナの一覧を確認したり、イメージ・ボリュームの管理を行うことができます。
    まだ何も起動していないため空の状態ですが、これで Docker が正しく動作していることが確認できました。

▶︎ Step 3:プロジェクトフォルダの作成

まずは今回の Docker 環境を置くためのフォルダを作ります。ここでは例として、ホームディレクトリ直下にdockerフォルダを作成しそこに

php83-mysql-phpmyadmin

を作成します。(お好きな場所で大丈夫です)

mkdir -p ~/docker/php83-mysql-phpmyadmin
cd ~/docker/php83-mysql-phpmyadmin

▶︎ Step 4:docker-compose.yml を作成する

お好きなエディターでdocker-compose.ymlを作成します。

  • vscodeの場合
cd ~/docker/php83-mysql-phpmyadmin
code docker-compose.yml
  • vimの場合
cd ~/docker/php83-mysql-phpmyadmin
vi docker-compose.yml
  • 以下の内容を入力します
    • 8080:80はホスト側ポート : コンテナ側ポート
    • ホストポート番号は慣例にしたがって8080を使うように書いてありますがポートの競合を防ぐために18080などにするのもいいでしょう。
services:
  app:
    image: php:8.3-apache
    container_name: php83-app
    ports:
      - "8080:80"
    volumes:
      - ./src:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    container_name: mysql-db
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: app_db
      MYSQL_USER: app_user
      MYSQL_PASSWORD: app_password
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: phpmyadmin
    depends_on:
      - db
    environment:
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: rootpassword
    ports:
      - "8081:80"

volumes:
  db_data:

ざっくり説明

  • app
    • php:8.3-apache イメージを使用
    • ホストの ./src をコンテナ内の /var/www/html にマウント
    • http://localhost:8080 で Apache(php) にアクセス
  • db
    • mysql:8.0 を使用
    • 初期 DB 名やユーザー、パスワードを環境変数で指定
    • データは db_data という名前付きボリュームに永続化
  • phpmyadmin
    • ブラウザから MySQL を操作するための GUI
    • http://localhost:8081 でアクセス
    • db サービス(MySQL)を PMA_HOST で指定

▶︎ Step 5:srcフォルダを作成して、テスト用index.phpを用意

Apache(PHP) コンテナは ./src を /var/www/html にマウントしているので、

ここに PHP ファイルを置くとブラウザで表示できる しくみ。

まずは動作確認用の簡単な PHP を置こう。

  • srcフォルダを作成
    • ターミナルでプロジェクトディレクトリにいる状態で:
mkdir src
cd src
  • index.phpを作成
    • 以下はvscodeの場合
code index.php
  • 内容は以下
<?php
phpinfo();

▶︎ Step 6:Dockerコンテナ起動

いよいよDockerコンテナを起動します。

docker compose up -d
  • m2 mac環境で行ったところ最後に気になるメッセージが出ていますが、基本動くので問題ありません。

docker compose up -d

docker compose up -d の -d は detached(デタッチ)モード の意味で、コンテナをバックグラウンドで起動します。
ターミナルを占有しないため、起動後も通常の作業が行えるようになります。

起動確認

docker compose ps
  • 以下のように起動が確認できれば成功だ!

docker compose ps

現在稼働中のコンテナの一覧を表示
「ps」は process status の略で、コンテナの状態やポート割当を確認するために使われます。

ブラウザで確認

  • ブラウザから以下のアドレスを入力
    • ポート番号を変更した人はそのポート番号をいれること
http://localhost:8080/
  • 以下のように表示されれば成功だ
  • phpmyadminは以下のアドレス
http://localhost:8081

コンテナ停止

  • 最後にコンテナを停止しよう
docker compose down

docker compose down

• 起動中のコンテナをすべて停止
• コンテナを削除
• 付随するネットワークも削除
※ ただし、DB データ(名前付きボリューム)は残るので安心
(db_data の中に保存され続ける)

Docker環境構築完了!

今回はDocker を使ってPHP 開発環境を構築しましたが、Python + Django や Node.js、Laravel など、あらゆる開発で活用できます。

“環境構築が最速で終わる” というのは、現代開発の大きなアドバンテージです。
ぜひともライフワークにDocker加えておきましょう!

docker
スポンサーリンク
シェアする
mjpurinをフォローする

コメント

タイトルとURLをコピーしました