지난 포스팅에서 Github Actions를 통해 지정된 브랜치에 push 되는 경우에 빌드하여 jar 파일을 만드는 과정까지 진행했습니다.
이번에는 jar 파일을 docker image로 만들고, dockerhub에 push하는 과정까지 해보겠습니다!
FROM adoptopenjdk/openjdk11
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dspring.profiles.active=prod", "-jar", "/app.jar"]
먼저 도커 이미지를 생성할 때 실행할 명령어들을 dockerfile에 정의해야 합니다. 프로젝트 루트 경로에 Dockerfile
이란 이름으로 위의 내용을 작성해줍니다.
먼저 우리 프로젝트의 jdk버전인 11로 명시해주고, 이미지로 만들 jar 파일의 경로를 적어줍니다. /build/libs
에 jar 파일이 존재하므로 해당 경로를 적어줍니다.
이 때, *.jar로 표기하기 위해서는 빌드한 결과로 plain jar가 생성되는 것을 막아야 합니다.
build.gradle에 다음 옵션을 추가해줍니다.
jar {
enabled = false
}
그 다음 COPY 명령을 통해 app.jar 파일로 만들고, entry point로 java -jar 명령을 적어 컨테이너 실행 시 jar 파일을 실행하도록 만들어줍니다.
Docker image를 만들어 docker hub에 올린 뒤 서버에서 pull 받아 실행시키는 방식으로 동작하게 하려고 합니다.
그러기 위해서 먼저 github actions에 Dockerhub에 로그인하는 명령어를 작성합니다.
- name: Docker Login
uses: docker/login-action@v2.0.0
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_SECRET }}
action으로는 docker/login-action을 사용했습니다. argument로 dockerhub 계정과 비밀번호를 입력해야 하는데, 보안을 위해 repository secret으로 등록해줍니다.
그리고 환경변수처럼 가져와 로그인을 진행합니다.
- name: Docker build
run: |
docker build -t issue-tracker .
docker tag issue-tracker ${{ secrets.DOCKERHUB_USERNAME }}/issue-tracker:latest
docker push ${{ secrets.DOCKERHUB_USERNAME }}/issue-tracker:latest
이제 github action에 docker image를 만드는 명령어를 추가해줍니다.
이미지를 만들고 태그를 붙인 뒤 dockerhub에 push합니다.
dockerhub에 접속해보면 위와 같이 image가 push된 것을 확인할 수 있습니다.
이제 다음 단계로 서버에 접속하여 docker image를 받아 실행함으로써 자동 배포를 완성해보겠습니다!