欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Maven Docker鏡像使用技巧

 更新時間:2018年06月04日 11:13:53   作者:ilinux_one  
這篇文章主要介紹了詳解Maven Docker鏡像使用技巧,Maven是目前最流行的Java項目管理工具之一,提供了強大的包依賴管理和應用構建功能。本文以Maven為例介紹了Docker在應用構建中的一些常見技巧。

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

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

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

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

使用阿里云加速

Maven官方倉庫在國內(nèi)網(wǎng)絡下的下載速度實在是讓人欲哭無淚,利用阿里云的Maven鏡像可以大大提升軟件包下載速度。

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

它的配置文件settings.xml如下

<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命令一樣,直接在當前目錄中執(zhí)行如下命令來構建應用

復制代碼 代碼如下:
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的文件卷來實現(xiàn)

首先執(zhí)行如下命令創(chuàng)建一個名為“maven-repo”的文件卷

docker volume create --name maven-repo

在之后的調(diào)用中,將其掛載到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倉庫就不會每次都下載一遍了。

優(yōu)化Dockerfile提升構建速度

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

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

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包,可以大大加快鏡像構建速度。

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

docker build -t builder-img -f Dockerfile.build .

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

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

  1. 最終生成的Docker鏡像不應該包含源代碼
  2. 最終生成的Docker鏡像應該最小化,不應該包含編譯時工具

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

docker build -t builder-img -f Dockerfile.build .
docker create --name builder builder-img
docker cp builder:/usr/src/app/target ./target

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

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

總結(jié)

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

  1. 利用國內(nèi)的鏡像站點加速軟件包下載:阿里云和阿里集團提供了大量開源項目的包管理鏡像站點,阿里云容器服務開源項目 https://github.com/AliyunContainerService 中提供很多帶加速能力的Ruby/Python/Node/Maven基礎鏡像可供參考。
  2. 在Docker鏡像構建過程中,為了防止由于代碼變化反復下載軟件包,可以先把應用配置文件加入Dockerfile,在編譯之前提前下載軟件包。比如Ruby的Gemfile, Python的requirements.txt,和NodeJs的package.json都可以采用類似方法。這樣可以更好地利用Docker的分層緩存機制加速鏡像構建過程。
  3. 應用編譯應該與Docker鏡像構建分離

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • java基礎-數(shù)組擴容詳解

    java基礎-數(shù)組擴容詳解

    這篇文章主要介紹了Java數(shù)組擴容實現(xiàn)方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-08-08
  • Component和Configuration注解區(qū)別實例詳解

    Component和Configuration注解區(qū)別實例詳解

    這篇文章主要為大家介紹了Component和Configuration注解區(qū)別實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • SpringBoot請求參數(shù)傳遞與接收說明小結(jié)

    SpringBoot請求參數(shù)傳遞與接收說明小結(jié)

    這篇文章主要介紹了SpringBoot請求參數(shù)傳遞與接收,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • Java網(wǎng)絡通信中URL與HTTP編程技術詳解

    Java網(wǎng)絡通信中URL與HTTP編程技術詳解

    要想實現(xiàn)網(wǎng)絡編程,除了可以使用Socket之外,我們還可以利用URL編程或HTTP編程技術,所以今天這篇文章,就給大家介紹一下URL編程和HTTP編程技術,看看這兩種技術有什么特點,文中有詳細的代碼講解,需要的朋友可以參考下
    2023-11-11
  • java 串口通信詳細及簡單實例

    java 串口通信詳細及簡單實例

    這篇文章主要介紹了java 串口通信詳細及簡單實例的相關資料,在開發(fā)硬件與軟件結(jié)合的時候,就會用到串口,需要的朋友可以參考下
    2017-01-01
  • MyBatis實現(xiàn)多表聯(lián)查的詳細代碼

    MyBatis實現(xiàn)多表聯(lián)查的詳細代碼

    這篇文章主要介紹了MyBatis如何實現(xiàn)多表聯(lián)查,通過實例代碼給大家介紹使用映射配置文件實現(xiàn)多表聯(lián)查,使用注解的方式實現(xiàn)多表聯(lián)查,需要的朋友可以參考下
    2022-08-08
  • java實習--每天打卡十道面試題!

    java實習--每天打卡十道面試題!

    臨近秋招,備戰(zhàn)暑期實習,祝大家每天進步億點點!本篇文章準備了十道java的常用面試題,希望能夠給大家提供幫助,最后祝大家面試成功,進入自己心儀的大廠
    2021-07-07
  • Mybatis 傳輸List的實現(xiàn)代碼

    Mybatis 傳輸List的實現(xiàn)代碼

    本文通過實例代碼給大家介紹了mybatis傳輸list的實現(xiàn)代碼,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-09-09
  • Java使用Redis及其優(yōu)化詳解

    Java使用Redis及其優(yōu)化詳解

    大家好,本篇文章主要分享的是Java使用Redis及其優(yōu)化詳解,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 淺析java并發(fā)中的Synchronized關鍵詞

    淺析java并發(fā)中的Synchronized關鍵詞

    這篇文章主要介紹了java并發(fā)中的Synchronized關鍵詞,本文通過思路代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02

最新評論