説明
DockerToolBoxを使って、PHP8系・MySQL8系の環境を作成していきます。
開発環境
■. 開発環境
・windows10 home
・VirtualBox
・Vagrant
・Docker version 19.03.14, build 5eb3275d40
・docker-compose version 1.27.4, build 40524192
■. 開発コンテナ
・Apache/2.4.38 (Debian)
・PHP 8.0.9 (cli)
・MySQL 8.0.26
・Redis 6.2.5
・phpmyadmin
準備
Dockerfile, docker-compose.yml, my.cnfの3つのファイルとフォルダを作成をしていきます。
①. フォルダ・ファイル構成について
下の画像の構成のように、srcフォルダ, mysqlフォルダ, Dockerfile, docker-compose.ymlを一番上の階層に設置します。

次にmysqlフォルダの中に、confフォルダとlogsフォルダを作成し、confフォルダの中にmy.cnfファイルを設置します。

②. Dockerfileの作成
FROM php:8.0-apache RUN apt-get update \ && apt-get install -y libpq-dev \ && docker-php-ext-install pdo_mysql pdo_pgsql RUN apt-get install -y less vim git RUN cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini RUN sed -i -e 's/memory\_limit \= 128M/memory\_limit \= 1024M/' \ -i -e 's/\;date\.timezone \=/date\.timezone \= \"Asia\/Tokyo\"/' \ -i -e "s/\;extension\_dir \= \'ext\'/extension\_dir \= \'ext\'/" \ /usr/local/etc/php/php.ini RUN sed -i -e 's/\;zend_extension\=opcache/zend_extension\=opcache/' \ -i -e 's/\;opcache.enable\=1/opcache.enable\=1/' \ -i -e 's/\;opcache.enable_cli\=0/opcache.enable_cli\=1/' \ -i -e 's/\;opcache.optimization_level\=0x7FFFBFFF/opcache.optimization_level\=0x7FFFBFFF/' \ -i -e 's/\;opcache.lockfile_path\=\/tmp/\;opcache.lockfile_path\=\/tmp\n\nopcache\.jit\_buffer\_size \= 128M/' \ /usr/local/etc/php/php.ini RUN git clone --branch php8typehint https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis RUN docker-php-ext-install redis RUN curl -s http://getcomposer.org/installer | php && \ mv composer.phar /usr/local/bin/composer
※docker-php-ext-install 〇〇 で、phpでmysqlやredisなどが使用できるようになります。
※PHP8を使うので、opcache.jitを使用できるようにします。(処理が早くなるらしい)
③. docker-compose.ymlファイルの作成
version: '3' services: app: build: ./ environment: - TZ=Asia/Tokyo ports: - '80:80' volumes: - ./src:/var/www/html mysql: image: mysql:8.0 environment: - MYSQL_DATABASE=test - MYSQL_USER=test - MYSQL_PASSWORD=test - MYSQL_ROOT_PASSWORD=test - TZ=Asia/Tokyo ports: - 3306:3306 volumes: - dbdata:/var/lib/mysql - ./mysql/logs:/var/log/mysql - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf redis: image: redis:6 environment: - TZ=Asia/Tokyo ports: - "6379:6379" volumes: - redisdata:/data phpmyadmin: image: phpmyadmin/phpmyadmin environment: - PMA_ARBITRARY=1 - PMA_HOST=mysql - PMA_USER=test - PMA_PASSWORD=test - TZ=Asia/Tokyo links: - mysql ports: - 8080:80 volumes: - sessiondata:/sessions volumes: dbdata: redisdata: sessiondata:
④. my.cnfファイルの作成
# MySQLサーバーへの設定 [mysqld] # 文字コード/照合順序の設定 character-set-server = utf8mb4 collation-server = utf8mb4_bin # タイムゾーンの設定 default-time-zone = SYSTEM log_timestamps = SYSTEM # デフォルト認証プラグインの設定 default-authentication-plugin = mysql_native_password # エラーログの設定 log-error = /var/log/mysql/mysql-error.log # スロークエリログの設定 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 5.0 log_queries_not_using_indexes = 0 # 実行ログの設定 general_log = 1 general_log_file = /var/log/mysql/mysql-query.log # mysqlオプションの設定 [mysql] # 文字コードの設定 default-character-set = utf8mb4 # mysqlクライアントツールの設定 [client] # 文字コードの設定 default-character-set = utf8mb4
※my.cnfファイルは、mysql > conf > my.cnf のようにファイルの位置を設置してください。
※windows10を使っている方は、my.cnfを右クリック→プロパティ→属性を読み取り専用に設定する。
設定しておかないと、「mysql: [Warning] World-writable config file ‘/etc/mysql/conf.d/my.cnf’ is ignored.」のようなエラーが出て、ファイルが無視されてしまいます。
実行と確認
$ docker-compose up -d $ docker ps (自分はlamp2フォルダの中に作ったので、以下のような名前になってます。) CONTAINER ID ・・・ NAMES 5abb1ad2db74 ・・・ lamp2_app_1 090ca5a388ee ・・・ lamp2_redis_1 9e7f9a9d2132 ・・・ lamp2_mysql_1 533e2199c168 ・・・ lamp2_phpmyadmin_1
phpの確認
$ docker exec -it lamp2_app_1 /bin/bash root@5abb1ad2db74:/var/www/html# php -v PHP 8.0.9 (cli) (built: Aug 17 2021 12:51:20) ( NTS ) Copyright (c) The PHP Group Zend Engine v4.0.9, Copyright (c) Zend Technologies with Zend OPcache v8.0.9, Copyright (c), by Zend Technologies root@5abb1ad2db74:/var/www/html# exit
mysqlの確認(ログインとデータベースの確認)
$ docker exec -it lamp2_mysql_1 /bin/bash root@9e7f9a9d2132:/# mysql -u test -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.26 MySQL Community Server - GPL ・ ・ mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | test | +--------------------+ 2 rows in set (0.00 sec) mysql> exit Bye root@9e7f9a9d2132:/# exit
※DB名・ユーザ名・パスワードはすべて「test」に設定してあります。(docker-compose.yml)
Redisの確認(バージョンの確認・redisの実行)
$ docker exec -it lamp2_redis_1 /bin/bash root@090ca5a388ee:/data# redis-server --version Redis server v=6.2.5 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=69ab6eec4665acbc root@090ca5a388ee:/data# redis-cli 127.0.0.1:6379> set foo bar OK 127.0.0.1:6379> set get bar OK 127.0.0.1:6379> del foo (integer) 1 127.0.0.1:6379> exit
ソースファイルの設置
ソースファイル(index.phpなど)はsrcフォルダの中に入れて、ブラウザで http://192.168.99.100/ にアクセスすれば表示されると思います。(アクセス先のIPは人によって違うこともあります。)
※docker-machineのip確認
$ docker-machine ip 192.168.99.100
以上です。
コメント