您好,登錄后才能下訂單哦!
本篇內容介紹了“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:build
和mvn dockerfile:push
都沒有問題。這也消除了之前像 mvn dockerfile:build -DalsoPush
這樣的命令;相反,你可以只使用 mvn dockerfile:build dockerfile:push
。
與Maven build reactor集成。你可以在一個項目中依賴另一個項目所構建的Docker image,Maven將按照正確的順序構建項目。當你想要運行涉及多個服務的集成測試時,這非常有用。
該項目遵守 Open Code of Conduct.。 參與貢獻代碼,你需要遵守此代碼規則。
查看更新日志以獲取發布列表
該插件需要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鏡像時附加項目元數據。 只需將這些信息添加到任何項目中:
<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>
你的項目如下所示:
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 up
和docker-compose build
將按預期工作。
從版本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帳戶。
從版本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>
與其他服務器配置完全相同。
從版本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=...
可用于此插件的Goals :
Goal | Description | Default Phase |
---|---|---|
dockerfile:build | 從Dockerfile構建Docker鏡像。 | package |
dockerfile:tag | Tag Docker鏡像。 | package |
dockerfile:push | 將Docker鏡像推送到repository。 | deploy |
你可以將選項傳遞給maven以禁用 docker goals。
Maven Option | What Does that thing Do? |
---|---|
dockerfile.skip | Disables the entire dockerfile plugin; all goals become no-ops. |
dockerfile.build.skip | Disables the build goal; it becomes a no-op. |
dockerfile.tag.skip | Disables the tag goal; it becomes a no-op. |
dockerfile.push.skip | Disables the push goal; it becomes a no-op. |
例如,跳過整個dockerfile插件:
mvn clean package -Ddockerfile.skip
“Dockerfile Maven 插件的使用方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。