[ワンポイントLaravel] Dockerで環境準備

先日も記事にましたが、最近Laravel開発を始めたのでLaravelの小ネタを備忘録的に残していきます。

準備する環境

  • Docker
    • Web: Nginx
    • App
      • PHP 7.3 (執筆時点の最新)
      • Laravle 6.0 (執筆時点の最新)
    • DB: MySQL 5.7.19
  • IDE: PhpStorm

Docker

DockerでLaravael開発する場合、お手軽に導入できるものが公式で公開されています。

参考:Laradock

しかし、せっかく初めての環境なので、お任せで用意されてしまうのはつまらないので、自前で構築することにします。

自前で用意するにあたり、必要な要件は下記を参考にしました。

参考:ReadDouble インストール

docker-compose.yml の準備

何はともあれdocker-compose.ymlを準備します。
今回設定した構成では、WebとAppが別々のサーバーとして用意されます。

用意したymlは下記の通りです。
logをホスト側に保存、設定ファイルを簡単に編集、MySQLのデータを永続化などしたいため、volumesをゴニョゴニョしてます。

version: '3'

services:
 web:
    build: ./docker-web
    ports:
        - 80:80
    depends_on:
        - app
    volumes:
        - ./api:/var/www/html/api
        - ./volumes/web/nginx:/etc/nginx/conf.d
        - ./volumes/web/var/log/nginx:/var/log/nginx
    links:
        - app
 app:
    build: ./docker-app
    depends_on:
        - db
    links:
        - db
    volumes:
        - ./api:/var/www/html/api
        - ./volumes/app/root:/root
        - ./volumes/app/usr/local/etc/php:/usr/local/etc/php
 db:
    image: mysql:5.7.19
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: api
      MYSQL_USER: api_user
      MYSQL_PASSWORD: api_pass
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    volumes:
      - ./volumes/db/log:/var/log/mysql
      - ./volumes/db/data:/var/lib/mysql 
      - ./volumes/db/my.cnf:/etc/my.cnf

Web: Dockerfile

WebサーバーのDockerfile
これと言って特筆することもないですね。

FROM nginx:1.11
RUN apt-get update && apt-get install -y \
    vim \
    unzip \
    zip \
    git 

App: Dockerfile

memcacheなど使いたかったので、結構ゴチャゴチャしてしまいました。
もっと簡略化することできそうですが・・・今回はこれでよしとします。

FROM php:7.3-fpm
RUN apt-get update && apt-get install -y \
   zlib1g-dev \
   libmemcached-dev \
   wget \
   memcached \
   vim \
   python \
   zip \
   unzip \
   iputils-ping \
   git \
   net-tools \
   libicu-dev \
   mariadb-client-10.3 \
   locales \
   locales-all

RUN docker-php-ext-install  -j$(nproc) intl mbstring pdo_mysql opcache bcmath

RUN pecl install xdebug-2.7.0beta1 && \
    docker-php-ext-enable xdebug

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

RUN curl -O https://bootstrap.pypa.io/get-pip.py
RUN python get-pip.py
RUN pip install awscli --upgrade

RUN cd /usr/local/src && \
    wget https://pecl.php.net/get/memcached-3.1.3.tgz  && \
    tar -xzvf memcached-3.1.3.tgz && \
    cd memcached-3.1.3 && \
    phpize && \
    ./configure && \
    make && \
    make install

RUN /etc/init.d/memcached start

DB: Dockerfile

DBサーバーでは build を指定してないのでDockerfileは存在しません。

dockerのビルド〜ログイン

  • ビルド
    • docker-compose up -d –build
      • ちょっと時間かかる
  • 確認
    • docker-compose ps
      • State を確認して UP となっていればOK
  • ログイン
    • docker-compose exec app /bin/bash –login
      • --login をつけないと環境変数をロードしてくれない

Laravelのセットアップ

Laravelのセットアップにはcomposerを使います。
composerは事前にインストールが必要ですが、今回はappのDockerfileに含めています。

下記コマンドでLaravelプロジェクトを作成。

composer create-project --prefer-dist laravel/laravel api

念の為、下記コマンドでLaravelのバージョンを確認。

php artisan --version

PHPのビルトインサーバを下記で実行できるらしいですが、今回はDockerでWebサーバーを用意しているので不要ですね。

php artisan serve

Webサーバーの設定

nginxとfpmを使った設定がまだ整理できていないので、Webサーバーの設定は今回は省略します。
不要な設定など削除されて整理できたら記事にします。

まとめ

今回、Laravel環境の理解のため、自分で構築しましたがLaradockでお手軽に開発環境整えられるのはすごくありがたいですね。

今回は初めてのLaravelということで、自分で構築しましたがポイントは抑えたので、次回からはLaradockを使おうと思います。

シェアする

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

フォローする