DockerでLaravelの環境構築をしたのでそのときのメモです。
まず環境は以下のような環境です。
◆環境
1 2 3 4 5 |
MySQL: 8.0.17 PHP: 7.3 nginx: 1.17.2 node: v6.10.3 npm: 3.10.10 |
◆ホスト側ディレクトリ構造
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
./laratest - docker-compose.yml - mysql - mysql.cnf - mysql_data - php - Dockerfile - nginx - conf.d - default.conf - logs - access.log - error.log - node - Dockerfile - src - laratest |
・src – laratest
※laravelのプロジェクト
◆PHPのDockerfile内容
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 |
FROM php:fpm # For composer RUN apt-get update \ && apt-get install -y zlib1g-dev \ && apt-get install -y libzip-dev \ && docker-php-ext-install zip # Install composer RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \ && php -r "if (hash_file('SHA384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \ && php composer-setup.php \ && php -r "unlink('composer-setup.php');" \ && mv composer.phar /usr/local/bin/composer # Set composer environment ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_HOME /composer ENV PATH $PATH:/composer/vendor/bin # Install laravel installer RUN composer global require "laravel/installer" # PHP's DB setting RUN apt-get update \ && apt-get install -y libpq-dev \ && docker-php-ext-install pdo_mysql pdo_pgsql WORKDIR /src |
※Composerのインストールでエラーになる場合があります。
composerのハッシュキーが変わることがあるので、エラーの場合は下記参照してください。
https://getcomposer.org/download/
◆nodeのDockerfileの内容
1 2 3 4 5 6 7 |
FROM node:6.10 # 環境変数設定 ENV NODE_ENV="development" # 作業ディレクトリ作成&設定 WORKDIR /src/laratest |
・WORKDIR /src/laratest
※自分が作成したlaravelプロジェクト名
メモ: FROM = imageファイル(元にするimageファイルを指定)
メモ: WORKDIR = コンテナのワークディレクトリ(カレントディレクトリ)
◆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 38 39 40 41 42 43 |
version: '3' services: webserver: image: nginx container_name: "laravel-nginx" ports: - "80:80" volumes: - ./nginx/logs:/var/log/nginx/ - ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf - ./src:/src links: - php php: build: ./php container_name: "laravel-php" volumes: - ./src:/src links: - db db: image: mysql container_name: "laravel-mysql" #restart: always environment: MYSQL_DATABASE: laratest MYSQL_ROOT_PASSWORD: root MYSQL_USER: laratest MYSQL_PASSWORD: hoge TZ: 'Asia/Tokyo' ports: - "3306:3306" volumes: - ./mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf - ./mysql/mysql_data:/var/lib/mysql node: build: ./node command: bash -c "npm install && npm install cross-env" container_name: "laravel-node" tty: true volumes: - ./src/laratest:/src/laratest working_dir: /src/laratest |
・volumes: – ./src/laratest:/src/laratest
※自分が作成したlaravelプロジェクト名
◆nginx default.confの内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
server { index index.php index.html; root /src/laratest/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; } } |
・root /src/laratest/public;
※自分が作成したlaravelプロジェクト名
・fastcgi_pass
※phpのサービス名(docker-compose.ymlのやつ)
◆mysql.cnfの内容
1 2 3 4 5 6 7 |
[mysqld] default-authentication-plugin = mysql_native_password [client] default-character-set=utf8mb4 |
※メモ 文字コードセット
◆メモ
・docker-compose build
新しくDockerfileの内容でビルドする(Dockerfileを書き換えた場合はこれをする)
・コンテナ作成後に、Dockerfileを書き換えた場合
dockerは初回のコンテナ作成時にDockerfileの内容を実行する。
その後は、初回のコンテナを再起動するため、(キャッシュ)
一回コンテナを作成した後にDockerfileを修正した場合は、再度ビルドする必要がある。
・コンテナがdoneになるのにExitになる場合
docker-compose.ymlに「tty:true」を入れる
もっとこうした方がいいなどあればぜひコメントください!
ツイッターもやってるので、フォローしていただけると嬉しいです!
よろしくお願いいたします。