Docker 작업

Docker Compose 를 이용한 Fat.jar 들의 실행

Jungsoomin :) 2021. 1. 2. 23:05

순서

  • 각 마이크로 서비스의 yaml 파일들은 docker 프로파일을 작성시켜놓는다.
  • 마이크로 서비스 루트 폴더 마다 Dockerfile 을 작성한다.
  • 최상위 루트 프로젝트에 docker-compose.yml 파일로 관리시킬 서비스를 기술한다.
  • Jar 파일로 각 서비스를 빌드 ( 최상위 폴더에서 공통 빌드 ) 시키고 docker-compose 로 빌드한다.

Application.yml 파일에 Spring Profile 기술

  • yaml 파일은 - - - 를 기술하면 하나의 yaml 파일에 여러개의 프로파일을 놓아둘 수 있다.
---
spring:
  profiles: docker

server:
  port: 8080

app:
  product-service:
    host: product
    port: 8080
  recommendation-service:
    host: recommendation
    port: 8080
  review-service:
    host: review
    port: 8080

 

 

각 서비스 마다 Dockerfile 을 기술하며 정리했던 Dockerfile 과 같은 openjdk:12.0.2 기반이다.

 

 


 

최상위 루트 프로젝트에 docker-compose.yml 파일 작성

  • 최상위 프로젝트에서 하위프로젝트까지 한번에 빌드시킨다.
  • services : 관리할 서비스.
  • product, recommendation... : 각 컨테이너의 호스트이름, 마이크로 서비스의 이름
  • build : Dockerfile 위치.
  • mem_limit : 컨테이너 메모리 제한
  • environment : 컨테이너 실행시 적용시킬 환경 변수
  • port : HOST 와 바인딩할 포트, port를 기술하지 않으면 외부에서 접근할 수 없다.
version: '2.1'

services:

  product:
    build: microservices/product-service
    mem_limit: 350m
    environment:
      - SPRING_PROFILES_ACTIVE=docker

  recommendation:
    build: microservices/recommendation-service
    mem_limit: 350m
    environment:
      - SPRING_PROFILES_ACTIVE=docker

  review:
    build: microservices/review-service
    mem_limit: 350m
    environment:
      - SPRING_PROFILES_ACTIVE=docker

  product-composite:
    build: microservices/product-composite-service
    mem_limit: 350m
    environment:
      - SPRING_PROFILES_ACTIVE=docker
    ports:
      - "8080:8080"

 


 

docker-compose 로 이미지 빌딩

  • 이미지 네이밍 컨벤션은 다음과 같다.
  • [Root-proj] _ [Module - name]
docker-compose build

#확인 
docker images | findstr [root-Project-name]

 


 

docker-compose 로 빌드한 이미지 한꺼번에 실행, 종료, 로깅

 

  • up 키워드로 관리하는 이미지들을 컨테이너로 띄우며 -d 등의 옵션도 지정가능하다.
  • 로그를 확인하는 것도 동일하게 logs 를 사용한다.
## 구동 키워드는 up
docker-compose up -d

-d 옵션으로 백그라운드에서 운영시켰다. 굉장히 직관적.

# 터미널을 유지하는 -f 옵션, logs 키워드로 로그를 본다.
docker-compose logs -f

# --tail=? 옵션으로 최신자 로그 확인가능
docker-compose logs -f --tail 0

# 하나의 서비스 명을 확인하려면 이름을 붙여준다.
docker-compose logs -f [name] [name] ...

4개의 서비스

 


API 호출

  • curl , jq 로 호출, 로그확인
# 새로운 로그부터 확인
docker-compose logs -f --tail 0

# curl , jq 로 호출
curl http://localhost:8080/product-composite/123 -s | jq .

 

Docker-compose 의 로그 화면

 

응답 내용의 JSON 파싱 화면

 


마무리

# down 은 docker-compose 에서 관리 중인 컨테이너를 중지하고 종료시킨다.
docker-compose down