본 포스트는 Docker와 github action으로 CI/CD하는 과정을 기록한 것 입니다.
또한 본 글은 다음 포스트를 참고하였습니다!
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: 저장소 관리 도구
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

'🏃♀️ 대외활동 > Draconist - 소모임' 카테고리의 다른 글
[Draconist] HTTPS 설정하기 (4) | 2025.07.27 |
---|---|
[Draconist] Docker 이미지 빌드하기 (2) | 2025.07.23 |
[Draconist] EC2 설정 및 RDS 연결 (1) | 2025.07.19 |