国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Docker極簡入門:使用Docker運行Java程序

番茄西紅柿 / 3285人閱讀

摘要:完成之后運行命令你的輸出可能會像這樣和都為,這是因為剛剛在編寫時沒有指定它們。多階段構建鏡像多階段構建鏡像其實運行程序只需要就行,我們沒有必要使用作為基礎鏡像。但把程序打包成包,然后再交給的方式太麻煩了。

運行簡單的Java程序

先在當前目錄創建App.java文件

public class App{    public static void main(String[] args){        String os = System.getProperty("os.name");        String osArch = System.getProperty("os.arch");        String osVersion = System.getProperty("os.version");        System.out.println(os);        System.out.println(osArch);        System.out.println(osVersion);    }}

然后創建Dockerfile

## 設置基礎鏡像FROM openjdk:8## 設置進入容器時的工作目錄WORKDIR /root/app## 將本地目錄復制進容器目錄中COPY App.java /root/app## 鏡像制作時執行的命令RUN javac App.java## 容器啟動時執行的命令ENTRYPOINT java App

準備工作做好之后在當前目錄輸入命令

docker build .

.是指明Dockerfile文件在哪個路徑之下,因為我們是在當前路徑下創建的,所以只需要填寫.就好。

build完成之后運行命令:

docker images## 你的輸出可能會像這樣REPOSITORY   TAG       IMAGE ID       CREATED       SIZE           2045f43c5e88   6 hours ago   526MB

REPOSITORYTAG都為,這是因為剛剛在編寫Dockerfile時沒有指定它們。

之后的段落里會解決這個問題,對于這個簡單的項目,我們只需要IMAGE ID就夠了。

現在根據鏡像啟動容器,運行命令:

## 偷懶的話可以只打IMAGE ID的前三位## 這個IMAGE ID要根據你實際build出來的鏡像進行修改## 請務必運行前一條命令docker images, 找到對應的IDdocker run 2045f43c5e88

輸出如下:

Linuxamd645.4.72-microsoft-standard-WSL2

這段Java程序的作用就是輸出當前操作系統的環境,根據輸出可以知道博主是在WSL2上運行docker的。

FROM alpineWORKDIR /root/appCOPY App.java /root/appRUN apk add openjdk8## 設置環境變量ENV JAVA_HOME /usr/lib/jvm/java-1.8-openjdkENV PATH $PATH:$JAVA_HOME/binRUN javac App.javaENTRYPOINT java App

為了便于區別兩次構建出的不同鏡像,我們給之前的鏡像打上tag

使用命令:

docker tag 2045 myapp:1.0

build時可以使用-t來為鏡像打tag

docker build . -t myapp:2.0

再次運行命令

docker images
REPOSITORY   TAG            IMAGE ID       CREATED        SIZEmyapp        1.0            2045f43c5e88   12 hours ago   526MBmyapp        2.0            0545999c0fc0   25 hours ago   131MB

可以看到兩個鏡像已經被分別打上了tag,不過值得注意的是tag為1.0的鏡像體積要比2.0的大,這是為什么?

直接將openjdk作為基礎鏡像會包含所有的Java語言編譯工具和庫。

多階段構建鏡像

其實運行Java程序只需要jre就行,我們沒有必要使用jdk作為基礎鏡像。但把程序打包成jar包,然后再交給docker的方式太麻煩了。

有沒有辦法實現編譯、打包、運行一體化呢?

當然是有的,簡單修改一下Dockerfile就可以了

先基于Maven鏡像生成jar包,最后運行在jre鏡像中,同時刪除已經用不到的Maven鏡像

首先創建一個maven項目

這是我的pom.xml文件

  4.0.0    org.example  demoapp  app  demoapp    http://www.example.com      UTF-8    1.8    1.8              junit      junit      4.11      test                                            maven-clean-plugin          3.1.0                                  maven-resources-plugin          3.0.2                          maven-compiler-plugin          3.8.0                          maven-surefire-plugin          2.22.1                          maven-jar-plugin          3.0.2                        			                                true                false                lib/                org.example.App                                                              maven-install-plugin          2.5.2                          maven-deploy-plugin          2.8.2                                  maven-site-plugin          3.7.1                          maven-project-info-reports-plugin          3.0.0                    

然后在項目的根目錄下創建Dockerfile文件

## build stageFROM maven:3.8.3-jdk-8 AS MAVEN_BUILDWORKDIR /build/# 把本地的pom.xml和src目錄復制到鏡像的/build目錄下COPY pom.xml /build/COPY src /build/src/# 執行打包命令RUN mvn package## run sFROM openjdk:8-jre-alpine# 設置工作目錄在鏡像的 /app 目錄下WORKDIR /app# 將第一階段生成的jar包添加到第二階段的容器中COPY --from=MAVEN_BUILD /build/target/demoapp-app.jar /app/# 運行jar包ENTRYPOINT java -jar demoapp-app.jar
REPOSITORY   TAG            IMAGE ID       CREATED             SIZE                770d75ab38d7   7 seconds ago    84.9MB

最后生成的鏡像大小要比之前的500MB小了很多

Dockerfile常用命令

命令描述
FROM基礎鏡像
MAINTAINER維護者信息
ADD添加文件到鏡像(自動解壓)
COPY添加文件到鏡像(不解壓)
USER設置運行RUN指令的用戶
ENV設置環境變量
RUN鏡像制作時執行的命令
ENTRYPOINT容器啟動時執行的命令(無法被覆蓋)
CMD容器啟動時執行的命令(多條CMD只執行最后一條)
EXPOSE聲明要打開的端口(實際還是要docker run -p port1:port2 才行)
VOLUME目錄映射
ONBUILD構建時自動執行的命令

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/125095.html

相關文章

  • Spring Boot 應用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)

    摘要:應用化極簡教程陳光劍基于的企業級應用開發最佳實踐前面的章節中,我們都是在環境中開發運行測試應用程序。關鍵字是分布式應用微服務容器虛擬化。通常,在企業項目實踐中,會實現一套應用部署發布的自動化運維平臺工具。 Spring Boot 應用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)—— 基于 Gradle + Kotlin的企業級應用開發最佳實踐 前面的章節中,...

    Donne 評論0 收藏0
  • Spring Boot 應用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)

    摘要:應用化極簡教程陳光劍基于的企業級應用開發最佳實踐前面的章節中,我們都是在環境中開發運行測試應用程序。關鍵字是分布式應用微服務容器虛擬化。通常,在企業項目實踐中,會實現一套應用部署發布的自動化運維平臺工具。 Spring Boot 應用 Docker 化 《Spring Boot 2.0極簡教程》(陳光劍)—— 基于 Gradle + Kotlin的企業級應用開發最佳實踐 前面的章節中,...

    rose 評論0 收藏0
  • Docker 極簡印象

    摘要:通過指令可以將可修改層提交到鏡像中,從而生成一個新的鏡像。倉庫有了鏡像之后,可以很方便的在不同的機器上運行一致的環境。數據卷是獨立于容器存在的,容器銷毀后數據卷仍然存在。 Docker是一款比傳統虛擬機軟件更先進的虛擬化工具,可以快速的在不同機器上搭建出一致的開發、調試、運行環境。它的核心概念有鏡像、容器和倉庫。 鏡像(Image) 類似于ISO文件,是一個打包好的運行環境。一個鏡像可...

    GraphQuery 評論0 收藏0
  • Docker 與 Mesos 的前生今世 | 數人云CTO肖德時@KVM分享實錄

    摘要:今天小數給大家帶來一篇技術正能量滿滿的分享來自社區線上群分享的實錄,分享嘉賓是數人云肖德時。第二級調度由被稱作的組件組成。它們是最小的部署單元,由統一創建調度管理。 今天小數給大家帶來一篇技術正能量滿滿的分享——來自KVM社區線上群分享的實錄,分享嘉賓是數人云CTO肖德時。 嘉賓介紹: 肖德時,數人云CTO 十五年計算機行業從業經驗,曾為紅帽 Engineering Service ...

    0x584a 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<