PR

【簡単】DockerでPHPとMySQLの環境構築【コンテナ仮想化】

JavaScript
この記事にはアフィリエイト広告および広告が含まれています。

Dockerとは

Dockerはコンテナ仮想化を使ったアプリケーションを開発・配置・実行するためのオープンプラットフォームです。

簡単に利点をいうと、
・環境構築ファイルを共有することで簡単に同じ環境を提供可能
環境の流用や変更が簡単
軽量で高速に起動、停止が可能

みみねこ
みみねこ

詳しいことが知りたい方は色々調べてみてください♪
(気が向けば別記事で書きます)

Dockerをインストール

Dockerをインストールします。
以下のリンクからダウンロードしてインストールを行ってください。

Dockerのダウンロードはこちらから

コマンドプロンプトやVSCodeのターミナルなどで
バージョン確認のコマンドを実行し、インストールされていることを確認できます。

■コマンド – バージョン確認
docker -v

■コマンド結果
このようにバージョンが出てきたらOKです。

> docker -v 
Docker version 20.10.13, build a224086

ファイル構成

今回は以下のファイル構成で環境構築しています。
慣れたら自分の好きなファイル構成にしていただいて構いません。

□:ディレクトリ名
・:ファイル名

□app
├□docker
││
│├□mysql
││├□data
││└・Dockerfile
││
│└□php
│  └・Dockerfile
│
├□html
│└・index.php
│
└・docker-compose.yml

※1 mysql\dataディレクトリの中身は空で作成してください。

ファイル作成

各ファイルの内容を載せています。

docker-compose.yml ファイル

version: '3'
services:
  php:
    build:
      context: ./docker/php
      dockerfile: Dockerfile
    volumes:
      - ./src:/var/www/html
    ports:
      - 8080:80
    depends_on:
      - db

  db:
    build:
      context: ./docker/mysql
      dockerfile: Dockerfile
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=pass
      - MYSQL_DATABASE=app
      - MYSQL_USER=user
      - MYSQL_PASSWORD=root

ぱっと見分かる箇所は説明抜いてます。

volumes:
 右側:ローカル上のディレクトリパス(docker-compose.ymlからの相対パス)
 左側:永続化したいサーバーフォルダ

build:
 context:build実行パス
 dockerfile:Dockerファイル名

depends_on:
 db:dbコンテナを先に起動

コンテナ[php]:Dockerfile

FROM php:8.0-apache

RUN apt-get update && apt-get install -y libonig-dev && \
    docker-php-ext-install pdo_mysql mysqli

コンテナ[mysql]:Dockerfile

FROM mysql:8.0.20

index.php ファイル

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>環境構築</title>
</head>
<body>
    <p><?php print ("Hello World!");?></p>
</body>
</html>

localhostに接続して表示する内容を記載しています。

動作確認

localhostに接続

■コマンド – コンテナ起動
(-d)はバックグラウンドで実行

docker compose up -d

■ローカル環境にアクセス
http://localhost:8080

「Hello World!」と画面に表示

http://localhost:8080に接続

■コンテナ名を変更したとき
変更前のコンテナが残っているので、一度削除しておく
※ 削除せずにコンテナ起動すると警告が出る

docker compose down --remove-orphans

コンテナ内に入ってphp実行確認

phpコンテナに入ってphpファイルを実行確認する場合

■phpコンテナに入る
docker compose exec php bash

■phpファイル実行
php index.php

ファイルを実行します。
[index.php]ファイルの中身を
[echo Hello World!]だけにした方が分かりやすいかもしれません。

■bash終了
exit

MySQL接続、SQL実行

■MySQLコンテナでMySQL接続
docker compose exec db mysql -u root -ppass

みみねこ
みみねこ

db[コンテナ名]
pass[MYSQL_ROOT_PASSWORD]

は[docker-compose.yml]で設定した値です。

> docker compose exec db mysql -u root -ppass
Welcome to the MySQL monitor.  Commands end with ; or \g.
・・・
mysql>

上記のように
mysql>とSQLが入力できる状態であればOKです。

SHOW DATABASES;
などSQL文を実行して試してみてください。

これで環境構築は完了です。

これから色々試してみる予定なので、
phpのiniファイルを追加したりcnfファイルを追加した
よかったら参考にしてみてください。

みみねこ
みみねこ

いやぁ…。色々はまりました。
はまった点を記載すべきなのですが、開発環境も異なるため解決方法も異なる可能性が高く一つ一つネットで調べるのが速いと思います。

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