Docker镜像的私有定制之nginx

news2024/9/22 4:12:08

一、背景

机器上已有nginx的可执行文件,但它是基于官方源码进行修改过的,可模块的源码一时找不到。另外,每次都基于源码去构建,对于Nginx部署也是麻烦。
所以,我们想要改为docker容器化部署nginx。

  • 操作系统是centos7
  • nginx版本是1.15.2

在介绍容器化方案前,我们先对目录进行一些说明。
容器里的目录结构,尽量和原主机的保持一致。比如我的宿主机nginx目录是在/server/nginx,可执行文件在/server/nginx/sbin目录下,像其他的目录(conf/logs/html)也都是在其相对路径中。
在这里插入图片描述

二、容器化思路

1、使用docker volume的方式,挂载主机的可执行文件至容器。

  nginx:
    image: nginx:1.15.2
    restart: always
    container_name: nginx
    volumes:
      - /server/nginx/sbin/nginx:/usr/sbin/nginx:rw
      - ./nginx/conf:/server/nginx/conf:rw
      - ./nginx/logs:/server/nginx/logs:rw
      - ./nginx/html:/server/nginx/html:rw
    ports:
      - 80:80

2、基于alpine/centos/ubuntu等操作系统,将可执行文件拷贝进容器。

这里仅以ubuntu为例:

# 使用基础的 Ubuntu 镜像
FROM ubuntu:latest

# 更新系统并安装 Nginx 1.15.2 版本
RUN apt-get update && apt-get install -y nginx=1.15.2

# 日志文件
RUN mkdir -p /server/nginx/logs

# 复制自定义的 Nginx 配置文件到容器中
COPY conf/. /server/nginx/conf
COPY html/. /server/nginx/html

# 复制您的可执行文件到容器中
COPY sbin/nginx /usr/sbin/nginx

# 暴露 Nginx 默认的 HTTP 端口
EXPOSE 80

# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

3、基于官方nginx,将可执行文件拷贝进容器。

#nginx 1.15.2 镜像作为基础镜像
FROM nginx:1.15.2

# 日志文件
RUN mkdir -p /server/nginx/logs

# 复制自定义的 Nginx 配置文件到容器中
COPY conf/. /server/nginx/conf
COPY html/. /server/nginx/html

# 复制您的可执行文件到容器中
COPY sbin/nginx /usr/sbin/nginx

# 暴露 Nginx 默认的 HTTP 端口
EXPOSE 80

# 启动 Nginx
CMD ["nginx", "-g", "daemon off;"]

三、测试

docker build -t xxx-nginx:1.15.2-0826 .

docker run -it -p 8082:80 xxx-nginx:1.15.2-0826

这里再举例使用docker-compose部署nginx,采用的是自定义docker 镜像。

  nginx:
    image: xxx-nginx:1.15.2-0826
    restart: always
    container_name: nginx
    volumes:
      - ./nginx/nginx.conf:/server/nginx/conf/nginx.conf
      - ./nginx/logs:/server/nginx/logs 
    ports:
      - 80:80

方案三比之方案一较好的一个地方是,宿主机只需要一个nginx.conf文件。
在相对路径nginx下的文件列表见下:
在这里插入图片描述

方案二和方案三的区别不大,一处是底层的操作系统不同,二是要指定nginx版本进行安装。
目标都是要有一个已安装好的Nginx,第二步都是拷贝自定义文件至容器。

四、总结

本文主要是讲述了如何定制一个nginx容器,要制作自定义容器的几个办法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/931921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STL-常用容器-map/ multimap容器(二叉树-红黑树)

1 map基本概念 简介: Map是一种关联容器,它通过将键和值成对存储,实现了快速的键值查找。在Map中,每个键都是唯一的,而值可以重复。Map容器内部使用平衡二叉树(通常是红黑树)的数据结构来实现高…

HodlSoftware-免费在线PDF工具箱 加解密PDF 集成隐私保护功能

HodlSoftware是什么 HodlSoftware是一款免费在线PDF工具箱,集合编辑 PDF 的简单功能,可以对PDF进行加解密、优化压缩PDF、PDF 合并、PDF旋转、PDF页面移除和分割PDF等操作,而且工具集成隐私保护功能,文件只在浏览器本地完成&…

OpenCV基础知识(8)— 图形检测

前言:Hello大家好,我是小哥谈。图形检测是计算机视觉的一项重要功能。通过图形检测可以分析图像中可能存在的形状,然后对这些形状进行描绘,例如搜索并绘制图像的边缘,定位图像的位置,判断图像中有没有直线、…

【面向大一新生IT技术社群招新啦,不来瞅瞅?】

个人名片: 🐼作者简介:一名大三在校生 🐻‍❄️个人主页:落798. 🐼个人WeChat:落798. 🕊️系列专栏:【零基础学java】 ----- 【重识c语言】 ---- 【计算机网络】—【Spri…

Fortran 微分方程求解 --ODEPACK

最近涉及到使用Fortran对微分方程求解,我们知道MATLAB已有内置的函数,比如ode家族,ode15s,对应着不同的求解办法。通过查看odepack的官方文档,我尝试使用了dlsode求解刚性和非刚性常微分方程组。 首先是github网址&am…

代码随想录算法训练营第四十六天|LeetCode 1143,1035,53

目录 LeetCode 1143.最长公共子序列 动态规划五步曲: 1.确定dp[i][j]的含义 2.找出递推公式 3.初始化dp数组 4.确定遍历顺序 5.打印dp数组 LeetCode 1035.不相交的线 LeetCode 53.最大子序列和(动态规划) 动态规划五步曲: 1.确定…

【rust/egui】(五)看看template的app.rs:SidePanel、CentralPanel以及heading

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 SidePanel 侧边栏,如下图 …

【软件安装】Python安装详细教程(附安装包)

软件简介 Python由荷兰数学和计算机科学研究学会的Guido van Rossum 于1990 年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质&#xff0c…

Dynamic CRM开发 - 使用XrmToolbox工具创建自动编号

有时需要为实体创建自动编号,可以使用XrmToolbox工具。 下载XrmToolbox(https://www.xrmtoolbox.com/) 解压后打开XrmToolBox.exe,如下图: 打开后界面如下: 在“Tools”选项卡中找到Auto Number Manager工具</

麒麟OS国产系统身份证阅读器web网页开发使用操作流程

1、打开麒麟软件商店&#xff0c;选择驱动&#xff0c;找到身份证阅读器&#xff0c;找到东信智能身份证社保卡读卡器&#xff0c;点击安装。 2、安装完成后&#xff0c;点击打开 3、进入读卡界面 4、进入代码集成 <script type"text/javascript">var ctnFin…

A股自动交易,自动止盈止损,自动打板

一、前言 炒股的都知道&#xff0c;股市里最难克服的就是人性。开发这个项目的初衷即是想通过机器来克服人性的弱点。因为只要把策略定好&#xff0c;机器会无条件挂单。该止损止损&#xff0c;该止盈止盈。 短线的话卖比买更重要&#xff1a;复盘就会发现&#xff0c;大的亏…

算法通关村第十关——快速排序算法

1 快速排序基本过程 快速排序的是将分治法运用到排序问题的典型例子。力扣912题&#xff0c;给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 基本思想&#xff1a;是通过随机标记一个pivot元素将含有n个元素的序列划分为左右两个子序列left和right&#xff0c;其中…

验证码服务(使用提供好的项目)

1、先生成一个指定位数的验证码&#xff0c;根据需要可能是数字、数字字母组合或文字。 2、根据生成的验证码生成一个图片并返回给页面 3、给生成的验证码分配一个key&#xff0c;将key和验证码一同存入缓存。这个key和图片一同返回给页面。 4、用户输入验证码&#xff0c;连…

什么是 DALI 协议?

在照明行业&#xff0c;我们常常听到 DALI 的名号&#xff01;那么&#xff0c;到底什么是 DALI 呢&#xff1f;那么今天&#xff0c;我们就来一起入门&#xff0c;揭开 DALI 的神秘面纱~什么是 DALI 协议&#xff1f; DALI &#xff0c;实际上是一个简称&#xff01;它的全程如…

向阳而生的智慧光伏设施

光伏发电太阳花装配双轴自动追踪器&#xff0c;会根据当前的经纬度和时间&#xff0c;实时计算太阳的方位角和高度角&#xff0c;计算出光伏板应当运行的角度&#xff0c;于倾角传感器的当前角度 比较&#xff0c;当二者的误差超过 1时&#xff0c;发出电机运转指令&#xff0c…

程序填空技巧1.0

程序填空要先知道这个程序要干什么&#xff0c;然后找到标准模板后对照模板填写&#xff0c;但当然不是让你做题的时候对照模板写&#xff0c;而是要把每种算法的标准模板背下来&#xff0c;但你肯定要问&#xff1a;邹邹&#xff0c;我哪里来的模板呢&#xff1f;&#xff1f;…

租赁小程序开发|免押租赁系统包含哪些功能?

租赁小程序是一种基于现代技术的创新解决方案&#xff0c;为租赁业务提供了全面的管理功能。通过这个小程序&#xff0c;您可以方便地组织和跟踪您的库存情况&#xff0c;轻松管理租赁合同以及处理订单。这一切都在您的指尖之间&#xff0c;让您节省时间和精力&#xff0c;专注…

PHP敬老院管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 敬老院管理系统&#xff08;养老&#xff09;是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 论文 https://download.csdn.net/download/qq_41221322/…

【OCR识别】tess4j图片识别文字

什么是OCR? OCR &#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指电子设备&#xff08;例如扫描仪或数码相机&#xff09;检查纸上打印的字符&#xff0c;通过检测暗、亮的模式确定其形状&#xff0c;然后用字符识别方法将形状翻译成计算机…