[SpringBoo] docker-compose 배포

22_gas·2024년 6월 22일

2023.10.13 작성글

개요

이번에는 docker를 이용한 배포를 정리해볼 생각이다.

Dockerfiler과 docker-compose.yml 파일을 이용하여 배포 하려고 한다.

지금까지의 배포는 전통적인 방식으로 배포 했었다.

실제 물리적 서버 납품 -> OS 설치 -> tomcat설치 -> war파일 배포

개발 PC에 docker가 설치되어있다고 가정한다.

프로젝트 준비

SpringBoot 프로젝트

간단한 spring boot 프로젝트를 준비한다

일단 아래의 디렉토리 형태가 맞는지만 확인하면된다.

controller 생성

간단한 API를 하나 만든다.

http://localhost:8080/test -> "test" 응답

빌드 테스트

여러가지 방법이 있겠지만 run configuration이 편해서 이걸로 함

"clean package" 면 된다.

저장하고 실행하면 /target 에 jar 파일이 생기게 된다.

빌드는 성공했다.

그럼 이제 docker로 올려보자.

Dockerfile 만들기

일단 /docker/를 만들고 Dockerfile을 만들어준다. 내용은 아래와 같이 만든다.

FROM openjdk:lastest
#CMD["../mvmw","clean", "package"]
COPY target/doIt-0.0.1.jar /app/app.jar

target안에 jar파일을 읽어서 /app/app.jar  로 위치시킨다.

원래는 이 Dockerfile로 docker를 올리게 되는데 그렇게 하지 않고 docker-compose를 이용하여 돌릴것이다.

docker-compose.yml 생성

프로젝트 최상단에 docker-compose.yml 파일을 만들자 (이름은 docker-compose.yml로 하자)

version: '3'

services:
  application:
      container_name: doIt_service
      build:
          context: ./docker
          dockerfile: Dockerfile
      ports:
        - "8081:8081"
      working_dir: /app
      command: ["java", "-jar", "app.jar"]
      restart: always

container_name : docker가 실행될때 서비스명
build: docker실행시 docker compose build 를 치면 실행되는것으로 알고있다.
ports: 통상적으로 docker 내외부 통신이 안되기때문에 포트포워딩을 걸어서
localhost:8081 로 접근이 가능하도록 한다.
working_dir: docker가 실행될때 밑에 command 실행을 어느 디렉토리에서 할지 정한다.
command: docker 실행시 실행되는 명령어

작성이 완료 됐으면 

docker compose up -d 명령어를 실행

-d를 붙이면 데몬으로 돈다는 뜻
-d를 빼면 cmd창에 로그가 뜨며 중지시키면 docker 서비스도 종료된다.

조금더 쉽게

target안에 jar파일을 밖으로 빼서 특정 폴더에 몰아 넣고 Dockerfile과 docker-compose.yml을 만든다.

Dockerfile

FROM openjdk:latest
#CMD ["./mvmw", "clean", "package"]
COPY doIt-0.0.1.jar /app/doIt-0.0.1.jar

docker-compose.yml

version: '3'

services:
  application:
      container_name: doIt_service
      build:
          dockerfile: Dockerfile
      ports:
        - "8081:8081"
      working_dir: /app
      command: ["java", "-jar", "/app/doIt-0.0.1.jar"]
      restart: always

그리고 똑같이 "docker compose up -d" 를 해준다.

이 결과를 얻기까지 반나절이 걸렸다. 
Dockerfile의 ENDPOINT 설정이나

docker-compose.yml의 volume, network설정은 일단 이후에 추가하도록 하자.

profile
전 아직 모르는게 많아요

0개의 댓글