一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - Java教程 - 詳解Maven Docker鏡像使用技巧

詳解Maven Docker鏡像使用技巧

2021-05-07 11:22ilinux_one Java教程

這篇文章主要介紹了詳解Maven Docker鏡像使用技巧,Maven是目前最流行的Java項目管理工具之一,提供了強大的包依賴管理和應用構建功能。本文以Maven為例介紹了Docker在應用構建中的一些常見技巧。

本文介紹了maven docker鏡像使用技巧,分享給大家,具體如下:

詳解Maven Docker鏡像使用技巧

maven是目前最流行的java項目管理工具之一,提供了強大的包依賴管理和應用構建功能。

docker提供了官方的maven鏡像可以用于管理和構建java應用。與直接安裝使用maven工具相比,使用docker鏡像具有更好的可移植性,可以方便地進行版本切換,非常適合在持續集成過程中使用。

關于maven官方鏡像的用法可以參考使用文檔

使用阿里云加速

maven官方倉庫在國內網絡下的下載速度實在是讓人欲哭無淚,利用阿里云的maven鏡像可以大大提升軟件包下載速度。

我們可以在官方maven鏡像的基礎之上添加阿里云鏡像配置。其代碼可以在https://github.com/aliyuncontainerservice/maven-image 上獲得

它的配置文件settings.xml如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<settings xmlns="http://maven.apache.org/settings/1.0.0"
 xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"
 xsi:schemalocation="http://maven.apache.org/settings/1.0.0
      https://maven.apache.org/xsd/settings-1.0.0.xsd">
 <localrepository>/usr/share/maven/ref/repository</localrepository>
 <mirrors>
 <mirror>
  <!--this sends everything else to /public -->
  <id>aliyun-nexus</id>
  <mirrorof>*</mirrorof>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
 </mirror>
 <mirror>
  <!--this is used to direct the public snapshots repo in the
   profile below over to a different nexus group -->
  <id>aliyun-nexus-public-snapshots</id>
  <mirrorof>public-snapshots</mirrorof>
  <url>http://maven.aliyun.com/nexus/content/repositories/snapshots/</url>
  </mirror>
 </mirrors>
</settings>

阿里云容器服務提供了預構建的docker鏡像可供直接使用registry.cn-hangzhou.aliyuncs.com/acs/maven,

我們可以像使用mvn命令一樣,直接在當前目錄中執行如下命令來構建應用

 

復制代碼 代碼如下:
docker run -it --rm --name maven -v "$(pwd)":/usr/src/app -w /usr/src/app registry.cn-hangzhou.aliyuncs.com/acs/maven mvn clean install

 

如果希望能夠緩存下載的maven倉庫,我們可以利用docker的文件卷來實現

首先執行如下命令創建一個名為“maven-repo”的文件卷

?
1
docker volume create --name maven-repo

在之后的調用中,將其掛載到maven鏡像中倉庫下載目錄上

 

復制代碼 代碼如下:
docker run -it --rm --name maven -v "$(pwd)":/usr/src/app -v maven-repo:/usr/share/maven/ref -w /usr/src/app registry.cn-hangzhou.aliyuncs.com/acs/maven mvn clean install

 

這樣maven倉庫就不會每次都下載一遍了。

優化dockerfile提升構建速度

我們可以在dockerfile中構建應用,并利用docker構建時的分層緩存機制來提升構建速度

下面是一個示例dockerfile.build文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from registry.cn-hangzhou.aliyuncs.com/acs/maven:3-jdk-8
 
env my_home=/usr/src/app
run mkdir -p $my_home
workdir $my_home
add pom.xml $my_home
 
# get all the downloads out of the way
run ["/usr/local/bin/mvn-entrypoint.sh","mvn","verify","clean","--fail-never"]
 
# add source
add . $my_home
 
# run maven verify
run ["/usr/local/bin/mvn-entrypoint.sh","mvn","verify"]

其中的一個重要技巧就是先把pom.xml添加到工作目錄,利用maven命令下載應用所需jar包之后,再添加應用源文件進行編譯。這樣只要pom.xml沒有更新就不會重新下載所依賴的jar包,可以大大加快鏡像構建速度。

我們可以通過如下命令來編譯應用

?
1
docker build -t builder-img -f dockerfile.build .

應用編譯與docker鏡像構建分離

對于靜態編譯型語言,我們通常需要將應用編譯過程與鏡像構建過程分離。主要有以下兩個考慮:

  1. 最終生成的docker鏡像不應該包含源代碼

  2. 最終生成的docker鏡像應該最小化,不應該包含編譯時工具

我們可以將應用編譯結果從docker鏡像中拷貝出來,方法如下

?
1
2
3
docker build -t builder-img -f dockerfile.build .
docker create --name builder builder-img
docker cp builder:/usr/src/app/target ./target

這時maven構建的結果就被拷貝到當前目錄的“target”子目錄下面了。

之后,我們可以利用另外一個dockerfile來構建應用鏡像了。篇幅有限不再贅述。

總結

本文以maven為例介紹了docker在應用構建中的一些常見技巧

  1. 利用國內的鏡像站點加速軟件包下載:阿里云和阿里集團提供了大量開源項目的包管理鏡像站點,阿里云容器服務開源項目 https://github.com/aliyuncontainerservice 中提供很多帶加速能力的ruby/python/node/maven基礎鏡像可供參考。

  2. 在docker鏡像構建過程中,為了防止由于代碼變化反復下載軟件包,可以先把應用配置文件加入dockerfile,在編譯之前提前下載軟件包。比如ruby的gemfile, python的requirements.txt,和nodejs的package.json都可以采用類似方法。這樣可以更好地利用docker的分層緩存機制加速鏡像構建過程。

  3. 應用編譯應該與docker鏡像構建分離

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/ilinuxer/p/6649029.html

延伸 · 閱讀

精彩推薦
  • Java教程Java設計模式之單例模式實例分析

    Java設計模式之單例模式實例分析

    這篇文章主要介紹了Java設計模式之單例模式,以實例形式較為詳細的分析了單例模式的概念、定義及簡單實現技巧,需要的朋友可以參考下 ...

    freesonhp3362020-01-15
  • Java教程SpringMvc入門指南(必看)

    SpringMvc入門指南(必看)

    下面小編就為大家帶來一篇SpringMvc入門指南(必看)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian4772020-05-10
  • Java教程list,set,map,數組之間的相互轉換詳細解析

    list,set,map,數組之間的相互轉換詳細解析

    以下是對Java中list,set,map,數組之間的相互轉換進行了詳細的分析介紹,需要的朋友可以過來參考下 ...

    java之家4442019-10-12
  • Java教程Java反射技術詳解及實例解析

    Java反射技術詳解及實例解析

    這篇文章主要介紹了Java反射技術詳解及實例解析,反射可以說是Java中最強大的技術了,它可以做的事情太多太多,很多優秀的開源框架都是通過反射完成...

    黃林晴2222020-07-14
  • Java教程Java8 CompletableFuture詳解

    Java8 CompletableFuture詳解

    這篇文章主要介紹了Java8 CompletableFuture詳解,CompletableFuture extends Future提供了方法,一元操作符和促進異步性以及事件驅動編程模型,需要的朋友可以參考下...

    junjie4112019-11-24
  • Java教程詳解Java設計模式編程中的Flyweight享元模式的開發結構

    詳解Java設計模式編程中的Flyweight享元模式的開發結構

    這篇文章主要介紹了Java設計模式編程中的Flyweight享元模式的開發結構,享元模式能夠最大限度地重用現有的同類對象,需要的朋友可以參考下 ...

    zzq198606262002020-04-20
  • Java教程java 中基本算法之希爾排序的實例詳解

    java 中基本算法之希爾排序的實例詳解

    這篇文章主要介紹了java 中基本算法之希爾排序的實例詳解的相關資料,這里提供簡單實現的實例,幫助大家學習理解此部分知識,需要的朋友可以參考下...

    songxinqiang3302020-12-07
  • Java教程java多線程編程之捕獲子線程異常示例

    java多線程編程之捕獲子線程異常示例

    java多線程程序中所有線程都不允許拋出未捕獲的checked exception,也就是說各個線程需要自己把自己的checked exception處理掉。但是無法避免的是unchecked except...

    java教程網3512019-11-07
主站蜘蛛池模板: 四虎影院大全 | 网址在线观看你懂我意思吧免费的 | 俄罗斯一级毛片免费播放 | 亚洲第一综合网站 | 性色xxx | 大肚孕妇的高h辣文 | 波多野结衣178部中文字幕 | 亚洲一区二区三区不卡在线播放 | 国产婷婷高清在线观看免费 | 久久精品黄AA片一区二区三区 | 美女靠逼免费网站 | 18性夜影院午夜寂寞影院免费 | 亚洲国产欧美在线人成 | 99久久免费国产精品热 | 日韩小视频在线观看 | 国产成人久久精品推最新 | 欧美va免费精品高清在线 | 91九色在线视频 | 美女脱得一二净无内裤全身的照片 | 欧美成人免费观看bbb | 成人午夜爽爽爽免费视频 | 全彩调教侵犯h本子全彩妖气he | 猛男强攻变sao货 | 精品久久久久久久国产潘金莲 | 国产亚洲精品线观看77 | 513热点网深夜影院影院诶 | 国产精品夜夜爽张柏芝 | 亚洲一区 在线播放 | 91久久偷偷做嫩草影院免费看 | 女女宿舍互慰h文小说 | 无遮挡激情 | 性鸥美 | 岛国在线播放v片免费 | 色综合久久中文字幕网 | 免费毛片大全 | v视界影院.vsjla | 国产精品 色 | 夫妇交换小说 | 大乳一级一区二区三区 | 婷婷久久综合九色综合九七 | 99久久久无码国产精品 |