본문 바로가기

리눅스 인프라/Docker, Jenkins, Kubernates

Spring boot(gradle) docker container 배포, docker-compose적용

개요 목적

리눅스 서버에 직접 라이브러리를 다운 받고, jar 파일을 실행하는 기존 배포 방법에서 벗어나, 라이브러리와 jar 파일이 포함된 docker image를 다운 받아 바로 실행하는 편리한 docker container 실행 방법에 대해서 알아본다.

그리고 여러 개의 컨테이너를 실행시킬 때 일일이 명령어를 치는 방식이 아닌, docker-compose 하나의 yml 파일 하나로 여러 개의 컨테이너를 실행하는 방법을 알아보자.

해당 프로젝트 깃허브

docker container 배포

  • docker desktop을 다운 받아, docker 엔진을 실행한다.
  • 배포를 원하는 프로젝트 디렉토리에 dockerfile을 생성한다.

  • docker file 구성하기
#base 이미지를 지정하기
FROM openjdk:11-jre

#이미지를 만들 때 
#실제 프로젝트 jar 파일을 이미지내 파일로 복사하기
COPY build/libs/*.jar app.jar

#이미지가 컨테이너로 실행될 때 수행할 java -jar app.jar 명령어 설정하기
ENTRYPOINT ["java","-jar", "-Dspring.profiles.active=server", "app.jar"]
  • docker image 만들기
#jar 파일 생성하기
./gradelw clean build

#docker image 만들기
docker build -t hwangdy/api:01 .

#도커 허브에 이미지 올리기
docker push hwangdy/api:01
  • (실제 프로젝트를 배포할) 리눅스 서버에 docker 설치하기

아래 공식 레퍼런스의 커맨드를 따라 치면 리눅스 서버에 도커 패키지를 설치할 수 있다.

Install Docker Engine on Ubuntu

  • 리눅스 서버에서 이미지 받아서 실행하기
#도커 허브에서 이미지 가져오기
sudo docker image pull hwangdy/api:01

#해당 이미지 실행하여 컨테이너 실행하기
#--container 이름과 호스트와 연결할 port 번호 설정하기
docker run --name api -p 5511:5511 hwangdy/api:01

#이미지를 다운 받지 않아도 run을 통해 이미지가 없다면 docker hub 이름에 해당하는
#이미지를 다운 받아 실행한다. 

docker-compose

여러 컨테이너 하나의 yml 파일로 생성 그리고 관리하기

  • docker-compos .yml 파일 생성하기

모든 프로젝트 상위 디렉토리에 docker-compose.yml 파일 생성

  • 파일 작성하기
#docker-compose 최신 3버전 사용
version: '3'
#3가지 서비스 등록
services:
  api:
    # Dockerfile이 있는 위치
    build: ./API
    #컨테이너 이름을 명시 가능
    #container_name: comapi-con
    #이미지 이름 명시 가능
    #image: comapi-img
    #호스트와 포트 연결 설정
    ports:
      - "5511:5511"
  plus:
    build: ./PlusAPI
    ports:
      - "6611:6611"
  ui:
    build: ./UI
    ports:
      - "8081:8081"
  • 리눅스 서버 해당 docker-compose.yml이 포함된 프로젝트 파일 깃 허브에서 다운
  • 리눅스 서버에서 docker-compose 실행
docker-compose up -d
#종료는 아래 명령어를 사용하면 된다.
docker-compose down

하나의 명령어로 세개의 서버가 실행된 것을 확인할 수 있다.


Reference

https://www.youtube.com/watch?v=p-_joOa0lH0

https://yooooonnf.tistory.com/5