1.准备构建上下文

[root@host1 ~]# mkdir dockerfile-test && cd dockerfile-test
[root@host1 dockerfile-test]# touch nginx.repo
[root@host1 dockerfile-test]# touch Dockerfile
[root@host1 dockerfile-test]# vi nginx.repo
[root@host1 dockerfile-test]# cat nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/9Stream/$basearch/
gpgcheck=1  
enabled=1   
gpgkey=https://nginx.org/keys/nginx_signing.key[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/9Stream/$basearch/
gpgcheck=1
enabled=0  
gpgkey=https://nginx.org/keys/nginx_signing.key

2.编写 Dockerfile

[root@host1 dockerfile-test]# vi Dockerfile
[root@host1 dockerfile-test]# cat Dockerfile# 1. 基础镜像:使用 CentOS Stream 9 官方镜像(匹配目标源版本)
FROM centos/stream9:latest# 2. 维护者信息(可选,标注镜像归属)
LABEL maintainer="your-name <your-email@example.com>" \os.version="CentOS-Stream-9-20250903.0" \nginx.repo.version="stable"# 3. 复制本地适配 Stream 9 的 nginx.repo 到容器 YUM 源目录
# 路径 /etc/yum.repos.d/ 是 CentOS Stream 9 标准 YUM 源目录
COPY nginx.repo /etc/yum.repos.d/# 4. 安装 Nginx(适配 Stream 9 的 YUM 操作)
RUN set -eux; \# 1. 导入 Nginx GPG 密钥(避免 Stream 9 下校验失败)rpm --import https://nginx.org/keys/nginx_signing.key; \# 2. 清理旧缓存,生成新缓存(Stream 9 推荐用 dnf,兼容 yum)dnf clean all; \dnf makecache fast; \# 3. 安装 Nginx(--setopt=tsflags=nodocs 减少镜像体积,不安装文档)dnf install -y nginx --setopt=tsflags=nodocs; \# 4. 清理缓存(进一步减小镜像体积)dnf clean all; \# 5. 确保 Nginx 运行目录权限(Stream 9 下默认权限可能更严格)chown -R nginx:nginx /var/log/nginx /var/run/nginx; \chmod 755 /var/log/nginx /var/run/nginx# 5. 暴露 Nginx 默认端口(80/tcp,与配置一致)
EXPOSE 80/tcp# 6. 配置 Nginx 前台运行(关键:避免容器启动后立即退出)
# Stream 9 下 Nginx 二进制路径与传统 CentOS 一致,无需调整
CMD ["nginx", "-g", "daemon off;"]

3.使用 docker build 命令构建镜像

注意:访问不了外网改用本地部署

4.离线环境下基于 CentOS 构建 Nginx Docker 镜像

1.本地 CentOS 基础镜像制作(核心:替代在线镜像)

# 打包系统根目录(排除动态目录与设备文件,避免镜像异常)
sudo tar -czf centos-local-rootfs.tar.gz \--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp --exclude=/var/tmp \/
# 导入打包文件为Docker基础镜像
sudo docker import centos-local-rootfs.tar.gz centos-local:base
[root@host1 ~]# sudo tar -czf centos-local-rootfs.tar.gz \--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp --exclude=/var/tmp \/
tar: 从成员名中删除开头的“/”
tar: /run/docker.sock: 忽略套接字(socket)
tar: /run/docker/metrics.sock: 忽略套接字(socket)
tar: /run/docker/libnetwork/1d7343f57de7.sock: 忽略套接字(socket)
tar: /run/containerd/s/9084af067cbc0fd363a366468af18f682023e35e8d8440d8ee65311f80a1febb: 忽略套接字(socket)
tar: /run/containerd/containerd.sock: 忽略套接字(socket)
tar: /run/containerd/containerd.sock.ttrpc: 忽略套接字(socket)
tar: /run/vmware/guestServicePipe: 忽略套接字(socket)
tar: /run/chrony/chronyd.sock: 忽略套接字(socket)
tar: /run/mcelog-client: 忽略套接字(socket)
tar: /run/irqbalance/irqbalance995.sock: 忽略套接字(socket)
tar: /run/.heim_org.h5l.kcm-socket: 忽略套接字(socket)
tar: /run/avahi-daemon/socket: 忽略套接字(socket)
tar: /run/setroubleshoot/setroubleshoot_server: 忽略套接字(socket)
tar: /run/lsm/ipc/simc: 忽略套接字(socket)
tar: /run/lsm/ipc/sim: 忽略套接字(socket)
tar: /run/cups/cups.sock: 忽略套接字(socket)
tar: /run/lvm/lvmpolld.socket: 忽略套接字(socket)
tar: /run/user/0/pipewire-0-manager: 忽略套接字(socket)
tar: /run/user/0/pipewire-0: 忽略套接字(socket)
tar: /run/user/0/bus: 忽略套接字(socket)
tar: /run/user/0/systemd/private: 忽略套接字(socket)
tar: /run/user/0/systemd/notify: 忽略套接字(socket)
tar: /run/user/0/systemd/inaccessible/sock: 忽略套接字(socket)
tar: /run/user/42/wayland-0: 忽略套接字(socket)
tar: /run/user/42/pipewire-0-manager: 忽略套接字(socket)
tar: /run/user/42/pipewire-0: 忽略套接字(socket)
tar: /run/user/42/pulse/native: 忽略套接字(socket)
tar: /run/user/42/bus: 忽略套接字(socket)
tar: /run/user/42/systemd/private: 忽略套接字(socket)
tar: /run/user/42/systemd/notify: 忽略套接字(socket)
tar: /run/user/42/systemd/inaccessible/sock: 忽略套接字(socket)
tar: /run/udev/control: 忽略套接字(socket)
tar: /run/dbus/system_bus_socket: 忽略套接字(socket)
tar: /run/systemd/coredump: 忽略套接字(socket)
tar: /run/systemd/private: 忽略套接字(socket)
tar: /run/systemd/journal/io.systemd.journal: 忽略套接字(socket)
tar: /run/systemd/journal/stdout: 忽略套接字(socket)
tar: /run/systemd/journal/socket: 忽略套接字(socket)
tar: /run/systemd/journal/dev-log: 忽略套接字(socket)
tar: /run/systemd/io.system.ManagedOOM: 忽略套接字(socket)
tar: /run/systemd/userdb/io.systemd.DynamicUser: 忽略套接字(socket)
tar: /run/systemd/notify: 忽略套接字(socket)
tar: /run/systemd/inaccessible/sock: 忽略套接字(socket)
tar: /root/centos-local-rootfs.tar.gz: 在我们读入文件时文件发生了变化
tar: 从硬连接目标中删除开头的“/”
[root@host1 ~]# sudo docker import centos-local-rootfs.tar.gz centos-local:base
sha256:e34186ee4bfa2e4b483206b0c4f9c26b329a7d900c5bf090f151010076210e1b

        验证镜像

[root@host1 ~]# docker images | grep centos-local
centos-local                                                                       base      e34186ee4bfa   12 seconds ago   6.43GB

2.Nginx 离线 RPM 包下载(依赖本地 YUM 源)

[root@host1 ~]# yum install -y yum-utils
上次元数据过期检查:7:51:09 前,执行于 2025年09月10日 星期三 15时04分04秒。
软件包 yum-utils-4.3.0-22.el9.noarch 已安装。
依赖关系解决。
无需任何处理。
完毕!
[root@host1 ~]# yumdownloader --resolve --destdir=nginx-rpms nginx
上次元数据过期检查:7:51:15 前,执行于 2025年09月10日 星期三 15时04分04秒。
(1/4): nginx-filesystem-1.20.1-24.el9.noarch.rpm                      26 kB/s | 9.3 kB     00:00    
(2/4): nginx-1.20.1-24.el9.x86_64.rpm                                 74 kB/s |  36 kB     00:00    
(3/4): nginx-core-1.20.1-24.el9.x86_64.rpm                           856 kB/s | 570 kB     00:00    
(4/4): centos-logos-httpd-90.8-3.el9.noarch.rpm                      1.3 MB/s | 1.5 MB     00:01 

        验证

[root@host1 ~]# ls -l nginx-rpms/
总用量 2168
-rw-r--r--. 1 root root 1579851  9月 10 22:55 centos-logos-httpd-90.8-3.el9.noarch.rpm
-rw-r--r--. 1 root root   37053  9月 10 22:55 nginx-1.20.1-24.el9.x86_64.rpm
-rw-r--r--. 1 root root  583889  9月 10 22:55 nginx-core-1.20.1-24.el9.x86_64.rpm
-rw-r--r--. 1 root root    9479  9月 10 22:55 nginx-filesystem-1.20.1-24.el9.noarch.rpm

3.修正Dockerfile

FROM centos-local:base
LABEL maintainer="tester@abc.com"
# 复制离线RPM包到容器内
COPY ./nginx-rpms /tmp/nginx-rpms
# 离线安装Nginx(禁用外网源+忽略GPG校验)
RUN yum localinstall -y /tmp/nginx-rpms/*.rpm \--nogpgcheck \--disablerepo=* \  # 新增反斜杠,确保命令连续性&& yum clean all \&& rm -rf /tmp/nginx-rpms  # 清理RPM包,减小镜像体积
# 自定义Nginx首页内容
RUN echo "Hello! This is nginx server (offline build)" > /usr/share/nginx/html/index.html
# 暴露Nginx默认端口
EXPOSE 80
# 前台启动Nginx(避免容器退出)
CMD ["nginx", "-g", "daemon off;"]

4.镜像构建与问题排查

[root@host1 dockerfile-test]# docker build -t centos-with-nginx:1.0 .
[+] Building 0.0s (6/8)                                                               docker:default=> [internal] load build definition from Dockerfile                                            0.0s=> => transferring dockerfile: 475B                                                            0.0s=> [internal] load metadata for docker.io/library/centos-local:base                            0.0s=> [internal] load .dockerignore                                                               0.0s=> => transferring context: 2B                                                                 0.0s=> [internal] load build context                                                               0.0s=> => transferring context: 2B                                                                 0.0s=> [1/4] FROM docker.io/library/centos-local:base                                              0.0s=> ERROR [2/4] COPY ./nginx-rpms /tmp/nginx-rpms                                               0.0s
------> [2/4] COPY ./nginx-rpms /tmp/nginx-rpms:
------
Dockerfile:5
--------------------3 |     LABEL maintainer="tester@abc.com"4 |     5 | >>> COPY ./nginx-rpms /tmp/nginx-rpms6 |     7 |     RUN yum localinstall -y /tmp/nginx-rpms/*.rpm \
--------------------
ERROR: failed to build: failed to solve: failed to compute cache key: failed to calculate checksum of ref af1a50fb-c1e8-4693-96ea-aea71e06623b::ox2260dtgoy01masgivj3hc3a: "/nginx-rpms": not found
[root@host1 dockerfile-test]# sudo find / -name "nginx-rpms" -type d
/root/nginx-rpms
[root@host1 dockerfile-test]# mv /root/nginx-rpms /root/dockerfile-test/
[root@host1 dockerfile-test]# cd /root/dockerfile-test
[root@host1 dockerfile-test]# ls -l
总用量 4
-rw-r--r--. 1 root root 376  9月 10 23:08 Dockerfile
drwxr-xr-x. 2 root root 184  9月 10 22:55 nginx-rpms
[root@host1 dockerfile-test]# docker build -t centos-with-nginx:1.0 .
[+] Building 1.8s (9/9) FINISHED                                                      docker:default=> [internal] load build definition from Dockerfile                                            0.0s=> => transferring dockerfile: 475B                                                            0.0s=> [internal] load metadata for docker.io/library/centos-local:base                            0.0s=> [internal] load .dockerignore                                                               0.0s=> => transferring context: 2B                                                                 0.0s=> [internal] load build context                                                               0.0s=> => transferring context: 2.21MB                                                             0.0s=> CACHED [1/4] FROM docker.io/library/centos-local:base                                       0.0s=> [2/4] COPY ./nginx-rpms /tmp/nginx-rpms                                                     0.0s=> [3/4] RUN yum localinstall -y /tmp/nginx-rpms/*.rpm     --nogpgcheck     --disablerepo=*    1.4s=> [4/4] RUN echo "Hello! This is nginx server (offline build)" > /usr/share/nginx/html/index  0.2s=> exporting to image                                                                          0.2s => => exporting layers                                                                         0.2s => => writing image sha256:7c5315069664141b331877afb32716dc6f0a9918731e8717a449ff564560fc20    0.0s => => naming to docker.io/library/centos-with-nginx:1.0  

5.镜像功能验证

[root@host1 dockerfile-test]# docker images | grep centos-with-nginx                                 
centos-with-nginx                                                                  1.0       7c5315069664   6 minutes ago    6.54GB
[root@host1 dockerfile-test]# docker run -d -p 8080:80 --name test-nginx centos-with-nginx:1.0
7ecac05c7dac295bd2d80a68dd540ae8cf7b19174609dfb614c11722b525e7a4
[root@host1 dockerfile-test]# docker ps | grep test-nginx
7ecac05c7dac   centos-with-nginx:1.0   "nginx -g 'daemon of…"   11 seconds ago   Up 11 seconds   0.0.
0.0:8080->80/tcp, [::]:8080->80/tcp       test-nginx
[root@host1 dockerfile-test]# curl http://localhost:8080
Hello! This is nginx server (offline build)

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Dify实战]插件编写- 如何让插件直接输出文件对象(支持 TXT、Excel 等)

在大多数 Dify 插件开发中,我们习惯于让插件返回结构化文本、字典或 JSON 数据。但随着应用场景拓展,例如翻译文件、生成报表、处理数据分析结果等,我们需要让插件支持“直接返回文件对象”给用户,而不是让用户复制粘贴文本再手动保存。 本文将基于实战经验,详细介绍如何…

Thread类的基本用法(上)

一、线程创建方法&#xff08;5种&#xff09;1.继承Thread类class MyThread extends Thread {Overridepublic void run() {System.out.println("MyThread is running");try {Thread.sleep(1000);} catch (InterruptedException e) {throw new RuntimeException(e);}…

ARM内存映射与启动地址重映射机制解析

目录 内存映射 1. 核心概念&#xff1a;内存映射 (Memory Map) 2. 启动过程与地址重映射 (Remapping) 关键&#xff1a;启动引脚 (Boot Pins) 这个过程可以类比&#xff1a; 3. 为什么设计成这样&#xff1f; 4. 一图流总结 图解说明&#xff1a; 核心要点&#xff1a;…

网络原理——传输层协议TCP基本认识

文章目录传输层协议TCP基本认识TCP协议的格式TCP的可靠性初步理解——确认应答机制暂时理解TCP的通信过程TCP的确认号和确认序号确认号和确认序号的意义捎带应答TCP中其他字段的理解16位窗口大小标志位标志位的本质标志位的意义以SYN ACK标志位简单理解TCP连接三次握手以FIN标…

Java HTTP响应的流式处理技术

第1章 引言 1.1 传统HTTP响应处理的局限性 在现代Web应用开发中,HTTP通信是系统间数据交换的核心方式。随着数据量的不断增长和实时性要求的提高,传统的HTTP响应处理方式逐渐暴露出诸多问题。 传统处理方式通常需要将整个HTTP响应体一次性加载到内存中,然后再进行处理。这…

D01-【计算机二级】Python(1)基本操作第41题

1、考生文件夹下存在一个文件 PY101.py&#xff0c;请写代码替换横线&#xff0c;不修改其他代码&#xff0c;实现以下功能: 键盘输入正整数 n&#xff0c;按要求把 n 输出到屏幕&#xff0c;格式要求&#xff1a;宽度为 20 个字符&#xff0c;减号字符 - 填充&#xff0c;右对…

工程师 - Onion Architecture in Software Development

Introduction 介绍 In the ever-evolving world of software development, finding the right architectural pattern is akin to selecting the foundation for a building. One such architectural paradigm that has gained recognition for its ability to promote mainta…

TightVNC功能介绍

TightVNC是一款跨平台的远程桌面工具&#xff0c;支持Windows、Linux等系统&#xff0c;通过高效压缩技术实现低带宽环境下的流畅控制。以下是详细的使用说明&#xff1a; 一、安装与配置 1. Windows系统 下载与安装 访问TightVNC官网下载安装包&#xff0c;运行后选择“Comp…

硬件 (七) ARM 软中断, IMX6ULL 点灯

一、ARM 软中断&#xff08;SVC&#xff09;&#xff1a;从用户态到内核态的桥梁软中断&#xff08;SVC&#xff0c;Supervisor Call&#xff09;是 ARM 处理器从 “非特权模式&#xff08;如 User&#xff09;” 进入 “特权模式&#xff08;如 Supervisor&#xff09;” 的核…

数据结构与算法-树和二叉树-二叉树的存储结构(Binary Tree)

树和二叉树的内容比较多&#xff0c;分成两次来发 4 树和二叉树&#xff08;Tree and Binary Tree&#xff09; 4.1 树和二叉树的定义 4.1.1 树的定义 树&#xff08;Tree&#xff09;是 n&#xff08;n>0&#xff09;个结点的有限集&#xff0c;它或为空树&#xff08;…

CentOS7 Hive2.3.8 安装图文教程

一、 安装MySQL 0.0&#xff09;查询mariadb,有就去0.1&#xff09;&#xff0c;没有就不管直接去1&#xff09; rpm -qa | grep mariadb0.1&#xff09;卸载mariadb rpm -e --nodeps 查询出来的内容二、安装MySQL 1.下载资源包 官网下载 MySQL官网下载地址:https://dev.m…

开发避坑指南(43):idea2025.1.3版本启动springboot服务输入jvm参数解决办法

问题 最近装了新版IDEA尝尝新特性&#xff0c;IntelliJ IDEA 2025.1.3&#xff0c;可是在运行springboot服务的时候&#xff0c;找了好久才找到输入jvm启动参数的地方。如上图&#xff0c;不像旧版的IDEA&#xff0c;在Run/Debug Configurations->Configuration->Environ…

《sklearn机器学习——数据预处理》标准化或均值去除和方差缩放

数据集的标准化是scikit-learn中实现许多机器学习估计器的普遍要求&#xff1b;如果个别特征看起来或多或少不像标准正态分布数据&#xff1a;均值和单位方差为零的高斯分布&#xff0c;则它们的性能可能不好。 在实践中&#xff0c;我们通常会忽略分布的形状&#xff0c;而只是…

leedcode 算法刷题第三十一天

1049. 最后一块石头的重量 II 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果…

图神经网络介绍

源自论文&#xff1a;Survey on Graph Neural Networks 图神经网络&#xff08;GNNs&#xff09;中的符号与定义详解 本文使用了图论和深度学习领域的标准符号体系&#xff0c;以确保对图结构数据的描述清晰一致。以下是核心符号和定义的详细说明&#xff1a; 一、基础图结构符…

测试报告:“问卷考试系统”项目

目录 一、报告概述 &#xff08;一&#xff09;项目背景 &#xff08;二&#xff09;项目核心模块与测试目的 1、项目核心模块 2、测试目的 &#xff08;三&#xff09;测试环境 1、硬件环境 2、软件环境 &#xff08;1&#xff09;操作系统 &#xff08;2&#xff0…

Linux笔记---网络计算器

1. 网络程序分层 我们说过&#xff0c;OSI7层模型十分完美&#xff0c;但是因特网实际上采用的是TCP/IP五层模型&#xff1a; 实际上&#xff0c;对比可以发现&#xff0c;TCP/IP模型实际上就是将OSI的前三层模型合并为了应用层。 这就提示我们&#xff0c;我们设计的应用程…

《智能网联汽车交通仿真软件可信度评估》团标启动会圆满举办

让数据真正闭环的L4级自动驾驶仿真工具链&#xff0d;杭州千岑智能科技有限公司&#xff1a;RSim 近日&#xff0c;由中国仿真学会主办、清华大学牵头的《智能网联汽车交通仿真软件可信度评估》团体标准启动会在北京成功举行。杭州千岑科技有限公司作为智能网联汽车测试验证领域…

关于 MCU 芯片外围电路的快速入门介绍

MCU&#xff08;微控制单元&#xff0c;Microcontroller Unit&#xff09;是嵌入式系统的“大脑”&#xff0c;但需通过外围电路实现供电、信号输入/ 输出、通信、存储等功能&#xff0c;才能构成完整的工作系统。外围电路的设计直接决定 MCU 的稳定性、功能扩展性和适用场景&a…

Uniapp onLoad 和 onShow 区别

一、核心区别生命周期触发时机执行次数参数获取onLoad页面首次创建时触发仅1次支持获取URL参数optionsonShow页面每次显示时触发&#xff08;包括返回&#xff09;多次无法获取URL参数二、实战数据请求场景优先使用onLoad请求数据的场景&#xff1a;初始化数据当需要根据URL参数…