• 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后台运行。

  • 相关阅读:
    Http请求头与响应头
    获取ip位置方法
    简单的Http Server实现
    HTTP
    long、int与byte数组之间的相互转换
    GlusterFS简单配置
    创建线程池
    网络编程socket
    面向对象-进阶篇
    面向对象-初级篇
  • 原文地址:https://www.cnblogs.com/sxshaolong/p/14144752.html
Copyright © 2020-2023  润新知