Docker高級管理--Dockerfile鏡像制作

目錄

一:Docker 鏡像管理

1:Docker 鏡像結構

2:Dockerfile介紹

二:Dockerfile 語法基礎

1:基礎指令

2:環境設置指令

3:文件操作指令

4:執行命令指令

5:網絡和暴露端口指令

6.容器掛載指令

三:dockerfile案例

1.構建nginx容器


一:Docker 鏡像管理

Docker 鏡像除了是 Docker 的核心技術之外,也是應用發布的標準格式。一個完整的 Docker 鏡像可以支撐一個 Docker 容器的運行,在 Docker 的整個使用過程中,進入一個已經定型的容器之后,就可以在容器中進行操作,最常見的操作就是在容器中安裝應用服務。 如果要把已經安裝的服務進行遷移,就需要把環境以及搭建的服務生成新的鏡像。本案例將介紹如何創建 Docker 鏡像。

1:Docker 鏡像結構

鏡像不是一個單一的文件,而是有多層構成。可以通過 docker history 命令査看鏡像中各層內容及大小,每層對應著Dockerfile 中的一條指令。Docker鏡像默認存儲在/var/lib/docker/<storage-driver>目錄中。容器其實是在鏡像的最上面加了一層讀寫層, 在運行容器里做的任何文件改動,都會寫到這個讀寫層。如果刪除了容器,也就刪除了其最上面的讀寫層,文件改動也就丟失了。Docker 使用存儲驅動管理鏡像每層內容及可讀寫層的容器層。Docker 鏡像是分層的,下面這些知識點非常重要。

  • Dockerfile 中的每個指令都會創建一個新的鏡像層;
  • 鏡像層將被緩存和復用;
  • 當 Dockerfile 的指令修改了,復制的文件變化了,或者構建鏡像時指定的變量不同了,對應的鏡像層緩存就會失效;
  • 某一層的鏡像緩存失效,它之后的鏡像層緩存都會失效;
  • 鏡像層是不可變的,如果在某一層中添加一個文件,然后在下一層中刪除它,則鏡像中依然會包含該文件,只是這個文件在 Docker 容器中不可見了。

2:Dockerfile介紹

Dockfile 是一種被 Docker 程序解釋的腳本,Dockerfile 由多條的指令組成,每條指令對應Linux 下面的一條命令。Docker 程序將這些 Dockerfile 指令翻譯成真正的 Linux 命令。Dockerfile有自己書寫格式和支持的命令,Docker 程序解決這些命令間的依賴關系,類似于Makefile。Docker 程序將讀取 Dockerfile,根據指令生成定制的鏡像。相比鏡像這種黑盒子,Dockerfile 這種顯而易見的腳本更容易被使用者接受,它明確的表明鏡像是怎么產生的。有了 Dockerfile,當有定制額外的需求時,只需在 Dockerfile 上添加或者修改指令,重新生成鏡像。

二:Dockerfile 語法基礎

Dockerfile 是一個文本文件,其中包含了一系列用于構建 Docker 鏡像的指令。通過編寫Dockerfile,可以自動化地創建自定義的 Docker 鏡像。以下為你詳細介紹 Dockerfile 的常用語法:

1:基礎指令

(1)FROM

指定基礎鏡像,所有的 Dockerfile 都必須以 FROM 指令開頭,它定義了新鏡像基于哪個基礎鏡像構建。

(2)MAINTAINER(已棄用,推薦使用LABEL)

用于指定鏡像的維護者信息。不過在較新的 Docker 版本中,推薦使用 LABEL 指令來替代。

LABEL

為鏡像添加元數據,這些元數據可以是任何信息,如作者、版本、描述等,方便對鏡像進行管理和識別。

2:環境設置指令

(1)ENV

設置環境變量,這些環境變量會在容器運行時持續存在,并且可以被容器內的應用程序使用。

(2)ARG

定義在構建鏡像時可以傳遞的參數,這些參數只在鏡像構建過程中有效

3:文件操作指令

(1)CPOY

將本地文件或目錄復制到鏡像中。

(2)ADD

與 COPY 類似,也是將文件或目錄復制到鏡像中,但 ADD 還支持從遠程 URL 下載文件和自動解壓文件

(3)WORKDIR

設置工作目錄,后續的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 等指令都會在這個工作目錄下執行。

4:執行命令指令

(1)RUN

在構建鏡像的過程中執行命令,常用于安裝軟件包、配置環境等操作。

(2)CMD

為容器提供默認的執行命令。一個 Dockerfile 中只能有一個 CMD 指令,如果有多個,只有最后一個會生效。當使用 docker run 啟動容器時,如果沒有指定其他命令,就會執行 CMD 指定的命令。

(3)ENTRYPOINT

配置容器啟動時執行的命令,與 CMD類似,但 ENTRYPOINT 的命令不會被 docker run 后面的命令覆蓋,而是將 docker run 后面的命令作為參數傳遞給 ENTRYPOINT 命令。

5:網絡和暴露端口指令

(1)EXPOSE

聲明容器在運行時會監聽的端口,但這只是一個聲明,并不會實際進行端口映射。在使用 dockerrun 啟動容器時,需要使用-p或-P 選項進行端口映射。

6.容器掛載指令

創建一個可以從本地主機或其他容器的掛載點,用于持久化數據或共享數據。

三:dockerfile案例

1.構建nginx容器

(1)拉取centos7鏡像

(2)創建dockerfile工作目錄

(3)創建dockerfile

(4)編寫啟動腳本

(5)用dockerfile創建鏡像

(6)啟動容器

(7)訪問nginx網站

http://192.168.10.101:8080

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/88571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/88571.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/88571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數字時代的“靈魂”之爭:虛擬人形象的著作權困局與破局之道

首席數據官高鵬律師數字經濟團隊創作&#xff0c;AI輔助。 一、虛擬人的“數字生命”&#xff1a;一場關于“靈魂”的商業博弈 當一個虛擬偶像的“眼神”被復刻成千萬個相似的數字面孔&#xff0c;當一段虛擬主播的“聲音”被拆解為可交易的數據碎片——我們正在見證一個“數…

小型CI/CD搭建(TODO)

1 方案 因為是在國內&#xff0c;所以gitbub Actions&#xff0c;??Azure DevOps?這些就直接拜拜了。 目前主流的大概是三種&#xff1a; 1 阿里云效/騰訊云CODING 2 GitLab CE GitLab Runner 3 Gitee Jenkins deepeseek比較了一下如下&#xff1a; 阿里云效 vs Git…

Android Studio flutter項目運行、打包時間太長

Android Studio&#xff1a;Android Studio Meerkat Feature Drop | 2024.3.2 Patch 1 flutter Sdk&#xff1a;3.29.3 系統&#xff1a;windows flutter sdk從2.10.5升級到3.29.3&#xff0c;但是Flutter 3.16開始新增了使用 Gradle聲明式 plugins {} 塊&#xff0c;gradle文…

【OpenGL學習】(六)圖形添加紋理

文章目錄 【OpenGL學習】&#xff08;六&#xff09;圖形添加紋理紋理環繞紋理過濾紋理顏色與頂點顏色混合 OpenGL紋理介紹&#xff1a;https://learnopengl-cn.github.io/01%20Getting%20started/06%20Textures/ 【OpenGL學習】&#xff08;六&#xff09;圖形添加紋理 項目…

allure安裝

一、安裝java 需要安裝java環境&#xff0c;不安裝的話在運行前會報錯下列問題&#xff08;前提是安裝了allure未安裝java&#xff09; 1.官網地址&#xff1a;https://www.oracle.com/ 2.點擊”Download Java“ 3.選擇JDK正式版本&#xff08;需要jdk1.8&#xff09; 4.選擇W…

SpringBoot基于JavaWeb的城鄉居民基本醫療信息管理系統

概述 一個基于SpringBoot框架開發的JavaWeb醫療信息管理系統&#xff0c;采用了現代化的技術架構&#xff0c;功能全面&#xff0c;非常適合作為學習項目或二次開發的基礎。 主要內容 該系統主要包含以下核心功能模塊&#xff1a; ??用戶管理模塊?? 實現管理員、醫生、…

SQL變量聲明與賦值 分支 循環

– 變量 分支 循環 – declare 變量名 數據類型 – declare 關鍵字&#xff0c;作用聲明變量 – 變量名&#xff1a;以開頭 – 數據類型&#xff1a;數據庫中支持的數據類型&#xff1a;int varchar(n) text char(n) nvarchar(n) nchar(n) declare name varchar(255)– 定義多…

AWS S3 可觀測性最佳實踐

AWS S3 介紹 AWS S3&#xff08;Amazon Simple Storage Service&#xff09;是一種可擴展的對象存儲服務&#xff0c;提供高可用性、持久性和安全性。它允許用戶存儲和檢索任意數量的數據&#xff0c;并通過簡單的 Web 服務接口訪問這些數據。S3 支持多種存儲類別&#xff0c;…

Ubuntu下布署mediasoup-demo

一、引言 mediasoup是一個強大的SFU架構的WebRTC流媒體服務器&#xff0c;憑借其多功能性、高性能和可擴展性&#xff0c;mediasoup成為構建多方視頻會議和實時流媒體應用程序的完美選擇。它具有聯播、SVC、傳輸BWE和更多尖端功能。本文介紹了mediasoup-demo在Ubuntu下的布署。…

【JVS更新日志】物聯網、智能排產APS、企業計劃、規則引擎6.25更新說明!

項目介紹 JVS是企業級數字化服務構建的基礎腳手架&#xff0c;主要解決企業信息化項目交付難、實施效率低、開發成本高的問題&#xff0c;采用微服務配置化的方式&#xff0c;提供了低代碼數據分析物聯網的核心能力產品&#xff0c;并構建了協同辦公、企業常用的管理工具等&…

解決git pull,push 每次操作輸入賬號密碼問題

服務器每次git pull 的時候都需要輸入賬號密碼&#xff0c;一勞永逸解決它。 解決方案&#xff1a; 找到項目下 .git /config 文件&#xff0c;然后打開&#xff0c;編輯 [rootiZbp11b24d3d7nc8uvjx9mZ .git]# ls branches config description FETCH_HEAD HEAD hooks i…

Netty:深入解析AbstractByteBufAllocator架構設計

AbstractByteBufAllocator 類結構分析 類結構概覽 public abstract class AbstractByteBufAllocator implements ByteBufAllocator {// 靜態常量static final int DEFAULT_INITIAL_CAPACITY 256;static final int DEFAULT_MAX_CAPACITY Integer.MAX_VALUE;// ...其他常量//…

Java 日志管理與分析

為什么需要日志 ■ 發?了什么&#xff08;What&#xff09;。 ■ 何時發?的&#xff08;When&#xff09;。 ■ 發?于何處&#xff08;Where&#xff09;。 ■ 誰參與其中&#xff08;Who&#xff09;。 ■ 參與者來源&#xff08;第?個Where&#xff0c;注意與上?的Wher…

bmc TrueSight 監控mysql配置

bmc TrueSight 監控mysql配置 1.將pat加入mysql組 useradd pat;echo patpassword|passwd --stdin pat usermod -aG mysql pat2.設置環境變量 查看文件是否存在[rootu1acmsdp01 ~]# find / -name mysql.sock /var/lib/mysql/mysql.sock ^C [rootu1acmsdp01 ~]# cd /var/lib/my…

WinAppDriver 自動化測試:C#篇

??親愛的技術愛好者們,熱烈歡迎來到 Kant2048 的博客!我是 Thomas Kant,很開心能在CSDN上與你們相遇~?? 本博客的精華專欄: 【自動化測試】 【測試經驗】 【人工智能】 【Python】

zlmediakit webrtc搭建使用

webrtc 編譯與使用 | ZLMediaKit 官方文檔參考 編譯機器&#xff1a; centos 7.6 gcc 版本 10.1.0 (GCC) cmake version 3.23.0web播放rtsp流視頻&#xff0c;使用webrtc毫秒級延遲_webrtc播放rtsp流-CSDN博客 依賴準備 openssl 安裝 (openssl 版本要求 1.1 以上) 我的…

Linux下使用docker nginx部署vue前端項目工程

1、使用Docker和Nginx部署Vue項目的步驟 1、準備好VUE項目&#xff0c;已打包編譯 2、docker環境已完成安裝 3、本地環境上創建nginx目錄&#xff0c;下包括conf&#xff0c;html&#xff0c;logs目錄。用于容器映射&#xff08;其實是方便修改文件&#xff0c;因為在容器中…

從實驗室到生產線:機器學習模型部署的七大陷阱及PyTorch Serving避坑指南

1 實驗室與生產環境的鴻溝&#xff1a;為什么99%的模型部署會失敗&#xff1f; &#xff08;1&#xff09;部署失敗的真實數據統計 根據2023年MLOps行業報告&#xff1a; 78%的組織表示模型部署時間超過預期65%的模型部署后性能下降超過20%僅12%的組織能在一周內完成模型更新…

Module not found: Error: Can‘t resolve ‘core-js/modules/es.array.concat.js‘

遇到錯誤“Module not found: Error: Can’t resolve ‘core-js/modules/es.array.concat.js’”通常是因為你的項目中使用了core-js庫&#xff0c;但是你的項目配置或者core-js的版本不支持你正在嘗試使用的功能。下面是一些解決這個問題的步驟&#xff1a; 確認core-js版本 …

Windows10中設置多個虛擬IP方法

一.netsh 命令添加&#xff08;最直接、最簡單&#xff09; 1.在 Windows 10 中&#xff0c;使用 netsh 命令為現有物理網卡或虛擬網卡添加額外的 IP 地址&#xff08;IP Alias&#xff09;是最直接的方法。這些 IP 地址與主 IP 在同一網段&#xff0c;共享同一張網卡的 MAC 地…