成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們一起聊聊Docker And Dockerfile

開發 開發工具
Dockerfile 是構建 Docker 鏡像的核心工具,它使得鏡像構建過程變得簡單、可重復和高效。通過本文的介紹,你已經了解了 Dockerfile 的基本語法和常用指令,以及一些最佳實踐。隨著你的實踐和深入學習,相信你將能夠創建出更加優秀的 Docker 鏡像,并更好地應用 Docker 在軟件開發和部署中。

對于開發人員來說,會Docker而不知道Dockerfile等于不會Docker,上一篇文章帶大家學習了Docker的基本使用方法:《一文帶你學會Docker》,今天了不起帶大家學習一下Dockerfile,幫助你快速上手并創建高效的 Docker 鏡像。

了解Dockerfile

Dockerfile 是一個文本文件,用于定義 Docker 鏡像的構建過程。它以指令的形式描述了如何構建鏡像,從基礎鏡像開始逐步添加配置、文件和依賴,最終形成我們所需要的鏡像。為我們提供了一種簡單且可重復的方式來定義鏡像構建過程。

Dockerfile 指令

  • FROM 指令: FROM 指令是 Dockerfile 的第一條指令,用于指定基礎鏡像。選擇合適的基礎鏡像非常重要,因為它將直接影響鏡像的大小和性能。我們還可以利用多階段構建來減小鏡像大小。
  • RUN 指令: RUN 指令用于在鏡像構建過程中執行命令。通過 RUN,我們可以安裝軟件包、運行腳本以及配置環境。
  • COPY 和 ADD 指令: 這兩個指令用于將本地文件復制到鏡像中。區別在于 ADD 指令支持自動解壓縮和遠程 URL,但推薦使用 COPY 指令,因為它更明確和可預測。
  • CMD 和 ENTRYPOINT 指令: 這兩個指令用于定義容器啟動時要執行的命令。CMD 定義的命令可以被 docker run 命令行參數所覆蓋,而 ENTRYPOINT 定義的命令會一直執行。

以下是一個簡單的Dockerfile 示例:

# 使用 openjdk 鏡像作為基礎鏡像
FROM openjdk:latest

# 設置工作目錄
WORKDIR /app

# 復制 Java 項目的 JAR 文件到鏡像中
COPY target/myapp.jar /app/

# 定義容器啟動時執行的命令
CMD ["java", "-jar", "myapp.jar"]

在上面的示例中,我們使用 openjdk:latest 作為基礎鏡像,并將 Java 項目的 JAR 文件復制到鏡像中。然后,通過 CMD 指令定義了容器啟動時執行的命令,即運行 java -jar myapp.jar 啟動 Java 應用程序。

多階段構建

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

Dockerfile 示例:

# 第一階段:構建 Java 項目
FROM maven:latest AS builder

WORKDIR /app

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

COPY src/ /app/src/
RUN mvn package

# 第二階段:運行 Java 項目
FROM openjdk:latest

WORKDIR /app

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

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

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

FROM maven:latest AS builder 表示第一階段構建 Java 項目,使用 Maven 鏡像進行依賴安裝和項目構建;

FROM openjdk:latest 表示第二階段,使用 OpenJDK 鏡像來運行 Java 項目。通過 COPY --from 指令,我們從第一階段的鏡像中復制構建好的 JAR 文件到第二階段,從而減小了最終鏡像的大小。

Dockerfile 高級用法

  • 使用 ARG 和 ENV: ARG 指令用于在構建過程中傳遞參數,而 ENV 指令用于設置環境變量。利用這些指令,我們可以更靈活地定制鏡像的構建過程。
  • 使用 WORKDIR: WORKDIR 指令用于設置工作目錄,即在容器內運行命令的默認目錄。這樣可以使 Dockerfile 更易讀和維護。
  • 使用 VOLUME: VOLUME 指令用于在容器中創建掛載點,使得容器中的數據可以持久化保存在宿主機上。

Dockerfile 示例:

# 第一階段:構建 Java 項目
FROM maven:latest AS builder

# 使用 ARG 指令傳遞構建參數
ARG APP_VERSION=1.0.0
ARG BUILD_ENV=production

# 設置工作目錄
WORKDIR /app

# 復制 pom.xml 并安裝項目依賴
COPY pom.xml .
RUN mvn dependency:go-offline

# 復制源代碼并構建項目
COPY src/ /app/src/
RUN mvn package -DskipTests

# 第二階段:運行 Java 項目
FROM openjdk:latest

# 使用 ENV 指令設置環境變量
ENV APP_PORT=8080
ENV BUILD_ENV=${BUILD_ENV}

# 使用 VOLUME 指令創建掛載點
VOLUME /app/logs

# 設置工作目錄
WORKDIR /app

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

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

在上面的示例中,我們首先使用 ARG 指令來定義構建參數 APP_VERSION 和 BUILD_ENV,并在 FROM maven:latest AS builder 階段中使用 ARG 指令傳遞構建參數。

這樣,在構建時可以通過 --build-arg 參數來傳遞具體的值,例如:

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

這樣可以構建不同版本和不同環境的鏡像。

同時,我們使用 VOLUME 指令創建了掛載點 /app/logs,使得容器中的日志文件可以持久化保存在宿主機上。

小結

Dockerfile 是構建 Docker 鏡像的核心工具,它使得鏡像構建過程變得簡單、可重復和高效。通過本文的介紹,你已經了解了 Dockerfile 的基本語法和常用指令,以及一些最佳實踐。隨著你的實踐和深入學習,相信你將能夠創建出更加優秀的 Docker 鏡像,并更好地應用 Docker 在軟件開發和部署中。


責任編輯:武曉燕 來源: Java技術指北
相關推薦

2024-07-26 09:47:28

2023-08-10 08:28:46

網絡編程通信

2023-06-30 08:18:51

敏捷開發模式

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-03-26 23:47:32

Go內存模型

2022-10-08 00:00:05

SQL機制結構

2023-07-24 09:41:08

自動駕駛技術交通

2022-02-23 08:41:58

NATIPv4IPv6

2022-09-22 08:06:29

計算機平板微信

2024-11-28 09:57:50

C#事件發布器

2021-08-12 07:49:24

mysql

2022-10-28 07:27:17

Netty異步Future

2022-11-12 12:33:38

CSS預處理器Sass

2022-06-26 09:40:55

Django框架服務

2023-04-26 07:30:00

promptUI非結構化

2022-02-14 07:03:31

網站安全MFA

2025-03-27 02:00:00

SPIJava接口
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美久久久久 | 成人小视频在线观看 | 精品国产欧美一区二区三区不卡 | 色婷婷精品久久二区二区蜜臂av | 久久精品视频一区二区 | 在线免费黄色小视频 | 精品国产乱码久久久久久丨区2区 | 国产一区二区三区久久久久久久久 | 久久久免费电影 | 国产午夜精品一区二区三区四区 | cao在线| 午夜精品久久久久久久久久久久 | 天天操天天射天天 | 欧美视频一区二区三区 | 久久久久久久电影 | 久久久久免费精品国产小说色大师 | 国产欧美一区二区三区日本久久久 | 日韩欧美在线视频 | 开操网| 亚洲一区二区久久 | 日韩色图在线观看 | 亚洲国产精品成人综合久久久 | 欧美成人精品一区二区男人看 | 国产精品99久久久久久久久 | 免费久久精品视频 | 99精品一级欧美片免费播放 | 国产在线精品一区 | 久久亚洲视频网 | 国产欧美日韩精品一区二区三区 | 少妇无套高潮一二三区 | 国产精品资源在线 | 午夜视频一区 | 九九天堂网 | 久久无毛 | 国产精品成人一区 | 99精品国产一区二区三区 | 美女日批免费视频 | 成人在线免费视频 | av网站在线免费观看 | 超碰97人人人人人蜜桃 | 亚洲精品v日韩精品 |