2023.10.13 작성글
이번에는 docker를 이용한 배포를 정리해볼 생각이다.
Dockerfiler과 docker-compose.yml 파일을 이용하여 배포 하려고 한다.
지금까지의 배포는 전통적인 방식으로 배포 했었다.
실제 물리적 서버 납품 -> OS 설치 -> tomcat설치 -> war파일 배포
개발 PC에 docker가 설치되어있다고 가정한다.
간단한 spring boot 프로젝트를 준비한다
일단 아래의 디렉토리 형태가 맞는지만 확인하면된다.

간단한 API를 하나 만든다.

http://localhost:8080/test -> "test" 응답
여러가지 방법이 있겠지만 run configuration이 편해서 이걸로 함
"clean package" 면 된다.

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

빌드는 성공했다.
그럼 이제 docker로 올려보자.
일단 /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로 하자)
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설정은 일단 이후에 추가하도록 하자.