DockerToolBoxで、PHP8.0&Apache&MySQL8.0&Redis6コンテナの作成

Docker

説明

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

以上です。

コメント

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