CI&CD

177. [CI/CD] Docker로 프로젝트 배포하기

천재단미 2025. 3. 21. 09:10
728x90
반응형

 

 

Docker를 이용하면 애플리케이션과 그 실행 환경을 하나의 패키지(컨테이너)로 묶어 어디서든 일관되게 실행할 수 있습니다. 이번 글에서는 간단한 Django 프로젝트를 예로 들어, 로컬에서 Docker 이미지를 빌드하고 이를 AWS EC2 환경에 배포하는 전체 과정을 단계별로 살펴보겠습니다.


1. Docker란? 

  • 컨테이너 가상화: 호스트 OS 위에서 격리된 환경(컨테이너)을 제공
  • 경량화: VM 대비 빠르고 가벼운 실행 환경
  • 이식성: 개발 환경·테스트 환경·운영 환경 간 실행 일관성 보장

2. 사전 준비

  1. Docker 설치
    • macOS, Windows, Linux에 맞는 Docker CE/EE 설치
  2. AWS EC2 인스턴스
    • Ubuntu 18.04 이상 권장
    • SSH 접속 가능한 상태

3. 로컬에서 Docker 이미지 빌드하기

3.1. requirements.txt에 gunicorn 추가

pip install gunicorn
pip freeze > requirements.txt

 

Docker 이미지 내에서 WSGI 서버로 Gunicorn을 사용하기 위함입니다.

 

3.2. 데이터베이스 설정

my_settings.py 등 설정 파일에 RDS(MySQL 등) 호스트, 사용자명, 비밀번호를 적절히 수정합니다.

 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'HOST': 'your-rds-endpoint.rds.amazonaws.com',
        'USER': 'db_user',
        'PASSWORD': 'db_password',
        'NAME': 'db_name',
    }
}

3.3. 로컬 실행 테스트

python manage.py runserver
# → <http://127.0.0.1:8000/> 접속해서 정상 동작 확인

 


3.4. Dockerfile 작성

프로젝트 최상위 폴더에 Dockerfile을 생성하고 다음 내용을 작성합니다.

# 1. 베이스 이미지
FROM python:3

# 2. 작업 디렉터리
WORKDIR /usr/src/app

# 3. 의존성 복사 및 설치
COPY requirements.txt ./
RUN pip install -r requirements.txt

# 4. 소스 복사
COPY . .

# 5. 포트 개방
EXPOSE 8000

# 6. 애플리케이션 실행
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "project_name.wsgi:application"]

 

번호 설명
1 Python 3 공식 이미지
2 컨테이너 내부 작업 경로
3 requirements.txt 기반 라이브러리 설치
4 소스 전체 복사
5 Django가 사용하는 포트(8000) 개방
6 Gunicorn으로 WSGI 애플리케이션 실행

3.5. Docker 이미지 빌드

# 도커 허브 아이디/이미지명:태그
docker build -t your_dockerhub_id/project:0.1 .

 

빌드가 완료되면 docker images로 확인할 수 있습니다.

$ docker images
REPOSITORY                        TAG     IMAGE ID       SIZE
your_dockerhub_id/project         0.1     481b7f7169f6   1.1GB

3.6. 컨테이너 실행 (로컬)

docker run --name myapp -d -p 8000:8000 your_dockerhub_id/project:0.1
docker ps

  • d: 백그라운드 실행
  • p 호스트:컨테이너: 포트 포워딩

4. 이미지 레지스트리에 푸시

# 도커 로그인
docker login

# 이미지 푸시
docker push your_dockerhub_id/project:0.1


5. EC2에 배포하기

5.1. EC2 접속 및 Docker 설치

SSH로 EC2에 접속한 뒤, Ubuntu 기준 아래 명령어를 실행합니다.

sudo apt update
sudo apt install -y \\
  apt-transport-https \\
  ca-certificates \\
  curl \\
  software-properties-common

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

sudo apt update
sudo apt install -y docker-ce

5.2. Docker 이미지 Pull

sudo docker login
sudo docker pull your_dockerhub_id/project:0.1

5.3. 컨테이너 실행 (EC2)

sudo docker run --name myapp -d -p 8000:8000 your_dockerhub_id/project:0.1
sudo docker ps

  • EC2의 보안 그룹에서 8000 포트(또는 원하는 포트)를 허용해야 외부 접속이 가능합니다.

 


6. 마무리

이제 로컬에서 빌드한 Docker 이미지를 AWS EC2에 배포하여, 어디서나 동일한 환경으로 Django 애플리케이션을 실행할 수 있게 되었습니다.

이 과정을 CI/CD 파이프라인(GitHub Actions, Jenkins 등)과 연동하면 코드 커밋 시 자동으로 빌드·테스트·배포까지 가능해집니다.

Docker 기반 배포를 통해 환경 설정의 번거로움을 없애고, 안정적인 서비스 운영을 실현해 보세요!

728x90
반응형