4.1.3 Docker기반 백엔드 CI/CD 구축하기

윤희빈·2026년 8월 28일

AWS CI/CD 구축

목록 보기
22/25

저번에 실습한 내용 마무리하기

1. 서버 종료

lsof -i:8080
sudo fuser -k -n tcp 8080
lsof -i:8080

또는

lsof -i:8080
kill [pid]
lsof -i:8080

2. 프로젝트 폴더 삭제

rm -rf [프로젝트 디렉터리명]


CI/CD 적용하기

1.Docker 기반으로 프로젝트 수정하기

Dockerfile 작성하기

  • 프로젝트 최상단에 생성한다.
FROM eclipse-temurin:17-jdk-alpine
COPY ./build/libs/*SNAPSHOT.jar project.jar
ENTRYPOINT ["java", "-jar", "project.jar"]

  • COPY [내 컴퓨터의 파일] [Docker 이미지 내부 경로/이름]
    ./build/libs/*SNAPSHOT.jarproject.jar
  • ENTRYPOINT ["java", "-jar", "project.jar"]
    컨테이너가 실행될 때 java -jar project.jar를 실행한다.

2. EC2가 private ECR에 접근할 수 있게 셋팅하기

Amazon ECR Docker Credential Helper 설치하기

관련 repository

# Ubuntu일 경우
$ sudo apt update
$ sudo apt install amazon-ecr-credential-helper

Configuration 설정하기

~ 경로에서 .docker라는 폴더 만들고, config.json 파일 만들어서 아래와 같이 작성한다.

~/.docker/config.json

{
	"credsStore": "ecr-login"
}

IAM Role을 활용해 EC2가 ECR에 접근할 수 있게 권한 부여하기

  • [IAM] - [역할]

  • 기존에 만든code-deploy-ec2-role을 수정하겠다.

  • AmazonEC2ContainerRegistryFullAccess 정책 추가하기

3. Docker 기반 CI/CD 구축하기

Github Actions 파일 작성하기

.github/workflows/deploy.yml

name: deploy To EC2.yml

on:
  push:
    branches:
      - main

jobs:
  Deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Github Repository 파일 불러오기
        uses: actions/checkout@v4

      - name: JDK 17버전 설치
        uses: actions/setup-java@v4
        with:
          distribution: temurin
          java-version: 17

      - name: application.yml 파일 만들기
        run: echo "${{secrets.APPLICATION_PROPERTIES}}" > ./src/main/resources/application.yml

      - name: 테스트 및 빌드하기
        run: ./gradlew clean build

      - name: AWS Resource에 접근할 수 있게 AWS credentials 설정
        uses: aws-actions/configure-aws-credentials@v4
        with:
          aws-region: ap-northeast-2
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY_ID }}

      - name: ECR에 로그인하기
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v2

      - name: Docker 이미지 생성
        run: docker build -t cicd-ex .

      - name: Docker 이미지에 Tag 붙이기
        run: docker tag cicd-ex ${{ steps.login-ecr.outputs.registry }}/cicd-ex:latest

      - name: ECR에 Docker 이미지 push하기
        run: docker push ${{ steps.login-ecr.outputs.registry }}/cicd-ex:latest

      - name: SSH로 EC2 접속하기
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{secrets.EC2_HOST}}
          username: ${{secrets.EC2_USERNAME}}
          key: ${{secrets.EC2_PRIVATE_KEY}}
          script_stop: true
          script: |
            docker stop cicd-ex || true
            docker rm cicd-ex || true
            docker pull ${{ steps.login-ecr.outputs.registry }}/cicd-ex:latest
            docker run -d --name cicd-ex -p 8080:8080 ${{ steps.login-ecr.outputs.registry }}/cicd-ex:latest

push하기

profile
비니비니히비니의 정리블로그

0개의 댓글