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

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

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

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

GitHub - 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.sqldocker-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-apacheRUN docker-php-ext-install pdo_mysqlCOPY 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/binCOPY --from=node /usr/local/lib /usr/local/libRUN apt-get update \    && apt-get install -y libicu-dev libzip-dev zlib1g-dev unzip vim \    && docker-php-ext-install mysqli intl zipRUN 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
<?phpecho '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 = 256Mpost_max_size = 64Mupload_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という形になっているので使えると思います。

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

コメント