首先確保已經正確安裝docker,而且能夠聯網。。。php
本人是 mac環境,其餘環境可能略有差別。。。nginx
docker search nginx docker pull nginx docker run -it --name nginx -v /Users/xxx/www:/data -p 80:80 nginx /bin/bash
1)拉取docker官方的nginx鏡像;docker
2)從剛拉取的nginx鏡像 run一個新容器 ;指定容器名 nginx ,掛載本地目錄/Users/xxx/www到容器中的/data,映射80端口到主機的80端口;vim
跑起來後,若是沒有意外 在主機上訪問 http://127.0.0.1/ 就能夠看到 「Welcome to nginx!」了。。。bash
docker run -it --name php-fpm -v /Users/xxx/www:/data -p 9000:9000 php:7.1.8-fpm /bin/bash
這裏 能夠不用先拉取鏡像,docker檢查本地不存在所請求的鏡像會自動去docker-hub 拉取;編輯器
其次,這裏使用了php:7.1.8-fpm 冒號後面是鏡像版本,默認是latest,這裏不用latest 緣由是裏面貌似沒有fpm,具體版本號能夠參考docker-hub網站,也可使用其餘鏡像。。。php-fpm
1)fpm測試
找到php-fpm的配置文件 www.conf ,將 listen = xxxxxxxxxxx 改成 :網站
listen = 0.0.0.0:9000spa
或
listen = 127.0.0.1:9000
均可以,而後運行命令 php-fpm (或者 全路徑;或者 service php-fpm start ;或者 php-fpm start 等等。。。)
在/var/www 新建一個php文件,寫好測試代碼;
2)nginx
編輯nginx 虛擬目錄配置文件 :
vi /etc/nginx/conf.d/default.conf(容器默認沒有vi,可經過 apt-get update; apt-get install vim; 安裝編輯器)
location ~ \.php$ { root /var/www; fastcgi_pass 172.17.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
root 的值很重要,這裏要填php容器中php項目所在目錄 而不是nginx容器中的路徑;之前nginx和PHP裝在一臺「機器」時不存在這個問題,如今分離部署必定要注意。(順便多說一點,fastcgi_param 參數配置的是nginx請求php-fpm時須要帶過去的參數,SCRIPT_FILENAME 表示fpm要執行的PHP文件的路徑,而 $document_root的值 就是前面的 root 參數的值,因此root固然要配置成php容器中的php路徑。。。)
fastcgi_pass 這裏的ip地址可使用php容器的ip(個人是172.17.0.4),可是容器的ip可能會在容器重啓後發生變化,因此這裏使用容器的網關(172.17.0.1)。這裏說幾種查看容器 ip 的方法:
1.從宿主機查看
$ docker inspect --format '{{ .NetworkSettings }}' 容器id
2.容器中查看
a. ifconfig 這個應該很熟,只是容器通常默認沒有安裝:apt-get install -y net-tools
b. ip addr
配置好後 重啓nginx,訪問測試php文件,沒有意外就看到你想看到的東西了。。。
還有一種是經過 --link 參數在容器之間創建鏈接,我的感受 端口映射更靈活。。。