dockerfile创建nginx-php容器镜像
目录一、前言:二、dockerfile创建nginx-php容器镜像三、用docker-compose去运行容器,在docker-compose.yml里设置挂载目录。一、前言:由于上一遍的<<dockerfile创建lnmp镜像>>讲到,当nginx与php分两个容器布署时,php容器里运行php-fpm的用户是nobody,虽然可正常...
·
目录
三、用docker-compose去运行容器,在docker-compose.yml里设置挂载目录。
一、前言:
由于上一遍的<<dockerfile创建lnmp镜像>>讲到,当nginx与php分两个容器布署时,php容器里运行php-fpm的用户是nobody,虽然可正常跑到phpinf()函数,也可以验证mysql数据库是否连接正常的代码。但是在生产环境中,nginx和mysql容器跑某些项目时,会因某些用户权限问题,导致nginx访问不到php-fpm服务!因此,nginx和php最好放在同一个docker容器里,关联性好,简洁。
二、dockerfile创建nginx-php容器镜像
1、文件目录结构
[root@docker-test nginx-php]# pwd
/root/nginx-php
[root@docker-test nginx-php]# ls
dockerfile nginx-1.15.7.tar.gz
2、dockerfile配置文件
FROM centos:latest
MAINTAINER https://blog.csdn.net/lituxiu
ENV TIME_ZOME Asia/Shanghai
ARG WJ="nginx-1.15.7"
#wget http://nginx.org/download/nginx-1.15.7.tar.gz
#COPY nginx.conf /usr/local/nginx/
ADD $WJ.tar.gz /tmp
RUN yum -y install gcc gcc-c++ make openssl-devel pcre-devel zlib-devel \
&& useradd -s /sbin/nologin nginx \ #创建nginx用户关联nginx和php-fpm程序
&& mkdir -p /usr/local/nginx \
&& cd /tmp/$WJ \
&& ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-stream --with-http_ssl_module --with-http_stub_status_module \
&& make -j 4 \
&& make install \
&& echo "${TIME_ZOME}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZOME} /etc/localtime \
&& rm -rf /tmp/nginx* \
&& ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx \
#php是直接用第三方yum源epel安装的,指定安装7.2版本
&& yum install -y epel-release \
&& rpm -Uvh http://rpms.remirepo.net/enterprise/remi-release-7.rpm \
&& yum -y install yum-utils \
&& yum-config-manager --enable remi-php72 \
&& yum -y install php php72-php-opcache php72-php-ldap php72-php-odbc php72-php-pear php72-php-xml php72-php-xmlrpc php72-php-soap curl curl-devel php72-php-mbstring php72-php-mysqlnd php72-php-fpm php72-php-gd \
&& sed -i "s/apache/nginx/g" /etc/opt/remi/php72/php-fpm.d/www.conf \ #把php-fpm的www.conf配置里的user和group都nginx
&& yum clean all \
&& yum -y remove gcc gcc-c++ make \
&& chmod -R 777 /var/opt/remi/php72/lib/php/session/ #设置权限php的session目录权限,否则跑项目里,会提示"Permission denied"
WORKDIR /usr/local/nginx/
EXPOSE 80
CMD /opt/remi/php72/root/sbin/php-fpm && nginx -g "daemon off;"
#上一行CMD同时启动php-fpm服务,不过最后一个服务一定要前台运行,要不创建的镜像后台会启动不起来(docker容器运行的原理)
3、创建镜像
[root@docker-test nginx-php]# docker build -t nginx1.15.7p:latest ./
4、验证:查看php-fpm和nginx的进程
三、用docker-compose去运行容器,在docker-compose.yml里设置挂载目录。
(注意:先运行容器时挂载一些临时目录(如/tmp目录),再在把你要挂载的目录、配置文件拉进去,那么宿主主机本地会同步保存到了,最后在本地创建对应的目录挂载到容器目录即可。否则,空白目录或配置错误会导致容器启动失败,报错 )
version: '2'
services:
nginx:
image: 7849c6cf185e
container_name: 'nginx'
restart: 'always'
ports:
- "80:80"
volumes: #这一项为挂载的目录(左为本地,右为窗口目录)
- "/data/nginx/html:/usr/local/nginx/html"
- "/data/nginx/logs/:/usr/local/nginx/logs/"
- "/data/nginx/conf/:/usr/local/nginx/conf/"
- "/data/php/php-fpm.d:/usr/php/etc/php-fpm.d"
networks:
dangjian:
ipv4_address: 172.19.0.2
...
中还有其它的容器,类似tomcat、redis和mongodb等
...
networks:
dangjian:
ipam:
config:
- subnet: 172.19.0.0/16
gateway: 172.19.0.1
配置基本如上所示!!!
项目展示图
更多推荐
已为社区贡献4条内容
所有评论(0)