728x90
반응형
Jib
https://github.com/GoogleContainerTools/jib
https://cloud.google.com/java/getting-started/jib
자바 애플리케이션을 간편하게 컨테이너화할 수 있도록 돕는 오픈 소스 기반 도구
도커 설치, 도커 데몬 실행, 도커파일 작성 없이 Maven이나 Gradle에서 빌드하면 컨테이너 환경에 최적화된 자바 애플리케이션을 생성
Docker 빌드 흐름
Jib 빌드 흐름
Maven 프로젝트
Spring Starter Project 생성
Controller 추가
SpringbootToDockerApplication.java 파일에 / 경로로 요청이 들어오면 200 OK 상태 코드와 함께 Hello, Springboot to Docker!!!를 msg의 값으로 반환하는 컨트롤러 메서드를 추가
package com.myapp.demo;
import java.util.HashMap;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class SprintbootToDockerApplication {
public static void main(String[] args) {
SpringApplication.run(SprintbootToDockerApplication.class, args);
}
@GetMapping("/")
public ResponseEntity<HashMap<String, String>> index() {
HashMap<String, String> msg = new HashMap<String, String>();
msg.put("msg", "Hello, Springboot to Docker!!!");
return ResponseEntity.status(HttpStatus.OK).body(msg);
}
}
어플리케이션 실행 및 동작 확인
pom.xml 파일에 플러그인 추가
https://mvnrepository.com/artifact/com.google.cloud.tools/jib-maven-plugin/3.1.4
… (생략) …
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.1.4</version>
<configuration>
<!-- /////////////////////////////////////////////////////////////////////////////
// 웹 애플리케이션 서버로 Jetty가 설정되어 있으나,
// Tomcat으로 변경할 경우 이미지와 웹 루트 디렉터리를 지정해줘야 함
/////////////////////////////////////////////////////////////////////////////
<from>
<image>tomcat:8.5-jre8-alpine</image>
</from>
<container>
<appRoot>/usr/local/tomcat/webapps/my-webapp</appRoot>
</container>
-->
<to>
<!-- "레지스트리이름(도커허브계정)/이미지이름:태그이름" 형식으로 이미지 이름을 지정 -->
<image>myanjini/sprintboot-to-docker:v1.0</image>
</to>
</configuration>
</plugin>
</plugins>
</build>
… (생략) …
도커 로그인을 통해 크리덴셜 생성
도커 허브에 컨테이너 이미지를 등록할 수 있도록 docker login 명령으로 크리덴셜을 생성 (생성된 크리덴셜은 사용자 홈 디렉터리 > .docker > config.json 파일에 저장)
c:\java\springboot-app-docker> docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: myanjini ⇐ 도커 허브 계정
Password: DOCKERHUB_PASSWORD
Login Succeeded
Logging in with your password grants your terminal complete access to your account.
For better security, log in with a limited-privilege personal access token. Learn more at https://docs.docker.com/go/access-tokens/
이미지 빌드
Run Configurations...에서 Goals로 jib:build를 지정한 후 Run 버튼을 클릭
도커 허브 이미지 등록 확인
도커 컨테이너 실행
c:\java\springboot-app-docker> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
c:\java\springboot-app-docker> docker container run -d -p 9090:8080 myanjini/sprintboot-to-docker:v1.0
Unable to find image 'myanjini/sprintboot-to-docker:v1.0' locally
v1.0: Pulling from myanjini/sprintboot-to-docker
f3ef4ff62e0d: Pull complete
706b9b9c1c44: Pull complete
76205aac4d5a: Pull complete
1cd6d26cc427: Pull complete
c736dbcc8de7: Pull complete
807e40fe0fb2: Pull complete
92b0721cfc71: Pull complete
Digest: sha256:70151f70c5b161628b1007dc41a08df0aca6f684e92ceed5a45995440184435e
Status: Downloaded newer image for myanjini/sprintboot-to-docker:v1.0
23e2991a54ffaf53fa24c2c393fb04337bad7d284b0885ff3d70b9b274c2910e
c:\java\springboot-app-docker> docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
myanjini/sprintboot-to-docker v1.0 452cb7262df5 52 years ago 263MB
c:\java\springboot-app-docker> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
23e2991a54ff myanjini/sprintboot-to-docker:v1.0 "java -cp @/app/jib-…" 11 seconds ago Up 9 seconds 0.0.0.0:9090->8080/tcp cranky_engelbart
Gradle 프로젝트
Spring Starter Project 생성
Controller 추가, 어플리케이션 실행 및 동작 확인
Maven 프로젝트와 동일
build.gradle 파일에 플러그인 추가
plugins {
id 'org.springframework.boot' version '2.6.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id 'com.google.cloud.tools.jib' version '3.1.4'
}
… (생략) …
jib {
//WAS로 Tomcat을 사용하는 경우
//from.image = 'tomcat:8.5-jre8-alpine'
//container.appRoot = '/usr/local/tomcat/webapps/my-webapp'
to.image = 'myanjini/sprintboot-to-docker:v1.0'
}
이미지 빌드
Working Directory로 springboot-to-docker 프로젝트를 선택하고, jib 태스크를 추가 후 Run 버튼을 클릭
도커 허브 이미지 등록 및 도커 컨테이너 실행 확인
Maven 프로젝트와 동일
728x90
반응형
댓글