CI&CD
177. [CI/CD] Docker로 프로젝트 배포하기
천재단미
2025. 3. 21. 09:10
728x90
반응형
Docker를 이용하면 애플리케이션과 그 실행 환경을 하나의 패키지(컨테이너)로 묶어 어디서든 일관되게 실행할 수 있습니다. 이번 글에서는 간단한 Django 프로젝트를 예로 들어, 로컬에서 Docker 이미지를 빌드하고 이를 AWS EC2 환경에 배포하는 전체 과정을 단계별로 살펴보겠습니다.
1. Docker란?
- 컨테이너 가상화: 호스트 OS 위에서 격리된 환경(컨테이너)을 제공
- 경량화: VM 대비 빠르고 가벼운 실행 환경
- 이식성: 개발 환경·테스트 환경·운영 환경 간 실행 일관성 보장
2. 사전 준비
- Docker 설치
- macOS, Windows, Linux에 맞는 Docker CE/EE 설치
- 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
반응형