🔰

M1 MacのDockerでApache+PHP7.4+MySQL5.7環境

2023/02/17に公開

過去案件をたまに更新する際、新たに環境構築する度に手間取っていたのでメモ。
(WordPressやBaserCMSなど)
zlib1gなど入れているので画像アップロードして画像リサイズ系も動くはず。

GitHubに上げてます
https://github.com/Garyuten/docker-apache-php-mysql-forM1Mac

Container

  • Apache 2.0 Handler
  • PHP 7.4.33
  • MySQL 5.7.41
  • phpMyAdmin 5.2.1

ファイル構成

  • docker-compose.yml
  • docker
    • Dockerfile // ApacheやPHPのライブラリのインストール関係
    • base.conf // Apacheの設定
    • php.ini // phpの設定
    • mysql
      • my.cnf // mysqlの設定
  • html
    • index.php // phpinfo()の出力のみ

docker-compose.yml

docker-compose.yml
version: '3.3'

services:
  mysql:
    # for M1 Mac
    platform: linux/x86_64
    image: mysql:5.7-oracle
    volumes:
      - ./docker/data:/var/lib/mysql
      - ./docker/mysql/sql:/docker-entrypoint-initdb.d
      - ./docker/mysql/conf.d:/etc/mysql/conf.d
    ports:
      - 33060:3306
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=myDatabaseName
      - MYSQL_USER=user
      - MYSQL_PASSWORD=user
      - TZ=Asia/Tokyo
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --innodb-buffer-pool-size=64M --explicit_defaults_for_timestamp=1
    tty: true

  php:
    build: ./docker/
    volumes:
      - ./docker/php.ini:/usr/local/etc/php/php.ini
      - ./docker/logs:/var/log/httpd
      - ./html:/var/www/html
    ports:
      - 8080:80

  phpmyadmin:
    image: phpmyadmin:5.2
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=mysql
      - PMA_USER=root
      - PMA_PASSWORD=root
      - UPLOAD_LIMIT=256M
    ports:
      - 4040:80
    volumes:
      - ./docker/phpmyadmin/sessions:/sessions

特筆するのはmysql:5.7-oracleでM1 Macに対応できるようになったことでしょうか。
Apple M1(MacBook Pro (13-inch, M1, 2020))で動くことを確認できてます。

docker-compose.yml
# for M1 Mac
platform: linux/x86_64
image: mysql:5.7-oracle

Dockerfile

Wordpressなどで必要そうなライブラリをインストールしてます。

Dockerfile
FROM php:7.4-apache
COPY ./php.ini /usr/local/etc/php/
# COPY ./apache/*.conf /etc/apache2/sites-enabled/

RUN apt-get update \
  && apt-get install -y zlib1g-dev libpq-dev mariadb-client unzip libzip-dev\
  && docker-php-ext-install zip pdo_mysql mysqli \
  && docker-php-ext-enable mysqli \
  && a2enmod rewrite

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin

WORKDIR /var/www/html

RUN composer global require "laravel/installer"

base.conf

Apacheの設定。ローカル開発用なので甘々。

base.conf
<VirtualHost *:80>
    DocumentRoot "/var/www/html"
    Options Includes
    ErrorLog "/var/log/httpd/localhost-error_log"
    CustomLog "/var/log/httpd/localhost-access_log" custom
    <Directory "/var/www/html">
        AllowOverride All
    </Directory>
</VirtualHost>

php.ini

phpの設定。アップロードのファイルサイズや言語設定など。

php.ini
zend.exception_ignore_args = off
expose_php = on
max_input_time = 90
max_execution_time = 90
max_input_vars = 1000
upload_max_filesize = 256M
post_max_size = 128M
memory_limit = 256M
error_reporting = E_ALL
display_errors = on
display_startup_errors = on
log_errors = on
error_log = /dev/stderr
default_charset = UTF-8
[Date]
date.timezone = "Asia/Tokyo"

[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.language = Japanese


allow_url_fopen = On
allow_url_include = On
extension=openssl.so

mysql/my.cnf

mysql5.7の設定。

mysql/my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
explicit_defaults_for_timestamp = 1
general-log=1
general-log-file=/var/log/mysql/mysql.log

[client]
default-character-set=utf8mb4

実行

docker-compose up -d

コンテナのグループを分ける

docker Desktop の Dashboard でグループ名はデフォルトだとdocker-compose up実行時のフォルダ名になります。
(私はよく 'git' とかにしてるせいで他のプロジェクトとコンテナのグループが被ることがあります…)

--project-name yourproject を付けると任意の名前を付けられます。

docker-compose --project-name yourproject up


docker Desktop の Dashboard

localhost

dockerが起動したら以下のURIでアクセスできます
php : http://localhost:8080/

phpMyAdmin : http://localhost:4040/

Discussion