Contents
Docker Laravel 環境
Docker で Laravel 用の開発環境を構築してみます。
今回は docker-compose を使用します。
環境
- nginx
- PHP7.4
- MySQL5.7
- Node.js
- NPM
下記の構成としています。
1 2 3 4 5 6 7 8 9 10 |
root └ docker └ db └ nginx └ default.conf └ php └ Dockerfile └ php.ini └ myapp └ docker-compose.yml |
コンテナ
下記コンテナを起動します。
- php
- mysqldb
- nginx
PHP 用の設定ファイル
コンテナ用 Dockerfile
Laravel で使用する為、Node.js と NPM もインストールするようにします。
composerは公式にある方法でインストールする方法と別の方法としてDocker Official Imagesを使う方法もあります。その場合マルチステージビルドを行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
FROM php:7.4-fpm COPY php.ini /usr/local/etc/php/ # zipを扱うのでlibzipを指定します。 RUN apt-get update && apt-get upgrade -y \ && apt-get install -y libzip-dev mariadb-client \ && docker-php-ext-install zip pdo_mysql # Node.js と NPM RUN apt-get install -y nodejs \ npm #Composer install #hash値はバージョンアップごとに変わりますので、その時に応じたhash値を指定する必要があります。 RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" RUN php -r "if (hash_file('sha384', 'composer-setup.php') === 'e5325b19b381bfd88ce90a5ddb7823406b2a38cff6bb704b0acc289a09c8128d4a8ce2bbafcd1fcbdc38666422fe2806') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" RUN php composer-setup.php RUN php -r "unlink('composer-setup.php');" RUN mv composer.phar /usr/local/bin/composer ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin WORKDIR /var/www RUN composer global require "laravel/installer" |
php.ini
1 2 3 4 5 |
[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese" |
nginx用の設定ファイル
default.conf を設定します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
server { listen 80; index index.php index.html; root /var/www/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { try_files $uri =404; 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; } } |
docker-compose.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
version: '3' services: php: container_name: php build: ./docker/php volumes: - ./myapp/:/var/www nginx: image: nginx container_name: nginx ports: - 80:80 volumes: - ./myapp/:/var/www - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php db: image: mysql:5.7 container_name: mysqldb environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: database MYSQL_USER: docker MYSQL_PASSWORD: docker TZ: 'Asia/Tokyo' command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci volumes: - ./docker/db/data:/var/lib/mysql - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf - ./docker/db/sql:/docker-entrypoint-initdb.d ports: - 3306:3306 |
操作
-
ビルドと起動
- 個別
12$ docker-compose build$ docker-compose up -d - 一括
1$ docker-compose up -d --build
- 個別
-
作成したイメージの一括削除
1$ docker-compose down --rmi all --volumes
まとめ
Laravel 用に php コンテナへ Node.js と NPM をインストールするようにしています。
これで フロント側もスムーズに対応していくことができます。
composer は公式からインストールする方法では hash値が面倒になりがちです。
composer - Docker Hub を使ったマルチステージビルドでは COPY --from=composer /usr/bin/composer /usr/bin/composer
と1行となりhash値も気にしなくてよくなるので、そちらでもよいかもしれません。