成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

番茄西紅柿 / 3330人閱讀

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

運行簡單的Java程序

先在當(dāng)前目錄創(chuàng)建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);    }}

然后創(chuàng)建Dockerfile

## 設(shè)置基礎(chǔ)鏡像FROM openjdk:8## 設(shè)置進(jìn)入容器時的工作目錄WORKDIR /root/app## 將本地目錄復(fù)制進(jìn)容器目錄中COPY App.java /root/app## 鏡像制作時執(zhí)行的命令RUN javac App.java## 容器啟動時執(zhí)行的命令ENTRYPOINT java App

準(zhǔn)備工作做好之后在當(dāng)前目錄輸入命令

docker build .

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

build完成之后運行命令:

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

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

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

現(xiàn)在根據(jù)鏡像啟動容器,運行命令:

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

輸出如下:

Linuxamd645.4.72-microsoft-standard-WSL2

這段Java程序的作用就是輸出當(dāng)前操作系統(tǒng)的環(huán)境,根據(jù)輸出可以知道博主是在WSL2上運行docker的。

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

為了便于區(qū)別兩次構(gòu)建出的不同鏡像,我們給之前的鏡像打上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

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

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

多階段構(gòu)建鏡像

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

有沒有辦法實現(xiàn)編譯、打包、運行一體化呢?

當(dāng)然是有的,簡單修改一下Dockerfile就可以了

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

首先創(chuàng)建一個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                    

然后在項目的根目錄下創(chuàng)建Dockerfile文件

## build stageFROM maven:3.8.3-jdk-8 AS MAVEN_BUILDWORKDIR /build/# 把本地的pom.xml和src目錄復(fù)制到鏡像的/build目錄下COPY pom.xml /build/COPY src /build/src/# 執(zhí)行打包命令RUN mvn package## run sFROM openjdk:8-jre-alpine# 設(shè)置工作目錄在鏡像的 /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基礎(chǔ)鏡像
MAINTAINER維護(hù)者信息
ADD添加文件到鏡像(自動解壓)
COPY添加文件到鏡像(不解壓)
USER設(shè)置運行RUN指令的用戶
ENV設(shè)置環(huán)境變量
RUN鏡像制作時執(zhí)行的命令
ENTRYPOINT容器啟動時執(zhí)行的命令(無法被覆蓋)
CMD容器啟動時執(zhí)行的命令(多條CMD只執(zhí)行最后一條)
EXPOSE聲明要打開的端口(實際還是要docker run -p port1:port2 才行)
VOLUME目錄映射
ONBUILD構(gòu)建時自動執(zhí)行的命令

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/125095.html

相關(guān)文章

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

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

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

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

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

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

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

    摘要:今天小數(shù)給大家?guī)硪黄夹g(shù)正能量滿滿的分享來自社區(qū)線上群分享的實錄,分享嘉賓是數(shù)人云肖德時。第二級調(diào)度由被稱作的組件組成。它們是最小的部署單元,由統(tǒng)一創(chuàng)建調(diào)度管理。 今天小數(shù)給大家?guī)硪黄夹g(shù)正能量滿滿的分享——來自KVM社區(qū)線上群分享的實錄,分享嘉賓是數(shù)人云CTO肖德時。 嘉賓介紹: 肖德時,數(shù)人云CTO 十五年計算機行業(yè)從業(yè)經(jīng)驗,曾為紅帽 Engineering Service ...

    0x584a 評論0 收藏0

發(fā)表評論

0條評論

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