前言
“PHP是世界上最好的語言”往史,這個大家應該都沒有爭議把:)
但是當你用php寫完一個項目后增淹,你會發(fā)現(xiàn)欧引,如果要將項目部署到線上垮媒,光是nginx+php-fpm的環(huán)境部署就要花費你許多時間听系。利用docker贝奇,可以大大節(jié)省我們的環(huán)境部署時間。
正文
docker簡介
- 如果你還不了解docker靠胜,那么推薦你先通過其官網(wǎng)和docker-從入門到實踐來學習和熟悉docker
- 這里簡單介紹下docker compose:
Compose 項目是 Docker 官方的開源項目掉瞳,負責實現(xiàn)對 Docker 容器集群的快速編排。docker compose項目允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關聯(lián)的應用容器為一個項目(project)浪漠。它可以方便地對一組docker容器的生命周期進行管理陕习。
極簡部署方式
- 這里有一個外國友人開源的項目:dockerised-php,將他的項目拉取下來址愿,直接運行
docker-compose up
命令该镣,便已經(jīng)可以成功地啟動php-fpm+nginx的環(huán)境。訪問http://localhost:8080响谓,便可以看到phpinfo的頁面损合。code目錄是放置php代碼的地方 - 如果你的8080端口已經(jīng)被占用,那么需要修改下docker-compose.yml文件里的nginx容器的端口映射
改良版
-
改進點:
- 以上述方式啟動后娘纷,php-fpm和nginx是以tcp的方式進行通信的嫁审。從原理上來說,unix socket方式肯定要比tcp的方式快而且消耗資源少赖晶,所以通常我將其改為了socket方式律适。
- 同時我還將php-fpm.conf和www.conf提取了出來,使得可以方便地修改php-fpm的配置。這2個文件直接放在根目錄即可捂贿,可以根據(jù)需求修改
- 最后我將nginx的log通過VOLUME進行了掛載纠修,我們應該盡量保持容器存儲層不發(fā)生寫操作。你可以根據(jù)你需要在docker-compose.yml中修改其存儲路徑厂僧,注意權限問題
docker-compose.yml
version: '2.1'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./code:/code
- ./site.conf:/etc/nginx/conf.d/default.conf
- /private/var/log/nginx:/var/log/nginx
- "phpsocket:/var/run"
networks:
- code-network
php:
image: php:fpm
volumes:
- ./code:/code
- ./php-fpm.conf:/usr/local/etc/php-fpm.conf
- ./www.conf:/usr/local/etc/php-fpm.d/www.conf
- ./zz-docker.conf:/usr/local/etc/php-fpm.d/zz-docker.conf
- "phpsocket:/var/run"
networks:
- code-network
networks:
code-network:
driver: bridge
volumes:
phpsocket:
通過定義volumes: phpsocket:
分瘾,我們讓php-fpm和nginx容器共享/var/run
路徑下的php7-fpm.sock文件,實現(xiàn)nginx和php-fpm直接使用unix socket通信吁系。
另一個關鍵點是zz-docker.conf德召,在我嘗試多次后(google+stackoverflow),發(fā)現(xiàn)只有修改了zz-docker.conf里面的listen參數(shù)后汽纤,socket模式才起效果上岗。不知道php-fpm的官方docker鏡像為什么要用這樣一個文件,這個我一直都還沒弄懂其意圖蕴坪。當然其他參數(shù)還是在www.conf里面進行配置即可肴掷。下面是zz-docker.conf文件內容
[global]
daemonize = no
[www]
listen = /var/run/php7-fpm.sock
listen.mode = 0666
總結
利用docker,我們可以很方便地部署一套php的運行環(huán)境背传,而且也不用擔心代碼運行環(huán)境差異帶來的麻煩呆瞻。我寫這篇文章只是拋磚引玉,實際使用中還要根據(jù)自己的項目進行一些個性化的修改径玖。
比如你需要使用的php庫不在官方提供的鏡像里痴脾,那么你可以修改php-fpm的鏡像,或者自己構建鏡像梳星。同時如果你的項目還需要MySQL服務赞赖,也可以在此基礎上繼續(xù)加入MySQL鏡像,只不過要注意其數(shù)據(jù)存儲需要通過volumes掛載就行冤灾。
轉載自我的博客:劉文哲的博客