12.31 TIL - github with docker compose

이서준·2025년 12월 31일

TIL

목록 보기
22/24

github actions + docker compose로 CD 파이프라인 구축하기

CD란?

  • 코드가 특정 브랜치에 병홥되면 빌드
  • 배포까지 자동으로 수행하는 과정

내 CD 구조

  1. main 브렌치 push
  2. github actions 실행
  3. 애플리케이션 build
  4. docker 이미지 생성 & push
  5. EC2에서 docker compose로 컨테이너 재 배포

EC2 환경 준비

1. docker 설치

## 패키지 목록 업데이트
sudo apt update
## Docker 설치
sudo apt install -y docker.io
## Docker 설치 확인
docker --version
## Docker 서비스 시작 및 자동 실행 설정
sudo systemctl start docker
sudo systemctl enable docker
## sudo(관리자 권한) 없이도 사용하도록 설정
sudo usermod -aG docker ubuntu

2. docker compose 설치

# Docker 공식 GPG 키 추가
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Docker apt 저장소 추가
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" \
  | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 패키지 목록 업데이트
sudo apt update
# Docker Compose tjfcl
sudo apt install -y docker-compose-plugin
# Docker compose 설치 확인
docker compose version

3. docker-compose.yml 생성

version: "3.8"

services:
  app:
    image: capaldi/my-app:latest
    container_name: my-app
    ports:
      - "8080:8080"
    env_file:
      - .env
    restart: always

  redis:
    image: redis
    restart: always
  • 기존 docker run 으로 실행했으면 밑의 코드처럼 오류가 발생
  • 기존 컨테이너를 삭제 docker rm {containerId 및 이름}

CD.yml 변경

기존

- name: Deploy to EC2
	uses: appleboy/ssh-action@v1.0.0
	with:
		host: ${{ secrets.EC2_HOST }}
		username: ${{ secrets.EC2_USER }}
		key: ${{ secrets.EC2_SSH_KEY }}
		script: |
			docker pull ${{ secrets.DOCKER_USERNAME }}/my-app:latest
			docker stop my-app || true
			docker rm my-app || true
			docker run -d --name my-app -p 8080:8080 ${{ secrets.DOCKER_USERNAME }}/my-app:latest

변경

- name: Deploy to EC2
	uses: appleboy/ssh-action@v1.0.0
	with:
		host: ${{ secrets.EC2_HOST }}
		username: ${{ secrets.EC2_USER }}
		key: ${{ secrets.EC2_SSH_KEY }}
		script: |
			docker pull ${{ secrets.DOCKER_USERNAME }}/my-app:latest
			cd /home/ubuntu
      docker compose down
      docker compose up -d

삽질

ubuntu 서버에 docke만 설치된 경우 docker compse 명령어 없음
docker compose 플러그인을 설치해 사용해야함


health

logs

ps

profile
Allons-y

0개의 댓글