先日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.
コメント