基于 Dockerfile 構建鏡像

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參數…