LoginSignup
12
8

More than 5 years have passed since last update.

DockerをつかってZendFramework3+mysqlの環境を構築する

Posted at

はじめに

インターンシップで使うということでPHPのZendFrameworkとmysqlの環境構築をしてみました。
phpは初めてで、Dockerも慣れてなく割と苦労したのでまとめます。
もっといい方法ある!とかあれば教えてほしいです。

対象読者
- ZendFrameworkを利用したアプリ開発がしたい方。
- apacheとかnginxとかをインストールしたくない方。※1
- PHPの開発環境を作ってみたい方。※2

※1 Dockerを利用するとわりとブリッジ周りが荒れたりします。
※2 PHP始めるならもっと新しいフレームワークもあるのでfuelPHPとかcakePHPとかも見てから決めるほうがいいと思います。

記事の内容
- Dockerfile, docker-composeを利用してphpの環境を構築します。
- mysqlで実行時にユーザ、DB、テーブルを作成します。

動作環境
- OS Arch Linux x86_64
- カーネルバージョン 4.15.3-2-ARCH
- Docker 18.02.0-ce
- docker-compose 1.19.0

結果

下記をクローンしてもらってdocker-compose up --buildを実行するとSkeleton Applicationの起動、テーブルの作成が行われます。
GitHub : https://github.com/Juju-62q/ZendFrameworkWithMySQL.git

リポジトリの説明

Dockerに関して

phpのDockerimageを引っ張るようにしています。
phpとapacheの環境を引っ張っており環境変数の設定とcomposer.jsonからのインストールをしています。

Dockerfile
FROM php:7.2-apache

RUN apt-get update \
 && apt-get install -y git zlib1g-dev \
 && docker-php-ext-install zip pdo_mysql mysqli \
 && a2enmod rewrite \
 && sed -i 's!/var/www/html!/var/www/public!g' /etc/apache2/sites-available/000-default.conf \
 && mv /var/www/html /var/www/public \
 && curl -sS https://getcomposer.org/installer \
  | php -- --install-dir=/usr/local/bin --filename=composer

RUN yes | pecl install xdebug 

WORKDIR /var/www

phpのファイルに加えてmysqlを追加しています。データの保存にはbusyboxを利用しました。
.envという環境変数の読み込みやDockerとホスト間で共通のリソースとなる部分の追加をしています。

docker-compose.yml
version: '2'
services:
  zf3:
    build: .
    ports:
      - "80:80"
    volumes:
      - .:/var/www
    env_file: ./.env
    links:
      - mysql

  data:
    image: busybox
    volumes:
      - ./misc/data:/var/lib/mysql

  mysql:
    image: mysql:5.7
    env_file: ./.env
    ports:
      - "3306:3306"
    volumes_from:
      - data
    volumes:
- ./sql/:/docker-entrypoint-initdb.d/

MySQLの環境変数の設定

.envファイルにmysqlに関する環境変数を設定しています。
変数はその名の通りで上からrootパスワード、追加するユーザ、追加したユーザのパスワード、データベース名となっています。
ホスト名はphpからmysqlにアクセスする際に利用できます。
作成されるユーザはall grantの権限で作成されます。
なお、見られると良くないので.gitignoreに追加するといいかと思います。

.env
MYSQL_ROOT_PASSWORD=root_password
MYSQL_USER=zend
MYSQL_PASSWORD=zend_password
MYSQL_DATABASE=db
MYSQL_HOST=mysql

MySQLでテーブルの作成

sql/以下のファイルがコンテナ作成時に自動実行されます。
ここではpersonという名のidと名称と作成時刻を持つテーブルを作成しています。

initial.sql
CREATE TABLE `person` (
  `id` int(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(20),
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ZendFramework関係ファイル

数が多いのでテーブルにまとめました。このあたりはZend Frameworkの解説を見たほうがいいと思います。

ディレクトリ名 使いみち
config 設定ファイル(読むべきディレクトリや、DB接続情報等)
module ZendFrameworkのアプリケーションの実態
public 公開されているファイル
vendor composerで追加されるファイル等(大きいので必要に応じてignore)
misc データベースの実データ

ZendFrameworkを利用した開発について

ZendFrameworkの公式チュートリアルを見ながら作っていくといいと思います!

Zend Framework Quick Start
https://framework.zend.com/manual/1.12/ja/learning.quickstart.html

おわりに

初めてのphpでの環境構築でした。Dockerに慣れていないこともあり、正直かなり時間がかかりましたがこの記事を見て環境構築の手間がなくなれば嬉しいです。
XDebugがまだ正常に動かせていないのでどなたか教えてほしいです。(分かり次第追記したいと思います。)

12
8
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
12
8