docker部署Nginx项目dockerfile
首先将需要的文件拷贝至要创建dockerfile目录中
这边已经编写好nginx.conf配置文件,到时候直接build成镜像,如下是我nginx的配置文件内容
安装nginx.1.16.1版本,自定义版本
dockerfile内容如下
FROM centos
#创建项目所需目录
RUN mkdir -p /www/ctm/xcy-project/yun-app
#创建这个目录是为了指定安装ningx路径
RUN mkdir -p /www/server/nginx/conf
#安装所需依赖
RUN yum -y install gcc pcre-devel zlib-devel openssl-devel make vim
#将nginx拷贝至软件目录下并解压
ADD nginx-1.16.1.tar.gz /www/server
#将配置好的nginx配置文件从本地拷贝至镜像中
COPY nginx.conf /www/server/nginx/conf
#编译安装nginx
RUN cd /www/server/nginx-1.16.1 && ./configure --prefix=/www/server/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module && make && make install
#删除包目录,安装完成就用不上了
RUN rm -rf /www/server/nginx-1.16.1
#指定进入容器后的工作目录
WORKDIR /www/server/nginx
#器运行时监听的端口,这里我就不设置了,nginx配置文件中我设置的801,运行容器时候指定就行。
#EXPOSE 801
#添加环境变量
ENV PATH /www/server/nginx/sbin/:$PATH
#当启动一个container时默认运行的命令,如果在启动container时赋予了command的话,那么定义的CMD中的命令将不会被
执行,而会去执行command的命令
CMD /bin/sh -c 'nginx -g "daemon off;"'
将dockerfile文件build成一个我们所需的一个镜像
docker build -f /www/ctm/data/dockerfile -t app/nginx .
查看是否已经构建完成
将镜像启动为一个容器
docker run -d --name yun-app -p 801:801
-v /www/sfs/logs/app-log:/www/server/nginx/logs
-v /www/ctm/xcy-project/yun-app:/www/ctm/xcy-project/yun-app app/nginx
解析
-d 启动在后台运行
--name 指定项目名称
-p 指定端口 801(外部访问端口):801(容器映射出来的端口)
端口nginx默认是80,我nginx配置文件专门修改为801。
第一个-v 是指定nginx日志共享路径
第二个-v 是指定项目目录的路径
app/nginx 是镜像的名称
已经启动访问测试。
ip:801
############彩蛋################
使用nginx -g daemon off启动nginx容器的原因
背景知识: Docker 容器启动时,默认会把容器内部第一个进程,也就是pid=1的程序,作为docker容器是否正在运行的依据,如果 docker 容器pid=1的进程挂了,那么docker容器便会直接退出。
原因: nginx默认是以后台模式启动的,Docker未执行自定义的CMD之前,nginx的pid是1,执行到CMD之后,nginx就在后台运行,bash或sh脚本的pid变成了1。所以一旦执行完自定义CMD,nginx容器也就退出了。为了保持nginx的容器不退出,应该关闭nginx后台运行。