nginx、php-fpm 與 docker

看完 docker 官方教程,想搭個本地 php 開發環境,可搜了一圈,也沒找到特別滿意的文章,順手總結一個。php

假設

  • 你知道 nginx、php-fpm 是什麼
  • 你瞭解 docker 的基本命令

運行環境

MacBook Pro,OSX 10.11.5html

啓動 php-fpm

解釋執行 php 須要 php-fpm,先讓它運行起來:nginx

docker run --name dream-php -d \
    -v ~/Workspace/tmp/www:/var/www/html:ro \
    php:7.1-fpm

說明:docker

  • dream-php 是容器的名字。
  • ~/Workspace/tmp/www 是本地 php 文件的存儲目錄,/var/www/html 是容器內 php 文件的存儲目錄,ro 表示只讀。

編輯 nginx 配置文件

本地存儲路徑:bash

~/Workspace/tmp/docker/nginx/conf.d/default.conf

配置文件內容:網絡

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass   php:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/$fastcgi_script_name;
        include        fastcgi_params;
    }
}

說明:php-fpm

  • php:9000 表示 php-fpm 服務的 URL,下文還會說起。
  • /var/www/html 是 dream-php 中 php 文件的存儲路徑,經 docker 映射,變成本地路徑 ~/Workspace/tmp/www(能夠再看一眼 php-fpm 啓動命令)

啓動 nginx

docker run --name dream-nginx -p 80:80 -d \
    -v ~/Workspace/tmp/www:/usr/share/nginx/html:ro \
    -v ~/Workspace/tmp/docker/nginx/conf.d:/etc/nginx/conf.d:ro \
    --link dream-php:php \
    nginx

說明:測試

  • -p 80:80 用於添加端口映射,把 dream-nginx 中的 80 端口暴露出來。
  • ~/Workspace/tmp/www 是本地 html 文件的存儲目錄,/usr/share/nginx/html 是容器內 html 文件的存儲目錄。
  • ~/Workspace/tmp/docker/nginx/conf.d 是本地 nginx 配置文件的存儲目錄,/etc/nginx/conf.d 是容器內 nginx 配置文件的存儲目錄。
  • --link dream-php:php 把 dream-php 的網絡併入 dream-nginx,並經過修改 dream-nginx 的 /etc/hosts,把域名 php 映射成 127.0.0.1,讓 nginx 經過 php:9000 訪問 php-fpm。

測試結果

在 ~/Workspace/tmp/www 下放兩個文件:spa

index.htmlcode

<html><body><h1>Hello World</h1></body></html>

phpinfo.php

<?php phpinfo();

接下來看結果吧:

若是看到 Hello World 和熟悉的 phpinfo,那麼大功告成。

訪問 index.html 時,nginx 讀的是 /usr/share/nginx/html/index.html,這個路徑經 dream.nginx 轉換變成本地的 ~/Workspace/tmp/www/index.html。

訪問 phpinfo.php 時,nginx 讓 php-frm 執行 /var/www/html/phpinfo.php,這個路徑經 dream.php 轉換成 ~/Workspace/tmp/www/phpinfo.php。

FAQ

怎樣觀察容器內文件系統:

docker exec -it dream-nginx bash
相關文章
相關標籤/搜索