この記事は更新から2年以上経過しています。情報が古い可能性がありますのでご注意下さい。
未だにWindowsにおけるローカルの開発用サーバーとしてXAMPPを使うことがあるのですが、そろそろDockerに移行したいという思いがありました。今回、実際に環境を構築した際に掲題の件でつまづきましので、ここに対処法について記載しておきます。
環境の構築
Windows 10にインストールしたVirtualBoxでUbuntu 18 LTSを起動し、UbuntuにDockerをインストールして起動しています。
ディレクトリ構造やDocker関連の各種設定ファイルは下記記事を参考にさせて頂きました。
xampp と同様のLAMP環境を Docker で構築する
GitHubにアップしてある Docker-LAMP をローカルにダウンロードして docker-compose コマンドを実行すると xampp 同様の環境を構築することができます。具体的にはweb
Vagrantfile
Vagrant.configure("2") do |config|
# The most common configuration options are documented and commented below.
# For a complete reference, please see the online documentation at
# https://docs.vagrantup.com.
config.vm.hostname = "docker-dev.test"
config.vm.box = "ubuntu/bionic64"
config.vm.network "private_network", ip: "192.168.33.99"
config.vm.synced_folder ".", "/home/vagrant/working"
config.vm.provision "docker"
config.vm.provision :docker_compose, run: "always"
config.vm.provider "virtualbox" do |vb|
# Display the VirtualBox GUI when booting the machine
vb.gui = false
# Customize the amount of memory on the VM:
vb.memory = "2048"
end
end
仮想OS(Ubuntu)ディレクトリ構造
/home/vagrant/working/hoge/ ※ホストOSとの共有ディレクトリに作成したhogeディレクトリ
– docker-compose.yml
– [_docker]
- [db]
- [my.cnf]
- my.cnf
- [nginx]
- default.conf
- [php]
- Dockerfile
- php.ini
- [phpmyadmin]
- [sessions]
- [public]
- index.html
docker-compose.yml
version: '3'
services:
# PHP
php:
# image: php:7.4-fpm
container_name: php
build: ./_docker/php
depends_on:
- db
volumes:
- ./public:/var/www/html
- ./_docker/php/php.ini:/usr/local/etc/php/php.ini
# nginx
nginx:
image: nginx
container_name: nginx
depends_on:
- php
ports:
- 8080:80
volumes:
- ./_docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./public:/var/www/html
- ./public:/usr/share/nginx/html
# mysql
db:
image: mysql
# container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: docker_db
MYSQL_USER: docker_user
MYSQL_PASSWORD: docker_pass
ports:
- 3306:3306
volumes:
- ./_docker/db/data:/var/lib/mysql
- ./_docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
# phpmyadmin
phpmyadmin:
image: phpmyadmin/phpmyadmin
# container_name: phpmyadmin
depends_on:
- db
environment:
- PMA_ARBITRARY=1
- PMA_HOSTS=db
- PMA_USER=docker_user
- PMA_PASSWORD=docker_pass
ports:
- 3000:80
volumes:
- ./_docker/phpmyadmin/sessions:/sessions
my.cnf
[mysqld]
default_authentication_plugin=mysql_native_password
default.conf
server {
listen 80;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Dockerfile
FROM php:7.4-fpm
RUN apt-get update \
&& docker-php-ext-install pdo_mysql
php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
起動
$ docker-compose up -d
問題の対処
前述の設定だとエラーで起動出来ませんでした。試行錯誤の結果、MySQLのDockerのボリューム保存場所を、ホストOSとの共有ディレクトリではない仮想OS内からのみ参照可能なディレクトリに指定することで、問題は解消されました。
docker-compose.yml
# - ./_docker/db/data:/var/lib/mysql
- ../../_docker_db_vol/db/data:/var/lib/mysql
※ディレクトリ”/home/vagrant/_docker_db_vol/db/ を作成しておきます