Dockerfile的學習與實踐

Dockerfile通過一系列的命令和參數,構建自定義鏡像。一般步驟如下:

在這里插入圖片描述

一. 常用命令說明

基礎命令具體命令描述例子
FROMFROM[基礎鏡像:版本號]基于指定的基礎鏡像構建自定義鏡像FROM eclipse-temurin:17-jdk-alpine
RUNRUN構建容器需要運行的命令,在執行 docker build的時候運行 ,支持shell 和 exec兩種格式
CMD**shell格式:**CMD <shell 命令>
**EXEC格式:**CMD ["<可執行文件或命令>","<param1>","<param2>",...]
參數格式: CMD ["<param1>","<param2>",...] # 該寫法是為 ENTRYPOINT 指令指定的程序提供默認參數
構建容器需要運行的命令, 在docker run 時運行只有最后一個才會生效,支持shell 、exec、參數列表三種格式
ENTRYPOINTENTRYPOINT ["<executeable>","<param1>","<param2>",...]構建容器需要運行的命令, 在docker run 時運行只有最后一個才會生效,不會被docker run覆蓋,一般和CMD的參數格式配合使用,組合結果會變成<ENTRYPOINT>“<CMD>”
EXPOSEEXPOSE <端口1> [<端口2>...]暴露端口,相當于docker run -p XXX:[端口1],主要是聲明一下容器需要哪些端口,易于后續維護
WORKDIRWORKDIR <工作目錄路徑>指定工作目錄,鏡像的工作目錄就是該指定的目錄
ENVENV <key1>=<value1> <key2>=<value2>...相當于定義了個變量,后續的指令可以直接通過這個變量名
ADDADD [--chown=<user>:<group>] <源路徑1>... <目標路徑>源目錄中復制文件或者目錄到容器里目標路徑,強制將tar的壓縮文件解壓,不能處理非壓縮文件
COPYCOPY [--chown=<user>:<group>] <源路徑1>... <目標路徑>源目錄中復制文件或者目錄到容器里目標路徑
VOLUMEVOLUME ["<路徑1>", "<路徑2>"...]將容器指定路徑的目錄與主機掛載,缺點是無法在直接指定對應的路徑要掛載的主機目錄,而是會自動生成。看起來不如docker run -v

二. 實踐

上述過于枯燥,都是一些基本概念,讓我們通過實踐進一步加深理解。

1. 基于Dockerfile制作微服務鏡像

1.1 準備一個微服務的jar包

這里就不提供了

1.2 編寫Dockerfile

Dockerfile和該jar包應該在同一目錄下

Dockerfile

#openJDK 基礎鏡像
FROM eclipse-temurin:17-jdk-alpine
# 作者
MAINTAINER yamu
# 設置工作目錄
WORKDIR ./app
# 復制構建好的 JAR 文件到容器
COPY gulimall-gateway-0.0.1-SNAPSHOT.jar app.jar
# 暴露服務端口
EXPOSE 8600
# 啟動命令
ENTRYPOINT ["java", "-jar", "app.jar"]

1.3 構建鏡像

docker build -t myGateway:1.0 .

在這里插入圖片描述

1.4 運行鏡像

docker run -p 8600:8600 --net mydata_default mygateway:1.0

運行成功

在這里插入圖片描述

2. 基于Dokcerfile構建vim + ifconfig + jdk8 的Centos7

2.1 獲取Centos7基本鏡像

docker pull centos:7

運行容器

docker run -itd 命令將創建一個在后臺運行的容器,同時保持標準輸入開放,并分配一個偽終端。這種模式通常用于需要長時間運行的服務容器,同時也需要保留與容器交互的能力

docker run -itd --name centos7 -p 8600:80 --privileged=true centos:7 /usr/sbin/init

進入容器

docker exec -it centos7 /bin/bash

可以看到,當前centos7這個鏡像是不具備有這些命令的

在這里插入圖片描述

2.2 編寫Dockerfile

如果沒下載JDK鏡像的先去小柒博客 | 開源軟件鏡像站下載,這里下載的版本是jdk-8u221-linux-x64.tar.gz

Dockerfile

ENV MYPATH /usr/local
WORKDIR $MYPATH
# 安裝vim
RUN yum -y install vim
# 安裝ifconfig
RUN yum -y install net-tools
# 安裝jdk17和lib庫
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 由于下載的是.gz的jdk壓縮包,通過ADD可以直接解壓到鏡像工作目錄
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
# 配置java環境變量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD /bin/bash

2.3 構建鏡像

docker build -t mycentos7:1.0 .

如果出現了如下報錯,應該是centos的yum的源的問題,需要在Dockerfile中加入對阿里云yum鏡像源的配置

在這里插入圖片描述

修改后的Dokcerfile

FROM centos:7
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置阿里云yum鏡像源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all
RUN yum makecache
# 安裝vim
RUN yum -y install vim
# 安裝ifconfig
RUN yum -y install net-tools
# 安裝jdk17和lib庫
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 由于下載的是.gz的jdk壓縮包,通過ADD可以直接解壓到鏡像工作目錄
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
# 配置java環境變量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD /bin/bash

在這里插入圖片描述

2.4 運行鏡像和測試

docker run -itd --name mycentos7 -p 8600:80 --privileged=true  mycentos7:1.0
docker exec -it mycentos7 /bin/bash

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

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

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

相關文章

【三大前端語言之一】靜態網頁語言:HTML詳解

你知道你在瀏覽器中所看到的每一個按鈕&#xff0c;每一個框&#xff0c;都是怎么創造出來的嗎&#xff1f;它們并非魔法&#xff0c;而是由一種被稱為HTML的語言精心構建的骨架。作為前端世界的三大基石之一&#xff08;HTML、CSS、JavaScript&#xff09;&#xff0c;HTML是萬…

04、誰發明了深度學習的方法,是怎么發明的?

深度學習的發展是多位研究者長期探索的結果,其核心方法的形成并非由單一人物 “發明”,而是歷經數十年理論積累與技術突破的產物。以下從關鍵人物、核心技術突破及歷史背景三個維度,梳理深度學習方法的起源與發展脈絡: 一、深度學習的奠基者與關鍵貢獻者 1. Geoffrey Hin…

Jmeter ServerAgent在arm環境啟動報錯no libsigar-aarch64-linux.so in java.library.path

使用Jmeter壓測的時候&#xff0c;用ServerAgent監測arm服務器的性能指標&#xff0c;在啟動ServerAgent時&#xff0c;報錯了&#xff1a;no libsigar-aarch64-linux.so in java.library.path 解決方案&#xff1a; 下載libsigar-aarch64-linux.so文件&#xff0c;放置在Serv…

AJAX攔截器失效排查指南:當你的beforeSend有效但error/complete沉默時

問題現象 開發者常遇到這樣的場景&#xff1a; $.ajaxSetup({beforeSend: () > console.log("? 觸發"), // 正常執行error: () > console.log("? 未觸發"), // 靜默失效complete: () > console.log("? 未觸發") // 同樣沉默 })…

【模型微調】負樣本選擇

1.核心設計理念 非對稱檢索任務&#xff08;例如&#xff0c;用一個簡短的問題去文檔庫里查找答案&#xff09;的一個核心挑戰是查詢&#xff08;query&#xff09;和文檔&#xff08;passage&#xff09;在文本特征上的巨大差異。以往的研究發現&#xff0c;為查詢和文檔提供…

下載安裝redis

有任何問題&#xff0c;都可以私信博主&#xff0c;共同探討學習。 正文開始 一、下載安裝redis一、啟動redis總結 一、下載安裝redis redis官方下載地址是github&#xff0c;有條件的同學可以自行搜索下載。針對部分網速不太好的同學&#xff0c;可以通過網盤獲取&#xff0c…

flutter 項目配置Gradle下載代理

如圖&#xff0c; 在Android Studio中配置代理是不生效的。 需要在flutter sdk的Gradle中去配置代理

世冠科技亮相TMC,以國產MBD工具鏈賦能汽車電控系統開發新未來

2025年6月12日至13日&#xff0c;第十七屆國際汽車動力系統技術年會&#xff08;TMC2025&#xff09;在南通國際會展中心盛大召開。作為全球汽車動力系統領域規模最大、規格最高、內容最前沿的標桿性國際盛會&#xff0c;匯聚了來自全球整車企業、核心零部件供應商、頂尖科研機…

將本地項目與遠程 Git 倉庫關聯的完整步驟

將本地項目與遠程 Git 倉庫關聯的完整步驟 現在的情景是&#xff1a;本地文件項目已經寫好了&#xff0c;亦或者遠程倉庫已經建好了&#xff0c;需要與本地項目關聯起來 以下是詳細的操作流程&#xff0c;我會用清晰的步驟說明如何將你的本地項目與遠程 Git 倉庫關聯&#xf…

3DS 轉換為 STP 全攻略:迪威模型網在線轉換詳解

在三維模型創作與應用的多元場景中&#xff0c;不同格式的文件承擔著獨特的角色。3DS&#xff08;3D Studio&#xff09;格式是 Autodesk 3ds Max 早期廣泛使用的文件格式&#xff0c;常用于游戲開發、影視特效制作等領域&#xff0c;能夠存儲模型的幾何形狀、材質、動畫等信息…

Linux下iptables和firewalld詳解

Linux下iptables和firewalld詳解 Linux下iptables和firewalld簡述Iptables四表五鏈策略與規則鏈命令參數Firewalld終端管理工具圖形管理工具服務的訪問控制列表Linux下iptables和firewalld 簡述 ? 保障數據的安全性是繼保障數據的可用性之后最為重要的一項工作。防火墻作為公…

Kafka Connect高級開發:自定義擴展與復雜場景應對

引言 在掌握Kafka Connect基礎操作與內置連接器應用后&#xff0c;面對企業復雜的業務需求&#xff0c;如對接非標準數據源、實現特定數據處理邏輯&#xff0c;就需要深入到高級開發領域。本篇博客將圍繞自定義Connector開發、數據轉換編程、錯誤處理與容錯機制展開&#xff0…

吳恩達機器學習筆記:正則化2

1.正則化線性回歸 對于線性回歸的求解&#xff0c;我們之前推導了兩種學習算法&#xff1a;一種基于梯度下降&#xff0c;一種基于正規方程。 正則化線性回歸的代價函數為&#xff1a; J ( θ ) 1 2 m [ ∑ i 1 m ( h θ ( x ( i ) ) ? y ( i ) ) 2 λ ∑ j 1 n θ j 2 …

Unity中的Resources加載

Unity的Resources加載是Unity引擎中一種在運行時動態加載資源&#xff08;assets&#xff09;的方式&#xff0c;允許開發者將資源放置在特定的Resources文件夾中&#xff0c;并通過代碼按名稱加載這些資源&#xff0c;而無需在場景中預先引用。這種方式在需要動態加載資源時非…

對Vue2響應式原理的理解-總結

根據這張圖進行總結 在組件實例初始化階段&#xff0c;通過 observe() 方法對 data 對象進行遞歸遍歷。在這個過程中&#xff0c;Vue 使用 Object.defineProperty() 為data 中的每個屬性定義 getter 和 setter 來攔截對象屬性的“讀取“操作和“寫入”操作。 Vue 的依賴追蹤是…

基于深度學習的智能音頻增強系統:技術與實踐

前言 在音頻處理領域&#xff0c;音頻增強技術一直是研究的熱點。音頻增強的目標是改善音頻信號的質量&#xff0c;去除噪聲、回聲等干擾&#xff0c;提高音頻的可聽性和可用性。傳統的音頻增強方法主要依賴于信號處理技術&#xff0c;如濾波器設計、頻譜減法等&#xff0c;但這…

從代碼學習深度強化學習 - DQN PyTorch版

文章目錄 前言DQN 算法核心思想Q-Learning 與函數近似經驗回放 (Experience Replay)目標網絡 (Target Network)PyTorch 代碼實現詳解1. 環境與輔助函數2. 經驗回放池 (ReplayBuffer)3. Q網絡 (Qnet)4. DQN 主類5. 訓練循環6. 設置超參數與開始訓練訓練結果與分析總結前言 歡迎…

AI與大數據如何驅動工業品電商平臺的智能決策?

在轟鳴的工廠里&#xff0c;一臺關鍵設備因某個密封圈失效而驟然停機。生產線停滯、訂單延誤、經濟損失每分鐘都在擴大。此刻&#xff0c;采購經理在工業品電商平臺上瘋狂搜索&#xff0c;卻迷失在海量零件參數與供應商信息中。工業品的沉默&#xff0c;往往意味著生產線的沉默…

連接器全解析:數據庫連接器和文件連接器的區別和聯系

目錄 一、數據庫連接器和文件連接器的基本概念 1. 數據庫連接器 2. 文件連接器 二、數據庫連接器和文件連接器的區別 1. 數據存儲方式 2. 數據處理能力 3. 數據安全性 4. 數據更新頻率 三、數據庫連接器和文件連接器的聯系 1. 數據交互 2. 數據處理流程 3. 應用場景…

Uniapp 中根據不同離開頁面方式處理 `onHide` 的方法

Uniapp 中根據不同離開頁面方式處理 onHide 的方法 在 Uniapp 開發中&#xff0c;onHide 生命周期會在頁面隱藏時觸發&#xff0c;但默認無法直接區分用戶是通過何種方式離開頁面的。不過我們可以通過組合其他鉤子函數和路由事件來實現對不同離開方式的識別和處理。 一、常見…