Docker + Laravelの開発環境を構築する
参考
開発環境
- windows 11
- Docker for Desktop
手順
Docker for Desktopをインストール
ツリー構造を作成
<ProjectFolder>
└ docker-config
├ mysql
│ └ my.conf
├ nginx
│ ├ Dockerfile
│ └ default.conf
└ php
├ Dockerfile
└ php.ini
Dockerfile等の設定を記述する
# MySQLサーバーへの設定
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
# タイムゾーン
default-time-zone = SYSTEM
log_timestamps = SYSTEM
# mysql8.0用に認証変更
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
server {
index index.php index.html;
# ルートパスを設定
root /var/www/laravel/public;
location / {
# ルートパスを設定
root /var/www/laravel/public;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass web:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
FROM alpine:3.6
# nginxのインストール
RUN apk update && \
apk add --no-cache nginx
RUN mkdir -p /run/nginx
# RUN apk add openssl
# ADD ssl /etc/nginx/ssl
# フォアグラウンド
CMD nginx -g "daemon off;"
#バージョン指定
FROM php:7.2-fpm
# php.ini を /usr/local/etc/php/ にコピー
COPY php.ini /usr/local/etc/php/
# Composer をインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
# パッケージ群をインストール
RUN apt-get update \
&& apt-get install -y \
gcc \
make \
libpng-dev \
git \
unzip \
vim \
libmcrypt-dev \
mariadb-client \
curl \
gnupg \
openssl \
zlib1g-dev \
&& docker-php-ext-install pdo_mysql mysqli mbstring zip
# NPM・Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash
RUN apt-get install -y nodejs
# xdebug をインストールxdebug
RUN pecl install xdebug-2.7.2 && docker-php-ext-enable xdebug
# カレントディレクトリを /var/www に設定
WORKDIR /var/www
ADD . /var/www
RUN chown -R www-data:www-data /var/www
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[xdebug]
xdebug.remote_enable = On
xdebug.remote_port = 9001
xdebug.remote_autostart = On
xdebug.remote_host = 192.168.99.1
xdebug.profiler_output_dir = "/tmp"
xdebug.max_nesting_level= 1000
xdebug.idekey = "PHPSTORM"
version: '3'
services:
web:
build: ./docker-config/php
container_name: app_php
volumes:
- ./laravel:/var/www/laravel
working_dir: /var/www/laravel
depends_on:
- mysql
nginx:
image: nginx
container_name: app_nginx
build: ./docker-config/nginx
ports:
- "81:80"
volumes:
- .:/var/www
- ./docker-config/nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
mysql:
image: mysql:8.0
container_name: app_db
ports:
- 3306:3306
environment:
MYSQL_DATABASE: development
MYSQL_ROOT_USER: root
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: m_user
MYSQL_PASSWORD: m_user
TZ: 'Asia/Tokyo'
volumes:
- ./docker-config/mysql/data:/var/lib/mysql
- ./docker-config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf
depends_on:
- mysql-volume
mysql-volume:
image: busybox
volumes:
- ./docker-config/mysql/data:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: app_pma
environment:
- PMA_ARBITRARY=1
- PMA_HOST=mysql
- PMA_USER=root
- PMA_PASSWORD=root
links:
- mysql
ports:
- 8080:80
volumes:
- /sessions
Docker Composeでコンテナを立ち上げる
docker-compose up -d --build
オプション説明
コマンド | 説明 |
---|---|
docker-compose | Docker Compose のバイナリです。このコマンドを使い Docker コンテナ上の複数のサービスを管理します。 |
up | コンテナの作成と起動 |
-d | デタッチド・モード: バックグラウンドでコンテナを実行し、新しいコンテナ名を表示 |
--build | コンテナを開始前にイメージを構築する |
トラブルシューティング
An attempt was made to access a socket in a way forbidden by its access permissions
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:80 -> 0.0.0.0:0: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
こんなエラーが出た場合、ポートが別のプロセスによって使われている可能性が高い為、そのプロセスをキルするか、別ポート(httpなら 80 ⇒ 81・82 )に変更することをお勧めする
Laravelプロジェクトをインストール
コンテナのコンソールに接続
docker exec -it app_php bash
Laravelプロジェクトをインストール
composer create-project "laravel/laravel"