🔰
M1 MacのDockerでApache+PHP7.4+MySQL5.7環境
過去案件をたまに更新する際、新たに環境構築する度に手間取っていたのでメモ。
(WordPressやBaserCMSなど)
zlib1gなど入れているので画像アップロードして画像リサイズ系も動くはず。
GitHubに上げてます
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