[Docker镜像配置Nginx容器迭代]内网环境升级Nginx中间件及其他,依赖外部镜像拉取后导入后配置。

前言

由于有些工作环境云内属于内网,所以docker操作起来并不会很方便,具体可以提现在其中一个方面就是镜像拉取。本文以Nginx为例, 由于系统的Nginx1.18版本存在漏洞。

漏洞描述:

  1. Nginx存在漏洞,该漏洞允许攻击者从DNS服务器伪造UDP数据包造成1-byte的内存覆盖,导致工作进程崩溃或潜在的其他影响。(需要升级到Nginx1.20版本及以上)

  2. Nginx 中的ngx_http_mp4_module模块存在内存越界写入漏洞,当在配置中使用 mp4 directive时,攻击者可利用此漏洞使用使用ngx_http_mp4_module模块处理特制的音频或视频文件时导致损坏Nginx worker 内存,进而导致 Nginx 工作进程终止或内存泄露。(需要升级到Nginx1.22版本及以上)

笔者这里采用Nginx1.23.1版本做演示,有其他版本需要你完全可以自定义。那如果同样再采用Nginx二进制包的方式重装一遍Nginx新版本,不可避免会导致系统的存储情况变得臃肿且混乱,那么使用docker容器就可以很好的解决这个问题。

这里我们需要在互联网区域准备一台虚拟机用于拉取镜像,用windows安装一台CentOS虚拟机即可,用类似腾讯云主机也同样能行。

# 第一步,安装docker
yum install docker -y

由于国内docker镜像被封禁得差不多,很难直接直接使用docker pull拉下来镜像使用,这里可以尝试替换镜像源。根据帖子发出的时间来确定是否可用,目前是24年7月份 以下镜像有效。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
      "https://dockerpull.com",
      "https://docker.1panel.live",
      "https://dockerproxy.cn",
      "https://docker.hpcloud.cloud"
  ] 
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

或者在该网站也能获取Nginx镜像:docker.aityp.com

具体操作

# 拉取镜像
docker pull nginx:1.23.1

#检查镜像是否成功拉取,执行后能看到镜像说明成功
docker images

#打包镜像
#docker save -o <要保存的文件名.tar> <要保存的源镜像id> 假设这里的源镜像id为  b6g7b042a1ee
docker save -o nginx123.tar.gz b6g7b042a1ee

#在的当前目录下会生成一个 nginx123.tar.gz 文件

然后,将镜像文件导入到内网环境虚拟机当中,再用docker导入镜像文件

#导入镜像
docker load  < nginx123.tar.gz

#查看是否导入成功
[root]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.23.1              51086ed63d8c        21 months ago       142MB

导入成功后,需要创建容器

#前提确保你本地映射路径是有效的,比如确保 Nginx123.conf 是否在本地已经创建出来了
docker run --name nginx123 \
-v /usr/local/docker-config/nginx/conf.d/Nginx123.conf:/etc/nginx/nginx.conf \
-v /usr/local/docker-config/nginx/html:/usr/share/nginx/html \
-v /usr/local/nginx/logs:/var/log/nginx \
-v /usr/local/nginx/certs:/usr/share/nginx/certs \
-d -p 80:80 -p 443:443 nginx:1.23.1

-v表示将本地的路径映射到docker容器内的某个路径。 -v [本地路径] : [容器内路径]

-v /usr/local/docker-config/nginx/conf.d/Nginx123.conf:/etc/nginx/nginx.conf ,这一行我们可知将Nginx121.conf映射到容器内,为什么要这么做呢?因为你创建容器后再去使用 docker exec -it nginx123 /bin/bash 去容器内修改配置文件,可能你在使用vim就会提示 :command not found,而通常用yum去安装可能连yum命令都没有。所以采用映射文件是一个比较好的处理方式。

-v /usr/local/docker-config/nginx/html:/usr/share/nginx/html 用于映射存放挂载在Nginx上的前端包,这里需要强调的一点是,/etc/nginx/nginx.conf 内指向的前端包路径也必须是 /usr/share/nginx/html 而不是 /usr/local/docker-config/nginx/html。切记!

-v /usr/local/nginx/logs:/var/log/nginx 输出日志

-v /usr/local/nginx/certs:/usr/share/nginx/certs 有域名证书的需要添加上,后续在Nginx配置文件中也需要注意路径问题。这里注意一点,有域名一般意味着你开通了HTTPS,那么你就需要创建容器的时候去打开443端口,切记!

-d -p 80:80 -p 443:443 nginx:1.23.1 表示指定本地端口 映射到容器内的端口 nginx:1.23.1 是镜像的名称和版本号(版本号根据你docker images显示出来的结果去匹配就可以了)。

查看容器是否创建成功

[root]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS            PORTS                                      NAMES
fd82cb501903        nginx:1.23.1        "/docker-entrypoint.…"   1 hours ago        Up 4 seconds        0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   nginx123

STATUS对应的是UP * seconds 而不是Exited就说明容器运行成功,不成功的查看一下容器日志。

最后,再去对应的路径,配置好Nginx配置文件即可。

其他参考指令,以容器名为nginx为例子。

#启动容器 
docker start nginx

#停止和删除容器
docker stop nginx
docker rm nginx

 # 进入容器内部
docker exec -it nginx  /bin/bash


#查看容器日志
docker  logs nginx
#查看容器最近三十分钟的日志
docker logs --since 30m nginx

总结

1、通过容器化方式解耦,使得中间件等更新版本不再需要繁杂的操作,减少导致服务器臃肿情况产生。

2、内网安装镜像的另一种新思路。

3、通过Nginx配置文件的路径指向和容器内部无法使用外部的vim指令可以看出,容器内外环境是独立的。但是通过文件映射可以解决编辑问题。

拉取nginx镜像并进行配置,你可以按照以下步骤进行操作: 1. 使用命令`docker pull nginx`来拉取官方的nginx镜像。 2. 使用命令`docker run --name nginx -p 80:80 -d nginx`来生成一个名为`nginx`的容器,并将宿主机的80端口映射到容器的80端口上。 3. 进入容器内部并修改配置文件。你可以使用命令`docker exec -it nginx /bin/bash`进入容器内部的bash shell。然后,你可以编辑`/etc/nginx/nginx.conf`文件以进行配置。你可以根据需要修改虚拟主机的配置、添加代理规则或者修改缓存设置等等。 4. 在完成配置后,你可以使用命令`docker restart nginx`重新启动容器,使配置生效。 这样,你就可以拉取nginx镜像并进行配置了。请注意,以上步骤仅提供了一个基本的配置示例,具体的配置需求可能会因实际情况而有所不同。你可以根据自己的需求进行相应的配置修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker部署nginx](https://download.csdn.net/download/weixin_38752897/14037803)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [CentOS7下使用docker安装nginx](https://blog.csdn.net/magic_1024/article/details/103444103)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [docker-Nginx镜像拉取配置](https://blog.csdn.net/m0_55649935/article/details/132057159)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值