Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Dockerで開発環境構築(Mac + Nginx + PHP-FPM)

More than 1 year has passed since last update.

Dockerで開発環境構築

この記事はDockerによる開発環境構築(Mac + Nginx + PHP-FPM + MySQL)Part 1をそのまま実行しています。
その中で、分からなかったコードや概念を備忘録として記事にしています。

まずDockerって何よ?

Dockerとは

1,Dockerはミドルウェアのインストールや各種環境設定をコード化して管理します。
2,コード化されたファイルを共有することで、どこでも誰でも同じ環境が作れる。
3,作成した環境を配布しやすい。
4,スクラップ&ビルドが容易にできる。

ふむふむ。
そしてコード化されたファイルを共有することで、どこでも誰でも同じ環境が作れる。このメリットは大きそうだなと思います。
というのも、行きたい企業がDockerを使っていたのでDockerをキャッチアップし出したというだけで、実務というかチーム単位では使用したことがないので、大きなメリットを感じられていないのです。

とりあえず進めます。

Dokerはインストールできている前提で進めます。

コンテナとイメージって何よ?

イメージ・・・ファイル
コンテナ・・・イメージを実行したもの

といったざっくりした認識でございます。
間違っていたら教えてください。

なので、コンテナを実行するにはイメージが必要です。
欲しいイメージがないときはDocker hubからpullしてきましょう。
$ docker pull centos
これでCentosがpullされます。

少し話は飛びますが
$ docker images$ brew listは似ているな〜と感じます。

さて本題

さて本題に入ります。

nginxコンテナ作成

お好きなディレクトリに移動して以下のコマンドを入力。
目に見えた方がわかりやすいので僕はDesktop上で行いました。

$ mkdir docker
$ cd docker
$ docker container run -d -p 8000:80 --name web nginx:latest

こちらがコンテナを作成する際のコマンドです。
docker container run -d -p 8000:80 --name web nginx:latest

-d・・・バックグラウンドでDockerコンテナを実行
-p・・・ポート指定
--name・・・コンテナに名前をつける

と言った感じです。

$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
dde74e29d594        nginx:latest        "nginx -g 'daemon of…"   9 seconds ago       Up 7 seconds        0.0.0.0:8000->80/tcp   web

コンテナが作成されプロセスが立ち上がったのが分かります。

http://localhost:8000/
にアクセスしてNginxの画面が表示されていれば成功です。

とりあえず確認できたら止めておきます。

$ docker container stop web

次ーーー。

docker-composeでnginxサーバーを起動

nginxを起動できましたが、phpを扱うとなるとphp-fpmのコンテナも作成しなくてはいけません。
※立ち上げる順番も気にしないといけないそうな・・・

そこで、コンテナ同士の依存関係をyml形式のファイルで管理できるdocker-composeというものを使用します。
先ほど作成したディレクトリ内で、docker-compose.ymlを作成します。

$ vi docker-compose.yml
docker-compose.yml
version: '3'             #フォーマットのバージョン。現在は3が最新。
services:                #アプリケーションを動かせるための記述
  web:                   #コンテナ名
    image: nginx:latest  #イメージ名
    ports:               #使用ポート
      - "8000:80"

記述後にnginxを起動させます。

$ docker-compose up -d

http://localhost:8000/
アクセスして、nginxの画面が出れば成功。

$一旦ストップさせます。

$ docker-compose stop

Hello World!!

次はDockerでHello Worldを表示させます。

$ mkdir src
$ cd src
$ vi index.html
<h1>Hello World !!</h1>

次は設定ファイルを記述します。

$ cd ../
$ mkdir web
$ cd web
$ vi default.conf

nginxの設定をdefault.confに記述していきます。

default.conf
server {
    listen 80;

    root  /var/www/;
    index index.html;

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

その後、docker-compose.ymlの最終行にこちらを追記します。

docker-compose.yml
#version: '3'
#services:
#  webserver:
#    image: nginx:latest
#    ports:
#      - "8000:80"
    volumes: #以下を追記 [ホストのファイルパス]:[コンテナファイルパス]
      - ./webserver/default.conf:/etc/nginx/conf.d/default.conf
      - ./src:/var/www/

volumesは、ホストのファイルパスをコンテナのファイルパスへマウントします。
つまり、コンテナ側の/etc/nginx/conf.d/default.confはホスト側の./webserver/default.confを認識するようなります。
マウントすることによって、コンテナ内で変更した内容を、ホスト側にリアルタイムで同期することができます。

再びdockerを立ち上げます。

$ docker-compose up -d

http://localhost:8000/
アクセスして、Hello Worldが表示されれば成功。

$一旦ストップさせます。

$ docker-compose stop

PHPを動作させるAPサーバーの設定

phpを扱うためにはAPサーバーが必要です。

docker-compose.ymlを編集します。

docker-compose.yml
#version: '3' 
#services:
#  web:
#    image: nginx:latest
#    ports:
#      - "8000:80"
    depends_on: #追記
      - app
#    volumes:
#      - ./web/default.conf:/etc/nginx/conf.d/default.conf
#      - ./src:/var/www/
  app: #以下を追記
    image: php:7.2.15-fpm
    volumes:
        - ./src:/var/www/

depends_onで依存関係を設定します。
これを設定しないとphpは動きません。

次にdefault.confを編集します。

default.conf
#server {
#    listen 80;
#    root  /var/www/;
#    index index.php index.html;
#    access_log /var/log/nginx/access.log;
#    error_log  /var/log/nginx/error.log;
    location / { #以下を追記
        try_files $uri $uri/ /index.php$is_args$args;
    }
    location ~ \.php$ {
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass   app:9000;
          fastcgi_index  index.php;
          include        fastcgi_params;
          fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param  PATH_INFO $fastcgi_path_info;
      }
#}

その後srcに移動しindex.phpを作成し中にphpinfo();を記述します。

index.php
<?php

phpinfo();

?>

再びdockerを立ち上げます。

$ docker-compose up -d

http://localhost:8000/
アクセスして、PHPの設定情報が表示されればOKです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away