中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Dockerfile Maven 插件的使用方法

發布時間:2021-07-27 23:52:24 來源:億速云 閱讀:1296 作者:chen 欄目:云計算

本篇內容介紹了“Dockerfile Maven 插件的使用方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Dockerfile Maven 插件使用

這是一個將Docker與Maven無縫集成的Maven插件,可以方便地使用Maven打包Docker image(注意:原來的項目docker-maven-plugin  已經不建議使用)。

設計目標:

  • 不要試圖做任何事情。 這個插件使用Dockerfiles構建Docker項目的而且是強制性的。

  • 將Docker構建過程集成到Maven構建過程中。如果綁定默認phases,那么當你鍵入mvn package時,你會得到一個Docker鏡像。 當你鍵入mvn deploy時,你的圖像被push。

  • 讓goals記住你在做什么。 你可以輸入 mvn dockerfile:build及后面的 mvn dockerfile:buildmvn dockerfile:push 都沒有問題。這也消除了之前像 mvn dockerfile:build -DalsoPush這樣的命令;相反,你可以只使用 mvn dockerfile:build dockerfile:push

  • 與Maven build reactor集成。你可以在一個項目中依賴另一個項目所構建的Docker image,Maven將按照正確的順序構建項目。當你想要運行涉及多個服務的集成測試時,這非常有用。

該項目遵守 Open Code of Conduct.。 參與貢獻代碼,你需要遵守此代碼規則。

查看更新日志以獲取發布列表

Set-up

該插件需要Java 7或更高版本以及Apache Maven 3或更高版本。要運行集成測試或在開發中使用該插件,需要有一個能正常工作的Docker。

例子

有關更多示例,請參閱集成測試目錄。

特別是,高級測試展示了由兩個微服務組成的一套服務,這些服務使用helios-testing進行集成測試。

這將配置插件以使用 mvn package構建映像,并使用 mvn deploy進行推送。 當然你也可以用 mvn dockerfile:build顯式構建。

<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>dockerfile-maven-plugin</artifactId>
  <version>${dockerfile-maven-version}</version>
  <executions>
    <execution>
      <id>default</id>
      <goals>
        <goal>build</goal>
        <goal>push</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <repository>spotify/foobar</repository>
    <tag>${project.version}</tag>
    <buildArgs>
      <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
    </buildArgs>
  </configuration>
</plugin>

相應的Dockerfile可能如下所示

FROM openjdk:8-jre
MAINTAINER David Flemstr?m <dflemstr@spotify.com>

ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/myservice.jar"]

# Add Maven dependencies (not shaded into the artifact; Docker-cached)
ADD target/lib           /usr/share/myservice/lib
# Add the service itself
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/myservice.jar

優點

使用這個插件進行項目構建有很多優點。

更快的構建時間

這個插件讓你更好地利用Docker緩存,通過讓你在你的image中緩存Maven依賴關系,極大地加速你的構建。 它還鼓勵避免 maven-shade-plugin,這也大大加快了構建速度。

一致的構建生命周期

你不再需要像下面這樣了:

mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy

用下面這一行命令就可以了:

mvn deploy

通過基本配置,這將確保image在正確的時間被構建和push。

依賴其他服務的Docker鏡像

你可以依賴另一個項目的Docker信息,因為此插件會在構建Docker鏡像時附加項目元數據。 只需將這些信息添加到任何項目中:

<dependency>
  <groupId>com.spotify</groupId>
  <artifactId>foobar</artifactId>
  <version>1.0-SNAPSHOT</version>
  <type>docker-info</type>
</dependency>

現在,你可以讀取有關你依賴的項目的Docker鏡像的信息:

String imageName = getResource("META-INF/docker/com.spotify/foobar/image-name");

這對于需要另一個項目最新版本的Docker鏡像的集成測試非常有用。

請注意,你必須在POM(或父POM)中注冊Maven extension,才能支持docker-info類型:

<build>
  <extensions>
    <extension>
      <groupId>com.spotify</groupId>
      <artifactId>dockerfile-maven-extension</artifactId>
      <version>${version}</version>
    </extension>
  </extensions>
</build>

使用其他依賴Dockerfiles的Docker工具

你的項目如下所示:

a/
  Dockerfile
  pom.xml
b/
  Dockerfile
  pom.xml

你現在可以使用Fig或docker-compose或其他一些與Dockerfiles配合使用的系統來使用這些項目。 例如,一個docker-compose.yml 可能如下所示:

service-a:
  build: a/
  ports:
  - '80'

service-b:
  build: b/
  links:
  - service-a

現在, docker-compose updocker-compose build 將按預期工作。

身份驗證和私有Docker注冊中心支持

從版本1.3.0開始,當你pulling, pushing, 或 building images 到private registries中時插件將自動使用 ~/.dockercfg~/.docker/config.json文件中的配置。

此外,如果插件能夠成功加載Google的“應用程序默認憑證”,該插件將支持Google Container Registry。 如果已定義,該插件還將從環境變量DOCKER_GOOGLE_CREDENTIALS 指向的文件中加載Google憑據。 由于GCR認證需要為給定憑證檢索短期訪問代碼,因此對此注冊表的支持將被融入到基礎的docker-client中,而不必在運行插件之前配置docker配置文件。

GCR用戶可能需要通過gcloud初始化他們的應用程序默認憑證。 根據插件的運行位置,他們可能希望通過運行以下命令來使用他們的Google identity 。

gcloud auth application-default login

或者改為創建一個service帳戶。

使用maven settings.xml進行身份驗證

從版本1.3.6開始,你可以使用maven的 settings.xml文件進行身份驗證,而不是使用docker配置。 只需添加類似于以下配置:

<configuration>
  <repository>docker-repo.example.com:8080/organization/image</repository>
  <tag>latest</tag>
  <useMavenSettingsForAuth>true</useMavenSettingsForAuth>
</configuration>

你也可以在命令行上使用 -Ddockerfile.useMavenSettingsForAuth=true

然后,在你的maven設置文件中,為服務器添加配置:

<servers>
  <server>
    <id>docker-repo.example.com:8080</id>
    <username>me</username>
    <password>mypassword</password>
  </server>
</servers>

與其他服務器配置完全相同。

使用maven pom.xml進行身份驗證

從版本1.3.XX開始,你可以使用pom本身的配置進行身份驗證。 只需添加類似于以下配置(經測試,在1.4.0版本中向私有倉庫push時會報錯 denied: requested access to the resource is denied,所以建議使用maven settings.xml進行身份驗證):

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>${version}</version>
    <configuration>
        <username>repoUserName</username>
        <password>repoPassword</password>
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>

或更簡單,

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>dockerfile-maven-plugin</artifactId>
    <version>${version}</version>
    <configuration>
        <repository>${docker.image.prefix}/${project.artifactId}</repository>
        <buildArgs>
            <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
        </buildArgs>
    </configuration>
</plugin>

用這個命令行調用:

mvn goal -Ddockerfile.username=... -Ddockerfile.password=...

Maven Goals

可用于此插件的Goals :

GoalDescriptionDefault Phase
dockerfile:build從Dockerfile構建Docker鏡像。package
dockerfile:tagTag Docker鏡像。package
dockerfile:push將Docker鏡像推送到repository。deploy

跳過Docker Goals 綁定到Maven phase

你可以將選項傳遞給maven以禁用 docker goals。

Maven OptionWhat Does that thing Do?
dockerfile.skipDisables the entire dockerfile plugin; all goals become no-ops.
dockerfile.build.skipDisables the build goal; it becomes a no-op.
dockerfile.tag.skipDisables the tag goal; it becomes a no-op.
dockerfile.push.skipDisables the push goal; it becomes a no-op.

例如,跳過整個dockerfile插件:

mvn clean package -Ddockerfile.skip

“Dockerfile Maven 插件的使用方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德钦县| 绥滨县| 罗定市| 全州县| 贞丰县| 繁昌县| 晋城| 靖边县| 汉川市| 临漳县| 贞丰县| 博野县| 兴国县| 雷山县| 林口县| 阜阳市| 如皋市| 保康县| 宁津县| 上林县| 廉江市| 乐山市| 丹巴县| 灵川县| 多伦县| 满洲里市| 宁化县| 章丘市| 长子县| 青铜峡市| 都江堰市| 宁陵县| 无棣县| 长兴县| 贵德县| 界首市| 黔西| 延津县| 桐梓县| 高平市| 清河县|