[Docker]php+phpmyadmin+mysqlをlaravel用に使いやすくしたバージョンを作った

先日dockerでphp+phpmyadmin+mysqlを構築するプログラムを作成して公開しました。

[Docker]php+phpMyAdmin+Mysqlのサーバを構築する
早く開発に取りかかりたいのでサーバの準備で時間を取られるのはもったいない。だから空っぽのサーバをDockerで用意します。

そのプログラムを少し改良して、Laravel等のフレームワーク向けに使いやすくしました。

hrksn/docker_php7.4_framework
Contribute to hrksn/docker_php7.4_framework development by creating an account on GitHub.

こちらのプログラムについて書きます。

ディレクトリ構成

/php
  /conf/php.ini
  /html/
    /myapp
      /public
        index.php
        phpinfo.php
  Dockerfile
  000-default.conf
/mysql/sql/test.sql
docker-compose.yml

phpのコードは/php/html/myapp/publicに配置します。

各ファイルについて

/docker-compose.yml

後ほど説明しますが、DocumentRootは/var/www/html/myapp/publicにしています。

volumesでは./php/html:/var/www/htmlとしているのは

html配下にmyappという名前でプロジェクトを作成して、publicにindex.phpを置くことを想定しているためです。(myapp直下にはフレームワークの諸々のファイルが置かれます)

version: '3'

services:
  php:
    build: ./php
    ports:
      - '80:80'
    volumes:
      - ./php/html:/var/www/html
    links:
      - mysql

  mysql:
    image: mysql:8
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=app
      - MYSQL_USER=docker
      - MYSQL_PASSWORD=docker
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d/
      - ./mysql/lib:/var/lib/mysql
      - ./mysql/sql:/docker-entrypoint-initdb.d

  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=password
    ports:
      - 8080:80
    links:
      - mysql
    volumes:
      - ./phpmyadmin/sessions:/sessions
/php/Dockerfile

前回のファイルからnpmのインストールとapacheのconfファイルのCOPYが入っています。

FROM php:7.4-apache

RUN docker-php-ext-install pdo_mysql

COPY conf/php.ini /usr/local/etc/php/conf.d/
COPY 000-default.conf /etc/apache2/sites-enabled/

# Composerのインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

#npmのインストール
COPY --from=node /usr/local/bin /usr/local/bin
COPY --from=node /usr/local/lib /usr/local/lib

RUN apt-get update \
    && apt-get install -y libicu-dev libzip-dev zlib1g-dev unzip vim \
    && docker-php-ext-install mysqli intl zip

RUN a2enmod rewrite
/php/000-default.conf
<VirtualHost *:80>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html/myapp/public
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       <Directory /var/www/html/myapp/public>
           AllowOverride All
       </Directory>
</VirtualHost>
/php/html/myapp/public/index.php
<?php

echo 'Hello World<br>';

// hostname, user, password, db name
$mysqli = new mysqli('mysql', 'docker', 'docker', 'app');

if ($mysqli->connect_error) {
  echo $mysqli->connect_error;
  exit();
} else {
    $mysqli->set_charset("utf8");
}

$sql = "SELECT id, name FROM test";
if ($result = $mysqli->query($sql)) {
    while ($row = $result->fetch_assoc()) {
        echo "ID:" . $row["id"] . " NAME:" . $row["name"] . "<br>";
    }
    $result->close();
}

$mysqli->close();
/php/conf/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"

memory_limit = 256M
post_max_size = 64M
upload_max_filesize = 64M

想定している使い方

docker-compose up -d

で起動した後で

http://localhostでエラーが出ないことを確認します。

その後でコンテナ内に入ります。

docker exec -it XXX /bin/bash

元々用意しているindex.phpは接続テスト用なのでmyappディレクトリごと削除してください。

rm -rf myapp

そしてLaravelをインストールする場合は以下のコマンドを実行します。

composer create-project --prefer-dist "laravel/laravel=" myapp

実行完了後にはhtml/myapp直下にLaravelが入っています。

http://localhostにアクセスして画面が表示されれば成功です。

phpmyadminはhttp://localhost:8080でアクセスできます。

この記事ではLaravelで書いていますが、CodeIgnite4でもpublic/index.phpという形になっているので使えると思います。

hrksn/docker_php7.4_framework
Contribute to hrksn/docker_php7.4_framework development by creating an account on GitHub.

コメント

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