1 분 소요

Dockerfile을 이용해 user-service라는 마이크로 서비스의 이미지 파일을 생성해보자.

https://hub.docker.com

방법

Dockerfile

FROM openjdk:8-jdk-alpine

VOLUME /tmp

COPY target/users-ws-0.1.jar users-service.jar

ENTRYPOINT ["java",
"-Djava.security.egd=file:/dev/./urandom",
"-jar",
"users-service.jar"]
  • FROM openjdk:8-jdk-alpine
    - 베이스를 8-jdk-alpine 로 한다.
  • VOLUME /tmp
    도커 엔진이 가지고 있는 가상의 디렉토리하고, 컨테이너 안의 tmp라는 폴더를 만들어서 볼륨을 마운트한다.
  • COPY target/users-ws-0.1.jar users-service.jar
    - target/users-ws-0.1.jar 파일을, 컨테이너 내부의 users-service.jar 파일로 복사한다.

빌드 후 도커 허브에 업로드

# 빌드
$ docker build -t edowon0623/users-service:1.0  .  

# 도커 허브에 업로드
$ docker push edowon0623/user-service:1.0

# 이미지 다운로드
$ docker pull edowon0623/user-service:1.0

user-service

이제 위 내용을 실제 프로젝트에서 진행해보자.

Dockerfile

FROM openjdk:17-ea-11-jdk-slim

VOLUME /tmp

COPY target/user-service-0.0.1-SNAPSHOT.jar UserService.jar

ENTRYPOINT ["java","-jar","UserService.jar"]

빌드 후 도커 허브에 업로드

인텔리제이 터미널을 사용해도 되고, iTerm을 사용해도 된다.

# 최신 버전으로 컴파일
$ mvn clean compile package -DskipTests=true 
# clean은 기존 파일을 지운다.
# package 옵션으로 jar 파일까지 생성할 수 있다.
# 테스트 코드는 skip

# 이미지 파일 빌드
$ docker build -t ln8847/user-service:1.0  .  

# 생성된 이미지 확인
$ docker images | grep user-service

# 도커 허브에 업로드
$ docker push ln8847/user-service:1.0

# 이미지 삭제
$ docker rmi [이미지 ID]

# 이미지 다운로드
$ docker pull ln8847/user-service:1.0

컴파일 후에 user-service-0.0.1-SNAPSHT.jar 파일이 생성되었다.
스크린샷 2022-10-17 오전 2 11 36

그리고 docker images 커맨드로 생성된 이미지를 확인해보자.
스크린샷 2022-10-17 오전 2 18 01

그리고 docker push ln8847/user-service:1.0 커맨드로 이미지를 푸시한 뒤에, 도커 허브에 접속해보면 아래와 같이 확인할 수 있다. 스크린샷 2022-10-17 오전 2 20 07

이제 방금 도커 허브에 올린 이미지를 내려받아보자.
그러기 위해 기존 이미지를 삭제한 뒤에 진행하자.
스크린샷 2022-10-17 오전 2 24 10
성공적으로 받아왔다!

docker run -d ln8847/user-service:1.0 커맨드로 컨테이너를 생성하고 실행할 수 있지만, 지금 하게되면 에러가 발생할 것이다.
이는 user-service를 기동하는데 필요한 다른 서비스들이 지금은 없기 때문이다.

다음 글에서 user-service를 제외한 다른 마이크로서비스들도 도커 이미지로 만들고,
해당 서비스들을 기동하는데 필요한 kafka, zipkin, rabbitmq, prometheus 등의 서비스들도 도커로 기동해볼 것이다.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기