[Docker Mac] Jib 로 이미지 올리기(image push)
💡 간단하게 작성한 Jib 라이브러리 사용법입니다.
▼ 목차
☘️ Jib란?
☘️ Jib 장점
☘️ Jib 사용방법
- 사전준비
- Jib 설정하기
- Jib 사용하기
☘️ 컨테이너 실행하기
▼ 개발환경
MacBook Pro M1
### Programming language - java-1.8
### Framework
- Spring Framework : SpringBoot 2.7.3
- Persistence Framework : JPA - Hibernate
### Build Tool
- gradle 7.5
### WAS
- 내장 Tomcat
### DB
- MySql - 8.0.30
### IDE
- IntelliJ IDEA (Ultimate Apple Silicon 2022-02)
### Library
- Lombok - 1.18.24
🌱 사전준비
📌 Docker 회원가입 https://hub.docker.com/
📌 Docker Desktop (Mac) 설치 https://tira-0.tistory.com/218
📌 도커 허브 레포지토리 (Docker Hub Repository) 만들기 https://tira-0.tistory.com/220
- IntelliJ 에 라이브러리를 추가하여 사용합니다.
- 기본 이미지를 alpine:3 또는 openjdk:VERSION 으로 설정하기 때문에 해당 버전에 맞는 자바 컨테이너를 실행합니다.
- ※ Mac 환경은 Openjdk를 권장합니다.
- Meven은 3.5 이상 이어야 합니다. (방법 안내는 gradle로 했습니다.)
☘️ Jib 란?
Jib 는 Dockerfile을 사용하지 않거나 Docker를 설치할 필요 없이 컨테이너를 빌드합니다.
Maven또는 Gradle 용 Jib 플러그인에서 Jib를 사용하거나 Jib 자바 라이브러리를 사용할 수 있습니다.
☘️ Jib의 장점
Jib를 사용하지 않고 도커 허브 레파지토리에 이미지를 업로드 하려면
1.도커파일 작성하기
2.프로젝트 build
3.도커 이미지 만들기
4.도커 허브 레파지토리로 컨테이너 이미지 업로드
과정을 거쳐야 합니다.
Jib는 애플리케이션을 컨테이너 이미지로 패키징하는 모든 단계를 처리합니다.
Dockerfile을 만들거나 Docker를 설치하기 위한 권장사항을 알 필요가 없습니다.
Docker 빌드 흐름:
Jib 빌드 흐름:
Jib 설정 후 프로젝트에서 ./gradlew jib을 통해 빌드와 동시에 컨테이너로 빌드를 시켜줍니다.
$ cd ~/프로젝트 Dir로 이동
$ ./gradlew jib
☘️ Jib 설정하기
📌 jib 플러그인 추가하기
plugins {
id 'com.google.cloud.tools.jib' version '3.3.0'
}
📌 jib 설정하기
// jib 시작
jib {
from {
image = "azul/zulu-openjdk:8"
platforms {
platform {
architecture = "arm64"
os = "linux"
}
}
}
to {
image = 'docker.io/shmyth4/myliket3:0.0.1-SNAPSHOT'
}
container {
mainClass = "com.myliket.myliket3.Myliket3Application"
jvmFlags = ['-Dspring.profiles.active=docker', '-XX:+UseContainerSupport', '-Dserver.port=8080', '-Dfile.encoding=UTF-8']
ports = ['8085']
}
}
// jib 끝
from
from {
image = "azul/zulu-openjdk:8"
platforms {
platform {
architecture = "arm64"
os = "linux"
}
}
}
from은 컨테이너의 이미지를 넣고 플랫폼 정보(intel인지, m1인지 같은)를 넣을때 사용되는 구문입니다.
위의 from구문에서 사용되는 키워드들은 다음과 같습니다.
- image → 베이스로 할 컨테이너 이미지를 지정합니다. 위에서는 java 17을 사용하기 때문에 amazoncorretto jdk 17을 사용했습니다.
- platforms → 해당 이미지가 어떤 플랫폼으로 돌아가는지 지정합니다.
- archtecture → 어떤 아키텍처인지 지정합니다.
- os → 실행되는 OS를 지정합니다.
to
to {
image = 'docker.io/<도커아이디>/<image 이름=레포지토리명>:<tag>'
}
to의 주요 역할로는 image의 이름과 tag를 지정할 수 있습니다. 이를 통해 컨테이너 빌드를 완료한 이미지를 자기가 원하는 형태로 관리할 수 있습니다.
- image → 생성된 컨테이너 이미지의 이름을 지정합니다.(레포지 이름이 같아야 합니다.)
- tag → 생성된 컨테이너의 태그를 지정합니다.
container
container {
mainClass = "com.myliket.myliket3.Myliket3Application"
jvmFlags = ['-Dspring.profiles.active=docker', '-XX:+UseContainerSupport', '-Dserver.port=8080', '-Dfile.encoding=UTF-8']
ports = ['8085']
}
contrainer는 이미지가 컨테이너화 되어 실행될 때 필요한 자바 애플리케이션의 실행을 지정할 수 있습니다.
- mainClass : 메인 클래스를 지정합니다.
- jvmFlags
- -Dspring.profiles.active=docker : 도커 환경으로 프로필을 지정했습니다.
- '-Dserver.port=8080' : 서버 포트번호는 8080 입니다.
- ports = ['8085'] : 컨테이너 포트번호 입니다.
☘️ Jib 실행하기
명령어로 실행하는 방법과 IntelliJ의 기능으로 실행하는 방법이 있습니다.
📌 Jib 명령어로 실행하기
# 프로젝트로 이동
cd ~/Desktop/NGHS/springbootworkspace/myliket3
# 프로젝트 빌드, 이미지 빌드, 도커 허브 레파지토리로 컨테이너 이미지 push
$ ./gradlew jib
[실행 화면]
도커허브 레포지토리에 이미지가 업로드된 걸 확인할 수 있습니다.
📌 Jib - IntelliJ에서 사용하기
우측 Gradle >jib>jib 를 클릭 합니다.
[실행화면]
IntelliJ 하단 가운데 Service > Docker > Docker Registry 내 이미지가 업로드 된 걸 확인 하실 수 있습니다.
참고
https://cloud.google.com/java/getting-started/jib?hl=ko
☘️ 컨테이너 실행 및 테스트
제 프로젝트 기준 실행 순서는 아래 링크를 참고해주세요.
💡 Jib로 이미지 빌드하여 도커 서비스 배포하기( jar 파일) https://tira-0.tistory.com/224
📌 컨테이너 실행 명령어
$ docker run -d -p8085:8080 --name <컨테이너 이름> <도커 아이디>/<프로젝트명>:<태그>
❯ docker run -d -p8085:8080 --name myliket3.5 ****/myliket3:0.0.2-SNAPSHOT
Unable to find image '****/myliket3:0.0.2-SNAPSHOT' locally
0.0.2-SNAPSHOT: Pulling from ****/myliket3
7a9f619ee5e9: Already exists
420a8fd0b7f1: Already exists
8dc986866ff8: Already exists
dae9ef25f401: Pull complete
98e6571df888: Pull complete
dce784c1a651: Pull complete
Digest: sha256:246c3e31ee83d04ee6f730c3205b2c38a6fb55c26ce81541de3fbeef125889a1
Status: Downloaded newer image for ****/myliket3:0.0.2-SNAPSHOT
52f459b349ee34f737f6c25db49a2c0f2ccefc638ec2e52f19fb2fccf368738b
DockerDesktop에서 확인 하거나 docker ps 명령어로 컨테이너 실행여부를 확인 할 수 있습니다.
📌 자체 테스트
- 포스트맨으로 등록 테스트를 했습니다.
[ Wed Url 조회]