Dockerfile构建nginx并实现随时更新nginx配置(公网、内网)

本文目标:在公网和内网情况下通过Dockerfile构建处nginx容器,并在不进入容器的情况下,修改nginx配置文件,最后通过shell脚本的形式将配置修改成功

准备配置文件

nginx:conf

# 全局配置
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;

events {
    worker_connections  1024;
}

# http 配置
http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # 访问日志配置
    access_log /var/log/nginx/access.log;

    # 服务器块
    server {
        listen 80;
        server_name localhost;

        location / {
            root /home/web;
            index index.html;
        }

        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }
}

配置文件有可能会出现如下问题:

问题1:nginx: [emerg] "server" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:1
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed

解决方法:server 标签需要在 http的标签内  

正确的配置写法 : http {

server {}

}

问题2: nginx: [error] invalid PID number "" in "/usr/local/nginx/logs/nginx.pid"

解决方法:执行  /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

问题3:nginx: [emerg] no "events" section in configuration

解决方法:在nginx.conf  添加  

events {
    worker_connections  1024;
}

 公网情况下

Dockerfile

#使用官方nginx基础镜像
FROM nginx:latest

#复制自定义的配置文件到容器
COPY nginx.conf /etc/nginx/nginx.conf

#暴露80端口
EXPOSE 80

#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

#设置编码
ENV LANG C.UTF-8

#容器启动时自动运行Nginx
CMD ["nginx","-g","daemon off;"]

build.sh

#编译Dockerfile文件
docker build -t mynginx .
#启动容器
docker run -d --restart always -p 80:80 --name mynginx -v /home/web:/home/web mynginx

delete.sh

如果构建错误可以执行这个脚本

#停止容器
docker stop mynginx
#删除容器
docker rm mynginx
#删除镜像
docker rmi mynginx

restart.sh

如果需要修改nginx.conf,就修改上面的配置文件,并执行这个脚本

#复制最新的nginx.conf到容器
docker cp nginx.conf mynginx:/etc/nginx/nginx.conf
#重启容器
docker restart mynginx

内网情况下

内网需要先向本地导入一个镜像,然后再使用Dockerfile进行构建

可以在公网将镜像进行打包

docker save -o mynginx.tar mynginx

然后在内网下进行载入

docker load -i mynginx.tar

然后通过docker images进行查看镜像是否载入成功

Dockerfile

#使用官方nginx基础镜像
FROM mynginx

#复制自定义的配置文件到容器
COPY nginx.conf /etc/nginx/nginx.conf

#暴露80端口
EXPOSE 80

#设置时区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone

#设置编码
ENV LANG C.UTF-8

#容器启动时自动运行Nginx
CMD ["nginx","-g","daemon off;"]

build.sh

#编译Dockerfile文件
docker build -t nginx .
#启动容器
docker run -d --restart always -p 80:80 --name nginx -v /home/web:/home/web nginx

 delete.sh

如果构建错误可以执行这个脚本

#停止容器
docker stop nginx
#删除容器
docker rm nginx
#删除镜像
docker rmi nginx

restart.sh

如果需要修改nginx.conf,就修改上面的配置文件,并执行这个脚本

#复制最新的nginx.conf到容器
docker cp nginx.conf nginx:/etc/nginx/nginx.conf
#重启容器
docker restart nginx

补充

以上所有的东西需要在同一文件夹下!!!!

以上所有的东西需要在同一文件夹下!!!!

以上所有的东西需要在同一文件夹下!!!!

build.sh、delete.sh、restart.sh这些文件在创建之后,可能没有权限,可以使用如下命令赋权

chmod +x 文件名

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值