Super Kawaii Cute Cat Kaoani
본문 바로가기
🏃‍♀️ 대외활동/Draconist - 소모임

[Draconist] Docker 및 github action CI/CD하기

by wonee1 2025. 7. 24.
728x90

 

본 포스트는 Docker와 github action으로 CI/CD하는 과정을 기록한 것 입니다. 

 

또한 본 글은 다음 포스트를 참고하였습니다! 

https://turtle0204.tistory.com/entry/08-docker%EC%99%80-github-action%EC%9C%BC%EB%A1%9C-CICD%ED%95%98%EA%B8%B0

 

08. docker와 github action으로 CI/CD하기

1. EC2에서 Docker설정하기1. 우분투 시스템 패키지 업데이트sudo apt-get update2. 필요한 패키지 설치sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common3. Docker의 공식 GPG키를

turtle0204.tistory.com

 


 

 

⭐Docker 및 github action CI/CD하기

 

1) 도커 설치하기 

https://www.docker.com/products/docker-desktop/

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

 

우선 다음 링크로 접속하여 도커를 설치해줍니다. 위 링크에서 사용 중인 운영체제(Windows, macOS, Linux)에 맞는 Docker Desktop을 다운로드합니다. 설치 후 Docker Desktop 실행합니다. 

 

 

 

 

 

 

도커를 설치한 후 docker version 명령어를 사용하여 설치된 도커 버전을 확인해줍니다.  정상적으로 설치되었다면 클라이언트/서버 버전 정보가 출력됩니다. 

docker version

 

 

또한 Docker Desktop은 기본적으로 WSL 2 기반에서 동작하므로 다음 명령으로 기본 WSL 버전을 2로 설정합니다:

wsl --set-default-version 2

 

설치 확인 결과

 

 

 

2) Github Actions를 활용한 CICD 설정

 

.github/workflows/gradle.yml을 프로젝트의 루트 폴더에 만든 다음 설정을 해줍니다.  

 

 

💠 예시 코드 

name: Java CI with Gradle

on:
  push:
    branches: [ "develop" ]
  pull_request:
    branches: [ "develop" ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v3

      - name: Set up JDK 17
        uses: actions/setup-java@v3
        with:
          java-version: '17'
          distribution: 'temurin'

      - name: Grant execute permission for gradlew
        run: chmod +x gradlew

      - name: Build with Gradle
        run: ./gradlew clean build

      - name: Build Docker Image
        run: docker build -t your-dockerhub-id/your-image-name:latest .

      - name: Login to DockerHub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}

      - name: Push Docker Image
        run: docker push your-dockerhub-id/your-image-name:latest
 

💠 필요한 비밀 키

  • DOCKER_USERNAME: DockerHub 아이디
  • DOCKER_PASSWORD: DockerHub 비밀번호 or Access Token
 

 

 

3) GitHub Repository Secrets 설정 

 

GitHub → 프로젝트 → Settings → Secrets and variables → Actions → New repository secret 에서 등록할 수 있습니다.

 

 

 

APPLICATION Spring Boot의 application.properties 전체 내용 server:\n port: 8080\nspring:\n datasource:\n url: ... (전체 YML 문자열)
DOCKER_PASSWORD DockerHub 로그인 시 사용할 비밀번호 또는 Access Token your_dockerhub_password 또는 ghp_xxxxxxxx 형태의 액세스 토큰
DOCKER_REPO_NAME DockerHub에 업로드할 이미지 이름 (username/image 형식) goodnews535/goodluckynewsdocker
DOCKER_USERNAME DockerHub 사용자 이름 goodnews535
HOST 배포할 EC2 인스턴스의 퍼블릭 IP 또는 도메인 13.124.xxx.xxx 또는 ec2-13-xxx-xxx.ap-northeast-2.compute.amazonaws.com
PRIVATE_KEY EC2 인스턴스에 접속하기 위한 개인 키 (.pem 파일 내용 전체) -----BEGIN RSA PRIVATE KEY-----\nMIIEo...
SPRING_PROFILES_ACTIVE 실행할 Spring 프로파일 prod 또는 dev 등 설정된 프로파일 이름

💠 참고 사항

  • PRIVATE_KEY는 EC2 키페어(.pem) 파일을 열어 전체 내용을 복사해서 그대로 넣어야 합니다.
  • APPLICATION은 보통 application-prod.yml의 내용을 base64 인코딩 없이 문자열로 넣는 경우가 많습니다.
  • DOCKER_REPO_NAME과 DOCKER_USERNAME은 도커 이미지 push/pull 시 일치해야 하며, DOCKER_REPO_NAME은 도커허브 사용자명/리포지토리명 형식입니다.
  • HOST와 PRIVATE_KEY는 배포 자동화를 위해 ssh 접속에 사용됩니다.

 

 

 

💠application,properties 코드 예시 

# 서버 설정
server.port=8080

# DB 설정
spring.datasource.url=jdbc:mysql://localhost:3306/your_database?serverTimezone=Asia/Seoul
spring.datasource.username=dbuser
spring.datasource.password=dbpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# JPA 설정
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect

# 로깅
logging.level.org.hibernate.SQL=debug
logging.level.org.springframework.web=info

# 프로파일
spring.profiles.active=prod

 

 

 

 

 

4) 도커 파일 생성

 


 

 

EC2에서 Docker 설치 및 실행 확인 (Ubuntu 기준)

 

1) 시스템 패키지 업데이트

 

최신 버전의 패키지 리스트로 갱신하여 의존성 문제를 방지합니다.

 
sudo apt-get update

 

 

 

 

2) 필요한 패키지 설치

 

Docker 설치에 필요한 보안/HTTPS 관련 유틸리티들을 설치합니다.

sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
 

 

  • apt-transport-https: HTTPS로 패키지를 받을 수 있게 함
  • ca-certificates: 인증서 관련 툴
  • curl: URL로 데이터 받는 명령어
  • gnupg-agent: GPG 키 처리
  • software-properties-common: 저장소 관리 도구

 

 

 

3) Docker의 GPG 키 추가 
 

Docker의 패키지에 대한 신뢰를 보장하기 위해 GPG 키를 등록합니다.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

 

 

4) Docker 공식 저장소 등록 

 

 

Ubuntu 기본 저장소가 아닌 Docker 공식 저장소에서 최신 버전 설치를 위해 등록합니다.

sudo add-apt-repository \
  "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable"
 
 
 

5) 패키지 목록 다시 업데이트

 

이제 추가한 Docker 저장소 정보를 반영하기 위해 업데이트합니다.

sudo apt-get update

 

6) Docker 설치

 

Docker CE(Community Edition)를 설치합니다. 

 
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

 

 

  • docker-ce: Docker 엔진
  • docker-ce-cli: Docker 명령줄 도구
  • containerd.io: 컨테이너 런타임

 

 

 

 7) Docker 서비스 상태 확인

 

Docker가 잘 실행되고 있는지 확인합니다.

 

sudo systemctl status docker

 

 

 

  • active (running)이라고 표시되면 정상 작동 중
  • 종료는 q 누르면 빠져나올 수 있습니다. 

 

 

 

 8) Docker 테스트 실행

 

Docker가 잘 작동하는지 확인하기 위한 샘플 컨테이너 실행

 

sudo docker run hello-world

 

Docker가 정상 설치되고 컨테이너 실행 가능하면,

Hello from Docker! 메시지가 출력됨

Hello from Docker!
This message shows that your installation appears to be working correctly.

 

 

 

 

➕ 추가 명령어

 

1)  현재 실행 중인 컨테이너 확인

sudo docker ps

 

2) 모든 컨테이너 확인 (종료 포함)

sudo docker ps -a

 

 

 

3) 컨테이너 로그 확인

sudo docker logs <container_id>
  • container_id는 docker ps 출력에서 확인

 

설치 후 권한 설정 

매번 sudo 입력 없이 docker 명령어를 사용하고 싶을 때 설정합니다.

sudo usermod -aG docker $USER

 

 

적용하려면 로그아웃 후 로그인하거나, 바로 반영하려면 

newgrp docker

 

 

 

 

깃 액션 확인

 

728x90