LoginSignup
13
16

More than 5 years have passed since last update.

PHPを使ったSPA環境をDockerでつくる

Last updated at Posted at 2018-02-03

はじめに

SPAを作ろうとしているが Dockerの勉強とかは抜きにとりあえず動く環境作りたい という方の為にボイラープレートを作ってみました。

いきなりですが、モノはこちらに置いてあります。
https://github.com/TsukasaGR/SPA-BoilerPlate-PHP

Laradockで良いのでは?

1コンテナ1プロセス ってきれいではあるんですが結構入り口のハードルが高い気がしています。

ですので、今回は

  • フロントエンド
  • バックエンド
  • DB

の3コンテナだけにしています。

ちょっとだけ中身を解説

docker-compose.yml

まずはdocker-compose.yml。
ソースコードにコメントを付け足しています。

docker-compose.yml
version: '2'
services:
  # フロントエンド用コンテナ
  frontend:
    container_name: frontend
    build: ./docker-compose/frontend
    # VueやReactを想定していて、ほっとリロード用にポートを2つ空けています
    ports:
      - 80:80
      - 8080:8080
    # ソースコードをコンテナ内の/var/www/htmlにマウントし、ログファイルもマウントしています
    volumes:
      - ./frontend:/var/www/html
      - ./docker-compose/frontend/log/nginx:/var/log/nginx
    environment:
      TZ: "Asia/Tokyo"
    command: /sbin/init
    privileged: true
  # バックエンド用コンテナ
  backend:
    container_name: backend
    build: ./docker-compose/backend
    # フロントエンドとぶつからないようにポート番号を変えています
    ports:
      - 8000:80
    # PHPからDBにアクセスするため、DBコンテナと同一ネットワークの設定をしています(このコンテナからDBに接続する際のホスト名はapp-dbとして下さい)
    networks:
      - app_network
    # ソースコードをコンテナ内の/var/www/htmlにマウントし、ログファイルもマウントしています
    volumes:
      - ./backend:/var/www/html
      - ./docker-compose/backend/log/nginx:/var/log/nginx
      - ./docker-compose/backend/log/php-fpm:/var/log/php-fpm
    environment:
      TZ: "Asia/Tokyo"
    command: /sbin/init
    privileged: true
  app-db:
    container_name: app-db
    # 特に細かい設定をしないのでimageをそのまま使います
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: "Asia/Tokyo"
    ports:
      - 3306:3306
    # PHPからのアクセスを許容する為、バックエンドコンテナと同一のネットワークを設定しています
    networks:
      - app_network
    volumes:
      - ./docker-compose/db:/var/lib/mysql
    privileged: true
# バックエンドコンテナとDBコンテナを紐付けるためのネットワーク設定です
networks:
  app_network:

frontend/Dockerfile

次にフロントエンド用のDockerfile。
こちらもソースコードにコメントを付け足しています。

Dockerfile
# イメージファイルをCentOS7に設定
FROM centos:7.3.1611

# 実行コマンド設定
## nginxをインストール
RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum -y update nginx-release-centos
RUN yum -y --enablerepo=nginx install nginx
RUN mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bk
ADD default.conf /etc/nginx/conf.d/
RUN systemctl enable nginx

## node.js,npmをインストール
RUN yum -y install epel-release bzip2
RUN yum -y update openssl
RUN yum-config-manager --enable cr
RUN yum -y install nodejs npm
RUN npm install -g n
RUN n latest

RUN npm install -g npm-check-updates
RUN npm install -g yarn

# 起動時実行コマンド(1コンテナ1プロセスの場合、CMDはプロセス起動のコマンドを指定すると思いますが、今回は複数混ぜ込んだコンテナなので/sbin/initとしています)
CMD ["/sbin/init"]

backend/Dockerfile

最後にバックエンド用のDockerfile。
こちらもソースコードにコメントを付け足しています。

Dockerfile
# イメージファイルをCentOS7に設定
FROM centos:7.3.1611

# 実行コマンド設定
## nginxをインストール
RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum -y update nginx-release-centos
RUN yum -y --enablerepo=nginx install nginx
RUN mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bk
ADD default.conf /etc/nginx/conf.d/
RUN systemctl enable nginx

## phpをインストール
RUN yum -y install epel-release
RUN rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum -y install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-mysql php-mcrypt php-xdebug php-xml php-zip
RUN mv /etc/php.ini /etc/php.ini.bk
ADD php.ini /etc/php.ini

## php-fpmをインストール
RUN yum -y install php-fpm --enablerepo=epel --enablerepo=remi --enablerepo=remi-php71
RUN mv /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.bk
RUN systemctl enable php-fpm
ADD www.conf /etc/php-fpm.d/www.conf

## git(composerで利用する為)
RUN yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker wget && \
    cd /usr/local/src/ && \
    wget https://www.kernel.org/pub/software/scm/git/git-2.9.3.tar.gz && \
    tar xzvf git-2.9.3.tar.gz && \
    cd git-2.9.3 && \
    make prefix=/usr/local all && \
    make prefix=/usr/local install

# composerをインストール(ホストOSに入れたくない方の為に)
RUN curl -sS https://getcomposer.org/installer | php
RUN mv composer.phar /usr/local/bin/composer

# 起動時実行コマンド(フロントエンドと同様です)
CMD ["/sbin/init"]

さいごに

ものすごくざっくりした説明で これおかしいんじゃないの? というところも少なからずあると思います。
また、説明がだいぶザックリすがDockerを使ってSPAを初めて作られる方の何かしらの一助になれば幸いです。

13
16
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
16