読者です 読者をやめる 読者になる 読者になる

LifeWrite

気が向いたら書きます

docker(docker-compose)で10分でnginx+mysql+php-fpmの環境を作る

docker-composeを使ったら非常に簡単にWEBの環境が作れました

ホスト環境

centos7

docker-compose、dcokerインストール

yum update
#dockerインストール
curl -sSL https://get.docker.com/ | sh

#docker-composeインストール
curl -L https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

ファイル構造(最終的にdata/php/publicをweb上に公開します)

# tree
.
├── containers
│   ├── mysql
│   │   └── Dockerfile
│   ├── nginx
│   │   ├── conf
│   │   │   └── default.conf
│   │   └── Dockerfile
│   └── php-fpm
│       ├── conf
│       │   └── php.ini
│       └── Dockerfile
│   
├── data
│   ├── mariadb
│   └── php
│        └── public
└── docker-compose.yml

各ファイル

docker-compose.yml

#docker-compose.yml
version: "2"

services:
  php:
    build: ./containers/php-fpm
    volumes:
      - "./data/php:/var/www/html"
    environment:
      DB_HOST: db
      DB_PORT: 5432
  nginx:
    build: ./containers/nginx
    ports:
      - 80:80
      - 443:443
    links:
      - php
  mysql:
    build: ./containers/mysql
    volumes:
      - "./data/mariadb:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_PASSWORD: ryouzi01
      MYSQL_USER: abot
      MYSQL_DB: abot
    expose:
     - "3306"

php Dockerfile

FROM php:fpm
WORKDIR /var/www/html
RUN apt-get update && docker-php-ext-install mbstring mysqli pdo_mysql
ADD conf/php.ini /usr/local/etc/php/conf.d

nginx Dockerfile

FROM nginx:1.9.12
ADD conf/default.conf /etc/nginx/conf.d

mysql Dockerfile

FROM mariadb:10.1.18

VOLUME /etc/localtime:/etc/localtime:ro

RUN sed -i -e "s/^#bind-addresss*=s*0.0.0.0/bind-address=0.0.0.0/" /etc/mysql/my.cnf

nginx.conf

server {
    listen       80 default;
    server_name  localhost;
    charset utf-8;
    root /var/www/html;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    #rewrite ^(.+)/$ $1;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        root /var/www/html/public;
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        #fastcgi_split_path_info ^(.+\.php)(.+)$;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

php.conf

#以下php.iniで使うものを設定
date.timezone = Asia/Tokyo

上記のファイルが全部そろったらdockerコンテナ起動

#docker-compose.ymlがある階層で
docker-compose build
docker-compose up -d

docker-compose stop

以上、非常に簡単に環境が作れて、かつ再構築も簡単