先日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.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という形になっているので使えると思います。
GitHub - hrksn/docker_php7.4_framework
Contribute to hrksn/docker_php7.4_framework development by creating an account on GitHub.
コメント