Dockerによる開発環境構築(Mac + Nginx + PHP-FPM + MySQL)Part 2

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

Dockerを利用してPHPの開発環境を用意してみましょう。

下記の記事の続きです。

前回は、NginxでWebサーバーを構成し、PHPを動作させるために、APサーバーを構築しました。
今回は、mysqlサーバーを構築してきたいと思います。

MySQLサーバーの構築

docker-compose.ymlを下記のように編集します。

version: '3'
services:
  web:
    image: nginx:1.15.6
    ports:
      - "8000:80"
    depends_on:
      - app
    volumes:
      - ./web/default.conf:/etc/nginx/conf.d/default.conf
      - ./src:/var/www/html
  app:
    image: php:7.2.15-fpm
    depends_on:
      - mysql
    volumes:
      - ./src:/var/www/html
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: test
      MYSQL_USER: root
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/mysql-data:/var/lib/mysql

編集後、下記のコマンドでwebサーバーとAPサーバーとMySQLサーバーが立ち上がります。

$ docker-compose up -d

MySQLサーバーに接続してみましょう

$ docker-compose exec mysql bash
# mysqlサーバーに入ってmysqlに接続する
$ mysql -u root -p
# データベースを確認する
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.06 sec)

すると、docker-compose.ymlのenvironmentで定義した「test」データベースができているのが確認できるはずです。

では、試しにPHPでMySQLを操作するプログラムを動かしてみます。

ただ、公式のPHPイメージのままで、MySQLに接続するのは難しいので、必要なパッケージなどをインストールする必要があります。
Docker fileを使ってPHPイメージをカスタマイズします。

作業用のディレクトリ(php_docker)に「php」というディレクトリを作成し、作成した「php」ディレクトリに「Dockerfile」を作成します。

とりあえず、コンテナは止めておきましょう。

$ docker-compose stop
$ mkdir php
$ cd php
$ vi Dockerfile

Dockerfileは下記のように記述します。

FROM php:7.2.15-fpm

RUN docker-php-ext-install pdo_mysql

docker-compose.ymlも編集します。

version: '3'
services:
  web:
    image: nginx:1.15.6
    ports:
      - "8000:80"
    depends_on:
      - app
    volumes:
      - ./web/default.conf:/etc/nginx/conf.d/default.conf
      - ./src:/var/www/html
  app:
    build: ./php
    depends_on:
      - mysql
    volumes:
      - ./src:/var/www/html
  mysql:
    image: mysql:5.7
    environment:
      MYSQL_DATABASE: test
      MYSQL_USER: root
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/mysql-data:/var/lib/mysql

Dockerコンテナを立ち上げてみましょう。

$ docker-compose up -d

これで、PHPとMySQLの開発環境が整いました。

それでは、実際にPHPプログラムを作成して、MySQLに接続してみましょう。

例として、MySQLに適当なデータを追加して、PHPで呼び出してみます。

MySQLコンテナに入って、データベース「test」の中にテーブルを作成します。

今回は例として「users」テーブルを作成してみます。テーブルを作成したら適当に3つほどデータを入れておきます。

$ docker-compose exec mysql bash
$ mysql -u root -p
# mysql
mysql> use test
Database changed
mysql> CREATE TABLE users(
    -> id INT AUTO_INCREMENT NOT NULL,
    -> name VARCHAR(30) NOT NULL ,
    -> age INT NOT NULL,
    -> PRIMARY KEY (id));
Query OK, 0 rows affected (0.10 sec)

mysql> INSERT INTO users(name, age) VALUES('tom',22);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO users(name, age) VALUES('john',34);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO users(name, age) VALUES('emily',28);
Query OK, 1 row affected (0.00 sec)

次に、MySQLに接続するためのPHPプログラムを作成します。

作業用ディレクトリ「php_docker」の中に作成した「src」ディレクトリの中のindex.phpを下記のように書き換えます。

$dsn = 'mysql:host=php_docker_mysql_1;dbname=test';
$user = 'root';
$password = 'password';

$dbh = new PDO($dsn, $user, $password);

$sql = "SELECT * from users";

foreach ($dbh->query($sql, PDO::FETCH_ASSOC) as $row) {
    print_r($row);
}

ブラウザからhttp:// localhost:8000にアクセスしてみます。

下記のように表示されれば成功です。

Array ( [id] => 1 [name] => tom [age] => 22 ) Array ( [id] => 2 [name] => john [age] => 34 ) Array ( [id] => 3 [name] => emily [age] => 28 )
  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。

コメントを残す

*

CAPTCHA