Maven 플러그 인 docker-maven-plugin 사용
15131 단어 docker-maven-plugin쓰다
우리 가 지속 적 으로 통합 하 는 과정 에서 프로젝트 공 사 는 보통 Maven 컴 파일 포장 을 사용 한 다음 에 미 러 를 생 성 한다.미 러 를 통 해 온라인 에 접속 하면 온라인 효율 을 크게 제공 할 수 있 고 빠 른 동적 확장 과 빠 른 스크롤 백 을 할 수 있어 서 정말 편리 하 다.docker-maven-plugin 플러그 인 은 Maven 프로젝트 에서 간단 한 설정 을 통 해 미 러 를 자동 으로 생 성하 고 창고 로 보 내 는 것 을 돕 기 위해 서 입 니 다.
2.환경,소프트웨어 준비
이번 프레젠테이션 환경 에서 저 는 이 컴퓨터 Mac OX 에서 작 동 합 니 다.다음은 설 치 된 소프트웨어 와 버 전 입 니 다.
3.데모 예시
3.1 DOCKER 설정HOST
docker-maven-plugin 플러그 인 은 로 컬 Docker 주 소 를 기본 으로 연결 합 니 다.localhost:2375 이 므 로 환경 변 수 를 설정 해 야 합 니 다.
DOCKER_HOST=tcp://<host>:2375
메모:DOCKER 가 설정 되 어 있 지 않 으 면HOST 환경 변수,명령 행 에 지정 한 DOCKER 를 표시 할 수 있 습 니 다.HOST 가 실행 합 니 다.이 컴퓨터 가 지정 한 DOCKER 와 같 습 니 다.HOST:DOCKER_HOST=unix:///var/run/docker.sock mvn clean install docker:build。3.2 예시 로 미 러 구축
미 러 구축 은 두 가지 방식 을 사용 할 수 있 습 니 다.첫 번 째 는 구축 정 보 를 POM 에 지정 하 는 것 이 고 두 번 째 는 존재 하 는 Dockerfile 로 구축 하 는 것 입 니 다.
첫 번 째 방식 은 FROM,ENTRYPOINT,CMD,MAINTAINER 및 ADD 정 보 를 POM 에 설정 하 는 것 을 지원 하 며 Dockerfile 설정 을 사용 하지 않 아 도 됩 니 다.단,VOLUME 나 다른 Dockerfile 의 명령 을 사용 할 때 두 번 째 방식 으로 Dockerfile 을 만 들 고 POM 에 dockerDirectory 를 설정 하여 경 로 를 지정 하면 됩 니 다.
자바 Maven 프로젝트 mavendemo 를 예 로 들 어 보 여 드 리 겠 습 니 다.
3.2.1 구축 정 보 를 POM 에 구축 하도록 지정
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>mavendemo</imageName>
<baseImage>java</baseImage>
<maintainer>docker_maven [email protected]</maintainer>
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!-- jar docker -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
3.2.2 Dockerfile 로 구축pom.xml 설정
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>mavendemo</imageName>
<dockerDirectory>${basedir}/docker</dockerDirectory> <!-- Dockerfile -->
<!-- jar docker , Docokerfile -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
${basedir}/docker/dockerfile 설정
FROM java
MAINTAINER docker_maven [email protected]
WORKDIR /ROOT
CMD ["java", "-version"]
ENTRYPOINT ["java", "-jar", "${project.build.finalName}.jar"]
상기 두 가지 방식 으로 docker:build 효 과 를 실행 합 니 다.출력 과정 은 대체적으로 다음 과 같 습 니 다.
[INFO] --- docker-maven-plugin:1.0.0:build (default-cli) @ mavenDemo ---
[INFO] Building image mavendemo
Step 1/5 : FROM java
---> d23bdf5b1b1b
Step 2/5 : MAINTAINER docker_maven [email protected]
---> Using cache
---> 2faf180d4a50
Step 3/5 : WORKDIR /ROOT
---> Using cache
---> 862210f7956a
Step 4/5 : ENTRYPOINT java -jar mavenDemo.jar
---> Running in 96bbe83de6ec
---> c29009c88993
Removing intermediate container 96bbe83de6ec
Step 5/5 : CMD java -version
---> Running in f69b8d2a75b1
---> bc8d54014325
Removing intermediate container f69b8d2a75b1
Successfully built bc8d54014325
실행 이 완료 되면 docker images 를 사용 하여 생 성 된 미 러 를 봅 니 다:
REPOSITORY TAG IMAGE ID CREATED SIZE
mavendemo latest 333b429536b2 38 minutes ago 643 MB
3.3 명령 을 집행 한다mvn clean package docker:build
build 작업 만 수행 합 니 다.mvn clean package docker:build -DpushImage
빌 드 완료 후 push 미 러 실행화면 음악 n clean package docker:build-DushImageTag build 실행 및 push 지정 tag 의 미 러
메모:최소한 하나의 imageTag 를 지정 해 야 합 니 다.POM 에 설정 할 수도 있 고 명령 행 에 지정 할 수도 있 습 니 다.명령 행 지정 은 다음 과 같 습 니 다:
mvn clean package docker:build -DpushImageTags -DdockerImageTags=imageTag_1 -DdockerImageTags=imageTag_2
,POM 파일 에서 지정 한 설정 은 다음 과 같 습 니 다:
<build>
<plugins>
...
<plugin>
<configuration>
...
<imageTags>
<imageTag>imageTag_1</imageTag>
<imageTag>imageTag_2</imageTag>
</imageTags>
</configuration>
</plugin>
...
</plugins>
</build>
3.4 Docker 명령 을 Maven 각 단계 로 귀속우 리 는 Docker 명령 을 Maven 각 단계 에 연결 할 수 있 습 니 다.우 리 는 Docker 를 build,tag,push 로 나 눈 다음 에 Maven 의 package,deploy 단 계 를 각각 연결 할 수 있 습 니 다.이때 우 리 는 mvn deploy 만 실행 하면 전체 build,tag,push 작업 을 완성 할 수 있 습 니 다.mvn build 를 실행 하면 build,tag 작업 만 완성 할 수 있 습 니 다.그 밖 에 우리 가 특정한 절 차 를 뛰 어 넘 거나 특정한 절차 만 수행 하려 고 할 때 POM 파일 을 수정 할 필요 가 없고 docker 의 특정한 절 차 를 뛰 어 넘 으 면 됩 니 다.예 를 들 어 우리 프로젝트 에 자동화 템 플 릿 이 설정 되 어 있 지만 이번 에는 로 컬 에서 자체 측정 만 하면 push 단 계 를 실행 하고 싶 지 않 습 니 다.그러면 이 때 지정 한 매개 변수-DskipDockerPush 를 실행 하면 push 작업 을 건 너 뛸 수 있 습 니 다.
<build>
<plugins>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>mavendemo</imageName>
<baseImage>java</baseImage>
<maintainer>docker_maven [email protected]</maintainer>
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
<execution>
<id>tag-image</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<image>mavendemo:latest</image>
<newName>docker.io/wanyang3/mavendemo:${project.version}</newName>
</configuration>
</execution>
<execution>
<id>push-image</id>
<phase>deploy</phase>
<goals>
<goal>push</goal>
</goals>
<configuration>
<imageName>docker.io/wanyang3/mavendemo:${project.version}</imageName>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
상기 예시 에서,우리 가 mvn 패 키 지 를 실행 할 때,build,tag 작업 을 실행 하고,mvn deploy 를 실행 할 때,build,tag,push 작업 을 실행 합 니 다.만약 우리 가 docker 의 어떤 과정 을 뛰 어 넘 으 려 면:3.5 개인 Docker 창고 주소 사용
실제 작업 환경 에서 저 희 는 push 미 러 를 개인 Docker 창고 에 넣 어야 합 니 다.d ocker-maven-plugin 플러그 인 을 사용 하면 저희 도 쉽게 실현 할 수 있 습 니 다.몇 가지 방식 으로 이 루어 집 니 다.
1.POM 파일 imageName 작업 수정
...
<configuration>
<imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName>
...
</configuration>
...
2.POM 파일 의 new Name 동작 수정
...
<configuration>
<imageName>mavendemo</imageName>
...
</configuration>
<execution>
<id>tag-image</id>
<phase>package</phase>
<goals>
<goal>tag</goal>
</goals>
<configuration>
<image>mavendemo</image>
<newName>registry.example.com/wanyang3/mavendemo:v1.0.0</newName>
</configuration>
</execution>
...
3.6 안전 인증 설정Google push 미 러 가 Docker 창고 에 있 을 때 공유 든 개인 이 든 항상 안전 인증 이 필요 합 니 다.로그 인 이 완료 되 어야 작업 을 할 수 있 습 니 다.물론 명령 행 docker login-u username -p password docker_registry_host 로그 인,하지만 자동화 프로 세 스에 있어 서 는 그다지 편리 하지 않 습 니 다.docker-maven-plugin 플러그 인 을 사용 하면 안전 인증 을 쉽게 실현 할 수 있 습 니 다.
먼저 Maven 의 프로필 setting.xml 에 관련 server 설정 을 추가 하고 Docker registry 사용자 인증 정 보 를 설정 합 니 다.
<servers>
<server>
<id>my-docker-registry</id>
<username>wanyang3</username>
<password>12345678</password>
<configuration>
<email>[email protected]</email>
</configuration>
</server>
</servers>
그리고 pom.xml 에서 server id 를 사용 하면 됩 니 다.
<plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>registry.example.com/wanyang3/mavendemo:v1.0.0</imageName>
...
<serverId>my-docker-registry</serverId>
</configuration>
</plugin>
</plugins>
3.7 기타 매개 변수docker-maven-plugin 플러그 인 은 실 용적 인 설정 도 많이 제공 합 니 다.몇 개의 인 자 를 살짝 열거 하 세 요.
매개 변수
설명 하 다.
기본 값
<forceTags>true</forceTags>
build 시 tag 를 강제로 덮어 쓰 고 imageTags 에 맞 춰 사용 합 니 다.false
<noCache>true</noCache>
build 시 지정 한 Cno-cache 는 캐 시 를 사용 하지 않 습 니 다.false
<pullOnBuild>true</pullOnBuild>
build 시,Cpull=true 를 지정 할 때마다 기본 미 러 를 다시 끌 어 옵 니 다.false
<pushImage>true</pushImage>
build 완료 후 push 미 러false
<pushImageTag>true</pushImageTag>
build 완료 후 push 지정 tag 의 미 러 를 imageTags 에 맞 춰 사용 합 니 다.false
<retryPushCount>5</retryPushCount>
push 미 러 실패,재 시도 횟수5
<retryPushTimeout>10</retryPushTimeout>
push 미 러 실패,재 시도 시간10s
<rm>true</rm>
build 시 지정 한 Crm=true 즉 build 완료 후 중간 용기 삭제false
<useGitCommitId>true</useGitCommitId>
build 시 최근 git commit id 7 위 를 tag 로 사용 합 니 다.예 를 들 어 image:b50b 604 는 new Name 을 설정 하지 않 는 것 이 전제 입 니 다.false
4、FAQ
1.build images 를 실행 할 때 오류 보고 1:
[INFO] Building image mavendemo
org.apache.http.impl.execchain.RetryExec execute
I/O exception (java.io.IOException) caught when processing request to {}->unix://localhost:80: No such file or directory
[ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project mavenDemo: Exception caught: java.util.concurrent.ExecutionException: com.spotify.docker.client.shaded.javax.ws.rs.ProcessingException: java.io.IOException: No such file or directory -> [Help 1]
이것 은 Docker 서비스 가 시작 되 지 않 아서 생 긴 것 입 니 다.Docker 를 시작 하면 됩 니 다.
2.build images 를 실행 할 때 오류 보고 2:
ERROR] Failed to execute goal com.spotify:docker-maven-plugin:1.0.0:build (default-cli) on project mavenDemo: Exception caught: Request error: POST unix://localhost:80/build?t=mavenDemo: 500, body: {"message":"Error parsing reference: \"mavenDemo\" is not a valid repository/tag: repository name must be lowercase"}: HTTP 500 Internal Server Error -> [Help 1]
이것 은 미 러 이름 이 정확 하지 않 기 때문에 Docker 미 러 이름 이[a-z0-9-.]와 일치 해 야 합 니 다.
참고 자료
docker-maven-plugin
Maven 플러그 인 docker-maven-plugin 의 사용 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 docker-maven-plugin 의 사용 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 각종 excel 쓰기 방식의 속도 대비실험을 통해 새 excel 표를 만들었습니다. 이 표는 7개의sheet를 가지고 있으며, 각각sheet에는 800개의 데이터가 있으며, 그 중 마지막 sheet는 비어 있습니다. 먼저 openpyxl을 사용하여 쓰기...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.