【環境構築】Docker + Laravel 俺用メモ! 環境構築に困っている方へ

DockerでLaravelの環境構築をしたのでそのときのメモです。

まず環境は以下のような環境です。

スポンサーリンク




◆環境

MySQL: 8.0.17
PHP: 7.3
nginx: 1.17.2
node: v6.10.3
npm: 3.10.10

◆ホスト側ディレクトリ構造

./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内容

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の内容

FROM node:6.10
  
# 環境変数設定
ENV NODE_ENV="development"

# 作業ディレクトリ作成&設定
WORKDIR /src/laratest

・WORKDIR /src/laratest

※自分が作成したlaravelプロジェクト名

メモ: FROM = imageファイル(元にするimageファイルを指定)

メモ: WORKDIR = コンテナのワークディレクトリ(カレントディレクトリ)

◆docker-compose.ymlの内容

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の内容

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の内容

[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」を入れる

もっとこうした方がいいなどあればぜひコメントください!

ツイッターもやってるので、フォローしていただけると嬉しいです!

よろしくお願いいたします。

スポンサーリンク




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク




%d人のブロガーが「いいね」をつけました。