[Docker]php+phpMyAdmin+Mysqlのサーバを構築する

開発用のシンプルなサーバを早く用意します。複数のサイトを参考にさせてもらったので他サイトと同じようなコードが入っています。先人の皆さんには感謝です。

ここで掲載しているコードはgithubで公開しています。

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

ディレクトリ構成

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

phpのコードは/php/htmlに設置します。

各ファイルについて

/docker-compose.php

mysql8は認証方式がcaching_sha2_passwordに変わっているようなので

–default-authentication-plugin=mysql_native_password の指定をつけます。

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

a2enmod rewriteでmod_rewriteを有効にしています。

FROM php:7.3-apache
COPY conf/php.ini /usr/local/etc/php/conf.d/

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
index.php

DBの接続を確認するコードです。

<?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();
phpinfo.php
<?php 
phpinfo();
?>
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
test.sql
create table test(
    id int,
    name text
);

insert into test (id, name) values (1, 'Hello World');
実行

以下のコマンドで実行します。

docker-compose up -d

http://localhostで画面が表示されたら成功です。

http://localhost:8080でphpMyAdminが表示されます。

番外編:/host_mnt/Users/〜というエラーが出た場合

ここで掲載しているコードを試している時に/host_mnt/Users/〜がというエラーが出た時には以下のページを参考にして対応しました。

コンテナ起動時、error while creating mount source path '/host_mnt/Users/~': mkdir /host_mnt/Users/~: file exists になったときの対処法 - Qiita
現象 volumesを設定しているコンテナ(MySQL用)を停止 → 起動したところ $ docker-compose up -d Creating volume "sample_db-store" with default ...

コメント

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