在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Dockerfile定義Docker鏡像的構(gòu)建過(guò)程

科技綠洲 ? 來(lái)源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-30 10:22 ? 次閱讀

了解Dockerfile

Dockerfile 是一個(gè)文本文件,用于定義 Docker 鏡像的構(gòu)建過(guò)程。它以指令的形式描述了如何構(gòu)建鏡像,從基礎(chǔ)鏡像開(kāi)始逐步添加配置、文件和依賴,最終形成我們所需要的鏡像。為我們提供了一種簡(jiǎn)單且可重復(fù)的方式來(lái)定義鏡像構(gòu)建過(guò)程。

Dockerfile 指令

  • FROM 指令: FROM 指令是 Dockerfile 的第一條指令,用于指定基礎(chǔ)鏡像。選擇合適的基礎(chǔ)鏡像非常重要,因?yàn)樗鼘⒅苯佑绊戠R像的大小和性能。我們還可以利用多階段構(gòu)建來(lái)減小鏡像大小。
  • RUN 指令: RUN 指令用于在鏡像構(gòu)建過(guò)程中執(zhí)行命令。通過(guò) RUN,我們可以安裝軟件包、運(yùn)行腳本以及配置環(huán)境。
  • COPY 和 ADD 指令: 這兩個(gè)指令用于將本地文件復(fù)制到鏡像中。區(qū)別在于 ADD 指令支持自動(dòng)解壓縮和遠(yuǎn)程 URL,但推薦使用 COPY 指令,因?yàn)樗鞔_和可預(yù)測(cè)。
  • CMD 和 ENTRYPOINT 指令: 這兩個(gè)指令用于定義容器啟動(dòng)時(shí)要執(zhí)行的命令。CMD 定義的命令可以被 docker run 命令行參數(shù)所覆蓋,而 ENTRYPOINT 定義的命令會(huì)一直執(zhí)行。

以下是一個(gè)簡(jiǎn)單的Dockerfile 示例:

# 使用 openjdk 鏡像作為基礎(chǔ)鏡像
FROM openjdk:latest

# 設(shè)置工作目錄
WORKDIR /app

# 復(fù)制 Java 項(xiàng)目的 JAR 文件到鏡像中
COPY target/myapp.jar /app/

# 定義容器啟動(dòng)時(shí)執(zhí)行的命令
CMD ["java", "-jar", "myapp.jar"]

在上面的示例中,我們使用 openjdk:latest 作為基礎(chǔ)鏡像,并將 Java 項(xiàng)目的 JAR 文件復(fù)制到鏡像中。然后,通過(guò) CMD 指令定義了容器啟動(dòng)時(shí)執(zhí)行的命令,即運(yùn)行 java -jar myapp.jar 啟動(dòng) Java 應(yīng)用程序。

多階段構(gòu)建

多階段構(gòu)建是一種優(yōu)化 Docker 鏡像大小的技巧,特別適用于構(gòu)建 Java 項(xiàng)目等編譯型語(yǔ)言的應(yīng)用。在多階段構(gòu)建中,我們可以在一個(gè) Dockerfile 中定義多個(gè) FROM 指令,每個(gè)指令表示一個(gè)構(gòu)建階段。最終鏡像只保留最后一個(gè) FROM 指令所定義的階段,其他中間產(chǎn)物都不會(huì)包含在最終鏡像中,從而減小鏡像的體積。

Dockerfile 示例:

# 第一階段:構(gòu)建 Java 項(xiàng)目
FROM maven:latest AS builder

WORKDIR /app

COPY pom.xml .
RUN mvn dependency:go-offline

COPY src/ /app/src/
RUN mvn package

# 第二階段:運(yùn)行 Java 項(xiàng)目
FROM openjdk:latest

WORKDIR /app

COPY --from=builder /app/target/myapp.jar /app/

CMD ["java", "-jar", "myapp.jar"]

在上面的示例中,我們使用了兩個(gè) FROM 指令:

FROM maven:latest AS builder 表示第一階段構(gòu)建 Java 項(xiàng)目,使用 Maven 鏡像進(jìn)行依賴安裝和項(xiàng)目構(gòu)建;

FROM openjdk:latest 表示第二階段,使用 OpenJDK 鏡像來(lái)運(yùn)行 Java 項(xiàng)目。通過(guò) COPY --from 指令,我們從第一階段的鏡像中復(fù)制構(gòu)建好的 JAR 文件到第二階段,從而減小了最終鏡像的大小。

Dockerfile 高級(jí)用法

  • 使用 ARG 和 ENV: ARG 指令用于在構(gòu)建過(guò)程中傳遞參數(shù),而 ENV 指令用于設(shè)置環(huán)境變量。利用這些指令,我們可以更靈活地定制鏡像的構(gòu)建過(guò)程。
  • 使用 WORKDIR: WORKDIR 指令用于設(shè)置工作目錄,即在容器內(nèi)運(yùn)行命令的默認(rèn)目錄。這樣可以使 Dockerfile 更易讀和維護(hù)。
  • 使用 VOLUME: VOLUME 指令用于在容器中創(chuàng)建掛載點(diǎn),使得容器中的數(shù)據(jù)可以持久化保存在宿主機(jī)上。

Dockerfile 示例:

# 第一階段:構(gòu)建 Java 項(xiàng)目
FROM maven:latest AS builder

# 使用 ARG 指令傳遞構(gòu)建參數(shù)
ARG APP_VERSION=1.0.0
ARG BUILD_ENV=production

# 設(shè)置工作目錄
WORKDIR /app

# 復(fù)制 pom.xml 并安裝項(xiàng)目依賴
COPY pom.xml .
RUN mvn dependency:go-offline

# 復(fù)制源代碼并構(gòu)建項(xiàng)目
COPY src/ /app/src/
RUN mvn package -DskipTests

# 第二階段:運(yùn)行 Java 項(xiàng)目
FROM openjdk:latest

# 使用 ENV 指令設(shè)置環(huán)境變量
ENV APP_PORT=8080
ENV BUILD_ENV=${BUILD_ENV}

# 使用 VOLUME 指令創(chuàng)建掛載點(diǎn)
VOLUME /app/logs

# 設(shè)置工作目錄
WORKDIR /app

# 復(fù)制構(gòu)建好的 JAR 文件到鏡像中
COPY --from=builder /app/target/myapp-${APP_VERSION}.jar /app/

# 定義容器啟動(dòng)時(shí)執(zhí)行的命令
CMD ["java", "-jar", "myapp-${APP_VERSION}.jar", "--port=${APP_PORT}", "--env=${BUILD_ENV}"]

在上面的示例中,我們首先使用 ARG 指令來(lái)定義構(gòu)建參數(shù) APP_VERSIONBUILD_ENV,并在 FROM maven:latest AS builder 階段中使用 ARG 指令傳遞構(gòu)建參數(shù)。

這樣,在構(gòu)建時(shí)可以通過(guò) --build-arg 參數(shù)來(lái)傳遞具體的值,例如:

cssCopy code
docker build --build-arg APP_VERSION=2.0.0 --build-arg BUILD_ENV=staging -t my-java-app .

這樣可以構(gòu)建不同版本和不同環(huán)境的鏡像。

同時(shí),我們使用 VOLUME 指令創(chuàng)建了掛載點(diǎn) /app/logs,使得容器中的日志文件可以持久化保存在宿主機(jī)上。

小結(jié)

Dockerfile 是構(gòu)建 Docker 鏡像的核心工具,它使得鏡像構(gòu)建過(guò)程變得簡(jiǎn)單、可重復(fù)和高效。通過(guò)本文的介紹,你已經(jīng)了解了 Dockerfile 的基本語(yǔ)法和常用指令,以及一些最佳實(shí)踐。隨著你的實(shí)踐和深入學(xué)習(xí),相信你將能夠創(chuàng)建出更加優(yōu)秀的 Docker 鏡像,并更好地應(yīng)用 Docker 在軟件開(kāi)發(fā)和部署中。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 容器
    +關(guān)注

    關(guān)注

    0

    文章

    495

    瀏覽量

    22061
  • 軟件包
    +關(guān)注

    關(guān)注

    0

    文章

    104

    瀏覽量

    11596
  • 鏡像
    +關(guān)注

    關(guān)注

    0

    文章

    164

    瀏覽量

    10724
  • Docker
    +關(guān)注

    關(guān)注

    0

    文章

    458

    瀏覽量

    11856
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    介紹一下linux環(huán)境下docker的使用流程

    Dockerfile 還有其他很多的指令,請(qǐng)?jiān)?Docker 查看指令的用法。FROMFROM 指令初始化一個(gè)新的構(gòu)建階段,并為后續(xù)指令設(shè)置基本鏡像。因此,一個(gè)有效的
    發(fā)表于 04-27 15:03

    構(gòu)建ARM64版本nacos docker鏡像

    在適配過(guò)程中有大量合作伙伴用到nacos且采用容器化部署,dockerhub未提供官方鏡像,因此需要在鯤鵬服務(wù)器自定義構(gòu)建。構(gòu)建前提:
    發(fā)表于 06-16 14:29

    介紹一款非常方便的java領(lǐng)域docker鏡像構(gòu)建工具

    工具.亮點(diǎn)是不需要Docker daemon,意味著即使本地沒(méi)有安裝docker也能通過(guò)jib構(gòu)建docker鏡像,并且可以
    發(fā)表于 07-19 17:41

    一文詳解DockerFile基礎(chǔ)知識(shí)

    ]#[root@e554346292fa local# 構(gòu)建的時(shí)候設(shè)置環(huán)境變量# 鏡像的工作目錄](méi)#大家還是不要把注釋寫(xiě)道dockerfile里....6 查看構(gòu)建
    發(fā)表于 09-15 15:54

    淺析Docker鏡像本地存儲(chǔ)機(jī)制及容器啟動(dòng)原理

    鏡像各層內(nèi)容及對(duì)應(yīng)大小,每層對(duì)應(yīng)著 Dockerfile 中的一條指令。Docker 鏡像默認(rèn)存儲(chǔ)在 /var/lib/docker/《st
    發(fā)表于 10-19 14:17 ?2529次閱讀

    Docker鏡像的詳細(xì)講解

    本文是對(duì) Docker 鏡像的詳細(xì)講解,講解了如何安裝 Docker、配置 Docker 鏡像加速以及操作
    的頭像 發(fā)表于 08-02 10:00 ?2182次閱讀

    鏡像構(gòu)建Dockerfile的介紹

    Dockerfile 是一個(gè)用來(lái)構(gòu)建鏡像的文本文件,文本內(nèi)容包含了一條條構(gòu)建鏡像所需的指令和說(shuō)明。
    的頭像 發(fā)表于 09-06 09:36 ?1150次閱讀

    如何創(chuàng)建 Docker 鏡像的能力

    本文將帶大家繼續(xù)深入了解 Dockerfile 鏡像創(chuàng)建過(guò)程中最重要的配置文件內(nèi)容,更加透徹地了解整個(gè)容器鏡像的創(chuàng)建過(guò)程。
    的頭像 發(fā)表于 09-16 09:39 ?1125次閱讀

    Dockerfile的最佳實(shí)踐

    隨著應(yīng)用的容器化、上云后,將伴隨著 Docker 鏡像構(gòu)建構(gòu)建 Docker 鏡像成為了最基
    的頭像 發(fā)表于 01-20 10:59 ?995次閱讀
    <b class='flag-5'>Dockerfile</b>的最佳實(shí)踐

    Docker入門指南之什么是Dockerfile

    發(fā)時(shí)所構(gòu)建鏡像或者通過(guò)Dockerfile文件構(gòu)建一個(gè)新的鏡像開(kāi)始工作 * 對(duì)于運(yùn)維人員:在部署時(shí),可以實(shí)現(xiàn)應(yīng)用的無(wú)縫移植
    的頭像 發(fā)表于 02-06 15:25 ?642次閱讀
    <b class='flag-5'>Docker</b>入門指南之什么是<b class='flag-5'>Dockerfile</b>

    docker 搜索鏡像,docker查看鏡像詳細(xì)信息(docker下載鏡像命令)

    Docker Hub是集中管理的Docker鏡像注冊(cè)中心。通過(guò)Docker 用戶可以在注冊(cè)中心搜索、下載和使用CLI命令行工具中的鏡像。以下
    的頭像 發(fā)表于 07-19 09:46 ?1860次閱讀

    構(gòu)建docker鏡像應(yīng)該遵循哪些原則

    構(gòu)建 Docker 鏡像時(shí),應(yīng)遵循以下原則: 單一職責(zé):每個(gè)鏡像應(yīng)只包含一個(gè)應(yīng)用或服務(wù),避免將多個(gè)應(yīng)用或服務(wù)放在同一個(gè)鏡像中。這樣可以確保
    的頭像 發(fā)表于 11-23 09:41 ?1028次閱讀

    如何使用dockerfile創(chuàng)建鏡像

    Docker是一個(gè)開(kāi)源的平臺(tái),用于快速構(gòu)建、打包、部署應(yīng)用程序的容器化工具。而Dockerfile是一個(gè)文本文件,包含了一組可自動(dòng)化構(gòu)建Docker
    的頭像 發(fā)表于 11-23 09:52 ?742次閱讀

    手動(dòng)構(gòu)建Docker鏡像的方法

    不推薦使用docker commit命令,而應(yīng)該使用更靈活、更強(qiáng)大的dockerfile來(lái)構(gòu)建docker鏡像
    的頭像 發(fā)表于 08-05 15:30 ?524次閱讀
    手動(dòng)<b class='flag-5'>構(gòu)建</b><b class='flag-5'>Docker</b><b class='flag-5'>鏡像</b>的方法

    提升DevOps效率,從基礎(chǔ)到進(jìn)階的Dockerfile編寫(xiě)技巧

    創(chuàng)建自定義鏡像Dockerfile 由一行行命令語(yǔ)句組成,并且支持以 # 開(kāi)頭的注釋行。 Docker分為四部分: 基礎(chǔ)鏡像信息 維護(hù)者
    的頭像 發(fā)表于 11-26 09:44 ?92次閱讀
    提升DevOps效率,從基礎(chǔ)到進(jìn)階的<b class='flag-5'>Dockerfile</b>編寫(xiě)技巧
    主站蜘蛛池模板: 国产精品入口免费视频| 女人本色高清在线观看wwwwww国产| 美女性色| 4虎影院永久地址www| 亚洲偷图色综合色就色| 四虎h789fcom| jinv在线视频| 亚洲最大黄色网址| 天堂网成人| 成人看的一级毛片| 五月天色网址| 色优优| 黄色aa毛片| 天天澡天天摸天天添视频| 毛片观看网址| 18男女很黄的视频| 国产色噜噜| 手机在线你懂的| 色视频免费观看高清完整| 欧美色视频日本片高清在线观看| 亚洲成色www久久网站| 黄色福利网| 久久国产精品岛国搬运工| 年下攻高h好涨| 可以直接看的黄址| 伊人久久影视| 一区二区三区高清不卡| 欧美日韩高清性色生活片| 特级毛片s级全部免费| 最新国产你懂的在线网址| 国产色av| avtt天堂网 手机资源| 欧美三级第一页| 激情综合在线| 最近高清在线国语| 国产handjob手交在线播放| 免费高清成人啪啪网站| 亚洲成a人片在线观看尤物| 91老色批网站免费看| 特黄aa级毛片免费视频播放| 免费的国语一级淫片|