Dockerfile文件詳細介紹

前言


Dockerfile是一個文本文件,包含了用于構建Docker鏡像的所有命令和說明。它定義了容器的運行環境、依賴以及啟動方式,是創建Docker鏡像的核心部分。

由于制作鏡像的過程中,需要逐層處理和打包,比較復雜,所以Docker就提供了自動打包鏡像的功能。我們只需要將打包的過程,每一層要做的事情用固定的語法寫下來,交給Docker去執行即可。而這種記錄鏡像結構的文件就稱為Dockerfile,其對應的語法可以參考官方文檔:

Dockerfile reference | Docker DocsFind all the available commands you can use in a Dockerfile and learn how to use them, including COPY, ARG, ENTRYPOINT, and more.icon-default.png?t=N7T8https://docs.docker.com/engine/reference/builder/

組成部分


一個dockerfile文件包含以下部分:

  • 基礎鏡像信息: 使用FROM關鍵字指定基礎鏡像信息,FROM是dockerfile文件的第一條指令。
  • 維護者信息: 使用MAINTAINER關鍵字指定,通常可以使用dockerfile文件創建者的名字或者郵件作為維護者的信息。
  • 鏡像操作指令: 沒執行一條鏡像操作指令,都會在鏡像中添加新的一層。
  • 容器啟動執行命令: 用戶指定在啟動容器時需要執行的命令,通過:CMD ENTRYPOINT指定

其中的語法比較多,比較常用的有:

指令

說明

示例

FROM

指定基礎鏡像

FROM centos:6

ENV

設置環境變量,可在后面指令使用

ENV key value

COPY

拷貝本地文件到鏡像的指定目錄

COPY ./xx.jar /tmp/app.jar

RUN

執行Linux的shell命令,一般是安裝過程的命令

RUN yum install gcc

EXPOSE

指定容器運行時監聽的端口,是給鏡像使用者看的

EXPOSE 8080

ENTRYPOINT

鏡像中應用的啟動命令,容器運行時調用

ENTRYPOINT java -jar xx.jar

例如,要基于Ubuntu鏡像來構建一個Java應用,其Dockerfile內容如下:

# 指定基礎鏡像
FROM ubuntu:16.04
# 配置環境變量,JDK的安裝目錄、容器內時區
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷貝jdk和java項目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 設定時區
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安裝JDK
RUN cd $JAVA_DIR \&& tar -xf ./jdk8.tar.gz \&& mv ./jdk1.8.0_144 ./java8
# 配置環境變量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 指定項目監聽的端口
EXPOSE 8080
# 入口,java項目的啟動命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

思考一下:以后我們會有很多很多java項目需要打包為鏡像,他們都需要Linux系統環境、JDK環境這兩層,只有上面的3層不同(因為jar包不同)。如果每次制作java鏡像都重復制作前兩層鏡像,是不是很麻煩。所以,就有人提供了基礎的系統加JDK環境,我們在此基礎上制作java鏡像,就可以省去JDK的配置了:

# 基礎鏡像
FROM openjdk:11.0-jre-buster
# 設定時區
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷貝jar包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]

構建鏡像

當Dockerfile文件寫好以后,就可以利用命令來構建鏡像了。

我們準備好了一個demo項目及對應的Dockerfile:

我們將文件拷貝到虛擬機的/root/demo目錄:?

# 進入鏡像目錄
cd /root/demo
# 開始構建
docker build -t docker-demo:1.0 .

然后,執行命令,構建鏡像:

# 進入鏡像目錄
cd /root/demo
# 開始構建
docker build -t docker-demo:1.0 .

?

命令說明:

  • docker build : 就是構建一個docker鏡像

  • -t docker-demo:1.0-t參數是指定鏡像的名稱(repositorytag

  • . : 最后的點是指構建時Dockerfile所在路徑,由于我們進入了demo目錄,所以指定的是.代表當前目錄,也可以直接指定Dockerfile目錄:

    # 直接指定Dockerfile目錄
    docker build -t docker-demo:1.0 /root/demo

    結果:

查看鏡像列表:

成功!?

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

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

相關文章

實戰復盤:內網環境滲透ms-SQL數據庫

滲透環境:如下圖所示,web服務器、ms-SQL服務器、PC客戶端在同一個網絡中,彼此之間,沒有路由器或防火墻的隔離,這是一種危險的網絡結構,入侵ms-SQL服務器,非常容易。(實戰中&#xff…

整理了10個靠譜且熱門的賺錢軟件,適合普通人長期做的賺錢副業

作為一名普通的上班族,我們每天都在辛勤工作,但工資的增長速度卻如同蝸牛般緩慢。不過,別擔心,信息時代總是帶給我們無盡的驚喜!今天,我將為大家推薦一些賺錢的寶藏軟件,讓你在閑暇之余輕松實現…

Java-Zookeeper

zookeeper是什么 一個分布式、開源的分布式應用程序協調服務,具有配置維護、域名服務、分布式同步、組服務等 zookeeper有哪些功能 功能簡介集群管理監控節點狀態、運行請求等主節點選舉主節點掛掉之后會執行新主選舉分布式鎖zookeeper提供兩種鎖:獨占…

IEDA常用快捷鍵(后續更新ing)

1. 快速生成語句 1.快速生成main()方法 psvm或者main回車 2.快速生成輸出語句 sout,回車 3.快速生成for循環 fori或者itar,回車 2.快捷鍵 含義操作查找文本CtrlF替換文本CtrlR單行注釋Ctrl/多行注釋CtrlShift/格式化CtrlAltL復制當前內容至下一行CtrlD補全代碼Alt/快速生成…

RAGs:自動化評估 RAG 示例代碼

文章目錄 原理忠實度(Faithfulness)答案相關性(Answer Relevance)上下文相關性(Context Relevance)上下文召回率(Context Recall)答案正確性(Answer Correctness&#xf…

C# 機構仿真實例

1、實現連桿帶動滑塊運動 一個連桿旋轉帶動另一個連桿,另一個連桿拖動滑塊,點擊“開始”按鈕開始運動,再點擊按鈕,則停止運動。 2、實現程序 #region 機構仿真Image image null;Timer timer new Timer();int width 0;int heig…

一千題,No.0027(Phone Desktop)

描述 Little Rosie has a phone with a desktop (or launcher, as it is also called). The desktop can consist of several screens. Each screen is represented as a grid of size 53, i.e., five rows and three columns. There are x applications with an icon size o…

【網絡安全】社會工程學攻擊與防范

一、社會工程學概述 1、社會工程學的定義 通過利用人們的心理弱點、本能反應、好奇心、信任、貪婪等一些心理陷阱進行的諸如欺騙、傷害、信息盜取、利益謀取等對社會及人類帶來危害的行為或方法。 當網絡惡意攻擊者無法通過純粹的計算機技術達到目的時,高超的情商…

9.Redis之list類型

list相當于鏈表、數據表 1.list類型基本介紹 列表中的元素是有序的"有序"的含義,要根據上下文區分~~有的時候,談到有序,指的是"升序","降序”有的時候,談到的有序,指的是, 順序很關鍵~~如果把元素位置顛倒,順序調換.此時得到的新的 List 和之前的 Li…

js簡單綜合案例之簡易ATM取款機、渲染表格案例、封裝時間函數

這里寫目錄標題 簡易ATM取款機要求代碼實現 渲染表格案例要求代碼實現 封裝時間函數要求代碼實現 簡易ATM取款機 要求 1.彈出彈窗,讓用戶輸入數字選擇操作 2.初始值金額為100,計算每次操作后的剩余金額變化 3.一直彈出彈窗直到用戶輸入4,跳…

OpenCV SIFT特征描述子(GPU版本)

文章目錄 一、簡介二、測試過程三、實現效果參考資料一、簡介 這里主要測試一下SIFT圖像描述子的GPU版本。SIFT圖像描述子,全稱Scale-Invariant Feature Transform(尺度不變特征變換),是計算機視覺和圖像處理領域中一種非常重要的局部特征描述子。它主要用于圖像的特征點檢…

新聞稿海外媒體投稿,除了美聯社發稿(AP)和彭博社宣發(Bloomberg),還有哪些優質的國外媒體平臺可以選擇

發布高質量的新聞稿到海外媒體,除了美聯社發稿(AP)和彭博社發稿(Bloomberg),還有許多其他優質的媒體平臺可以選擇。以下是一些受歡迎和高效的海外媒體發布平臺: 路透社 (Reuters) 路透社是全球最…

Webpack Bundle Analyzer:深入分析與優化你的包

Webpack Bundle Analyzer是一個用于可視化的工具,它可以幫助你分析Webpack打包后的輸出文件,查看哪些模塊占用了最多的空間,從而進行優化。 2500G計算機入門到高級架構師開發資料超級大禮包免費送! 首先,你需要安裝W…

IIC通信(STM32)

一、IIC概念 1、兩根通信線:SCL(Serial Clock)、SDA(Serial Data) 同步,半雙工 2、帶數據應答 3、支持總線掛載多設備(一主多從、多主多從)一般使用一主多從。一主多從的…

【深度學習】paddlets,時序數據預測

文章目錄 一、環境二、題目1三、題目2四、題目3五、函數參數 資料: https://paddlets.readthedocs.io/zh-cn/latest/source/api/paddlets.models.base.html#paddlets.models.base.BaseModel.recursive_predict https://aistudio.baidu.com/projectdetail/5866171?…

陪跑真正值錢的不是教程,是你遇到那個擋住你的問題時,身邊有個靠譜的人

今天分享兩個概念,一個是意識決定一切,一個是大道至簡,做項目就是按部就班的遵循事情發展規律去做。 先說第一個概念,意識決定一切。我們說的凡事預則立不預則廢,就是計劃了去做就會有結果。 給你們一個表,…

Linux簡單通過Minicom命令操作串口設備(linux串口操作命令)

Minicom是一個在Linux系統中廣泛使用的串行通信程序。它類似于Windows下的超級終端,允許用戶通過串口與外部硬件設備進行通信。Minicom不僅功能強大,而且完全免費,帶有源代碼,可以在大多數Unix系統下運行。 安裝Minicom 在大多數Linux發行版中,Minicom可能沒有預裝。可以…

【前端】面試八股文——BFC

面試八股文——BFC 在前端開發的面試中,BFC(Block Formatting Context,塊級格式化上下文)常常是一個高頻出現的考點。它不僅考察應聘者對CSS布局的理解深度,也是面試官判斷候選人解決實際問題能力的重要依據之一。因此…

python接口自動化測試中為什么用yaml文件進行用例管理而不是json文件

在Python接口自動化測試中,使用YAML文件進行用例管理而不是JSON文件,主要基于以下幾個原因: 可讀性:YAML文件使用縮進和冒號來表示層級結構,使得文件內容更加清晰易讀。相比之下,JSON文件則使用大括號和中…

MySQL——索引與事務

目錄 前言 一、索引 1.索引概述 (1)基本概念 (2)索引作用 (3)索引特點 (4)適用場景 2.索引的操作 (1)查看索引 (2)創建索引…