개요, 순서
- Docker 를 사용하여 SpringBoot 의 Fat.jar 를 Docker Image 로 빌딩하는 작업을 기술한다.
- 첫번째로 Target Project 를 Gradle 로 build 시킨다.
- 이후 Docker Image 빌딩에 필수 파일인 Dockerfile을 정의한다.
- Target Project 의 Root 로 가서 docker 를 이용해 이미지로 빌딩한다.
- Docker 엔진 내부의 이미지들 중 해당 이름의 이미지가 있는지 확인한다.
- 서비스를 시작해보고 테스트하고 로그를 확인해본다.
Docker File
- FROM : 해당 이미지를 사용하여 빌드하겠다.
- EXPOSE : 다른 컨테이너 해당 포트를 노출시키겠다.
- ADD : 해당경로의 파일을 도커 이미지에 추가시키겠다.
- ENTRYPOINT : 이미지 실행시 해당 커멘드를 실행시키겠다. ( java -jar /app.jar)
#Dockerfile
FROM openjdk:12.0.2
EXPOSE 8080
ADD ./build/libs/*.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Gradle Build => Fat.jar
- Fat.jar 를 만들기위해 절대경로 기준으로 Target Project 를 Gradle 빌드시켰다.
C:\Users\JungSooMin\IdeaProjects\basic-rest-service>gradlew :microservices:product-service:build
Docker Build => Docker Image
- Dockerfile 을 이용하여 Docker 로 빌드한다. (공백+. 빼먹으면 안된다.)
- 기술한 product-service 는 Docker Image 이름이다.
docker build -t product-service .
Docker Local Engine 안에 Docker Image 가 있는지 확인
- docker images 키워드로 docker image 목록들을 가져올 수 있다.
- window 라면 findstr 로 꺼내온다.
#images 키워드로 목록을 가져와 findstr 로 끄집어낸다.
docker images | findstr product-service
product-service latest 3091063d5540 15 minutes ago 498MB
Docker Image 를 이용해 도커 컨테이너에서 Fat.jar 실행하기
- -e 로 컨테이너 환경변수를 Spring Profile 에 맞게 설정해준다.
- -p 로 포트 바인딩을 한다.
docker run --rm -p8080:8080 -e "SPRING_PROFILES_ACTIVE=docker" product-service
- 주의 깊게 봐야할 점은 serviceAddress 데이터 항목이다.
- 호출된 서버의 호스트명, 아이피명, 포트명을 찍을 수 있게 해놓은 상태이다.
- 도커 컨테이너 ID / 도커내부 네트워크 할당 IP / 포트 순이다.
- 즉, 도커 컨테이너의 ID 와 호스트 이름은 동일하다는 결론이 난다.
curl http://localhost:8080/product/3
도커 컨테이너를 백그라운드로 실행시켜놓고 로그를 확인하는 법
- 일반적으로 그냥 실행하면 해당 터미널은 잠금 상태가 된다.
- 백그라운드에서 실행하기 위해서는 -d 키워드를 사용한다.
- 해당 컨테이너의 로그를 보고 싶다면 docker logs [name] 키워드를 사용한다.
- -f 키워드로 지속적으로 로그를 볼 수 있다.
- docker logs [name] 키워드에 --tail 0 로 새로운 로그만 볼 수있다.
- docker logs [name] 키워드에 --since [timeStamp] 로 지난 로그들을 볼 수 있다.
# -d 는 detach, --name 으로 컨테이너 이름 지정
docker run -d -p8080:8080 -e "SPRING_PROFILES_ACTIVE=docker" --name my-prd-srv product-service
292c55d37ae02f755a22ef8f0eb5262523f453fe2585ab70936a90c1385e9e87
# 컨테이너에 이름이 생겼다.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
292c55d37ae0 product-service "java -jar /app.jar" 4 minutes ago Up 4 minutes 0.0.0.0:8080->8080/tcp my-prd-srv
# docker logs [name] 으로 로깅 화면으로 진입, -f 키워드로 지속적으로 커멘드를 띄운다.
docker logs my-prd-srv -f
# 새로운 로그들 부터 보고 싶다.
docker logs [name] -f --tail 0
# 지난 로그들을 보고 싶다.
docker logs [name] --since 5m
마무리
- docker rm 으로 해당 컨테이너를 삭제하자.
- -f 키워드는 실행 중인 컨테이너를 중지하고 제거한다.
# -f 는 실행 중인 컨테이너를 제거하고 종료한다.
docker rm -f my-prd-srv
'Docker 작업' 카테고리의 다른 글
Docker Tool Box 윈도우 공유 폴더 마운트 (0) | 2021.01.24 |
---|---|
도커 툴박스 포트 포워딩 (0) | 2021.01.23 |
Docker Compose 를 이용한 Fat.jar 들의 실행 (0) | 2021.01.02 |
Docker 컨테이너의 JVM 할당량 확인해보기 (0) | 2021.01.01 |
Docker CPU 메모리 할당량, 최대 제한량 확인 (0) | 2021.01.01 |