본문 바로가기
카테고리 없음

Jib을 이용한 자바 컨테이너 빌드

by ^..^v 2022. 3. 23.
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
반응형

댓글