- [CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [1]
- [CI/CD] AWS Elastic Beanstalk + Docker + Github Action로 Kotlin SpringBoot 프로젝트 [2] - HTTPS
Multi Module Project + Docker 플랫폼 배포 설정
Pipeline
AWS EB 플랫폼을 Docker로 선택했으니 이제 해당 환경으로 작업을 하려 한다.
먼저 구축하려 하는 CI/CD 파이프라인은
Github Action을 통해 Repostiroy의 소스를 Checkout 후
DockerHub에 Checkout 받은 소스를 작성한 Dockerfile 기반으로 빌드하여 이미지를 업로드하고
작성한 docker-compose.yml을 통해 AWS EB에 배포할 것이다.
DockerHub
먼저 계정이 없다면 생성해주자.
로그인 후 Account Settings > Security 메뉴에 들어가 New Access Token 버튼을 눌러 Access Token을 만들어준다.
액세스 토큰 description 은 자유롭게 작성하면 된다. 이때 발급되는 access token 값을 잘 기록해두자.
Kotlin + SpringBoot Dockerfile
이 글의 경우 작성된 프로젝트는 코틀린(JVM 17) + 스프링 부트로 구성된 Multi Module Product 구조이다.
다른 모듈과 빌드해야 할 내용이 다를 수 있으니 Dockerfile을 모듈별로 작성했다. (admin.Dockerfile, api.Dockerfile)
아래는 예시일 뿐 각자 자신의 프로젝트에 맞게 작성하면 된다.
# api.Dockerfile
FROM azul/zulu-openjdk-alpine:17 as builder
WORKDIR /app
COPY build.gradle.kts settings.gradle.kts gradle.properties gradlew ./
COPY ./gradle ./gradle
COPY ./test-api ./test-api
RUN chmod +x ./gradlew
RUN ./gradlew :test-api:clean :test-api:installBootDist
FROM azul/zulu-openjdk-alpine:17-jre
WORKDIR /app/bin
RUN apk add --no-cache fontconfig ttf-dejavu
COPY --from=builder /app/test-api/build/install/test-api-boot /app
EXPOSE 8081
ENTRYPOINT ["./test-api"]
Docker Compose
AWS EB Docker 플랫폼 사용 시 배포 방법이 2가지 있는데
docker-compose.yml를 사용하는 것과 Docker Compose를 사용하지 않는 경우 대신 Dockerrun.aws.json 파일을 사용하는 경우가 있다.
이 글의 경우 docker compose를 사용할 예정이다.
# docker-compose.yml
version: "3.9"
services:
test-api-server:
image: "username/repository:tag"
ports:
- "80:8081"
restart: "always"
DockerHub에 업로드되어있는 이미지를 가져와서 쓸 것이므로
image 정보 입력 부분에
{{도커 허브 계정 이름}} / {{이미지 업로드 저장소 이름}} : {{태그}}
양식으로 작성한다.
뻘짓 기록
Dockerfile에서 EXPOSE 8081로 했는데 docker-compose.yml 에서 ports: "80:8080"으로 하는 바람에
배포 후 접속했을 때 502 에러가 발생했었다.
내가 작성한 설정을 잘 보고 맞춰주자....
이러면 도커 관련 설정도 완료됐다.
다음은 마지막으로 Github Action을 이용해 빌드부터 배포까지 하는 작업을 해 볼 것이다.