一.安裝docker並啟動
yum install docker
systemctl start docker
二.安裝nginx
CentOS 7默認不能從yum中安裝nginx,原因可以自己搜索一下,需要執行以下命令
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
之后就可以用yum安裝了
yum install nginx
三.用docker拉取php-fpm
因為是老項目,不支持php7,所以用的php5.6的fpm鏡像
docker pull phpdockerio/php56-fpm
四.運行phpfpm
docker run --name php56fpm -v /var/www/html/xx/www/:/var/www/html/ --privileged=true -d phpdockerio/php56-fpm
解釋:
docker run
運行鏡像
--name php56fpm
將運行的容器命名為php56fpm
-v /var/www/html/xx/www/:/var/www/html/
映射本地目錄到容器內部的/var/www/html/,php-fpm容器內部會通過這個目錄訪問PHP文件.
--privileged=true
增加特權,不然沒有權限訪問/var/www/html/這里的文件,會導致nginx也無法訪問文件(File not found.).(共三種方法,見PS.1)
-d
后台運行
phpdockerio/php56-fpm
鏡像的名字
可以不映射端口,如果需要映射,增加參數-p 9001:9000 本地的9001端口映射到容器內部的9000端口,但nginx只用內部的9000端口就夠了.
五.修改宿主機的nginx配置
vi /etc/nginx/conf.d/xx.conf
location ~ \.php$ { root /var/www/html/xx/www; fastcgi_pass 172.17.0.2:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/html/$fastcgi_script_name; include fastcgi_params; }
其中的fastcgi_pass和fastcgi_param和平時配置nginx的時候有所區別,
fastcgi_pass要指定容器的IP,通過 docker inspect php56fpm 可以查看具體IP("IPAddress": "172.17.0.2")
fastcgi_param SCRIPT_FILENAME 后面的值要改成容器內部的地址/var/www/html/
PS.1
在Cent OS 7中運行,如果不加--privileged=true,則會出現nginx沒有訪問內部文件的權限
原因是CentOS7中的安全模塊selinux把權限禁掉了,至少有以下三種方式解決掛載的目錄沒有權限的問題:
1,在運行容器的時候,給容器加特權:--privileged=true
2,臨時關閉selinux:
su -c "setenforce 0"
3,添加selinux規則,將要掛載的目錄添加到白名單:
chcon -Rt svirt_sandbox_file_t /var/www/html/xx/www/
PS.2
如果遇到明明沒用開啟端口卻提示端口占用,有可能是之前刪除的容器還沒完全退出,重啟一下docker就好了
比如提示:Error response from daemon: driver failed programming external connectivity......
iptables failed: iptables --wait -t nat -A DOCKER