Note/Deployment

Docker를 사용한 ec2 배포

yeonahn 2025. 3. 14. 23:13

원래 사용하던 블로그 - https://yeonnan.hashnode.dev/docker-ec2?source=more_series_bottom_blogs

 

docker를 사용한 ec2 배포

docker-compose.yml, dockerfile, .env 파일이 로컬에 존재하며, ec2 인스턴스는 이미 실행 중이어야 한다. 0. ssh로 ec2에 접속 ⁠ssh -i <.pem> ubuntu@<ec2-ip>⁠ Unprotected Private Key File 경고 chmod 400 {.pem 파일 경로} sud

yeonnan.hashnode.dev

 

docker-compose.yml, dockerfile, .env 파일이 로컬에 존재하며,

ec2 인스턴스는 이미 실행 중이어야 한다.

 

0. ssh로 ec2에 접속

⁠ssh -i <.pem> ubuntu@<ec2-ip>⁠

  • Unprotected Private Key File 경고 chmod 400 {.pem 파일 경로}
  • sudo 권한 확인 후 docker 설치
    apt-get update apt-get install sudo

 

1. docker, docker compose 설치

sudo apt update
sudo apt install docker.io 
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

설치 확인
- docker --version
- docker-compose --version

 

2. docker 시작 및 자동 실행 설정

⁠sudo systemctl start docker⁠

sudo systemctl enable docker

 

3. git clone

clone한 파일의 프로젝트 루트에 dockerfile, docker-compose.yml이 있어야 한다.

⁠git clone <repository 주소>⁠

git clone후 프로젝트 디렉토리로 이동 ⁠cd <프로젝트 폴더>⁠

 

4. .env 파일 ec2로 복사

.env 파일을 로컬에서 ec2로 복사해줘야 한다.

  • 해당 명령어는 scp 명령을 ec2 터미널에서 실행하는 것이 아닌,
    로컬 컴퓨터 터미널에서 실행해야 한다.

⁠scp -i <pem키 경로> <.env 파일경로> ubuntu@<ec2 퍼블릭ip 주소>:/home/ubuntu/<프로젝트 폴더>/⁠

 

5. python 패키지 설치 <스킵 가능>

docker-compose 환경에서는 패키지를 docker 이미지 내에 설치하기 때문에,
docker- compose 빌드 시에는 스킵 가능

  • 스킵 시에는 바로 6번, 7번 실행

⁠sudo pip install -r requirements.txt

 

6. docker 이미지 빌드

dockerfile이 있는 위치에서 docker 이미지 빌드

여기서 app명은 내가 정하고 싶은 걸로 하면 된다. (이미지 이름은 소문자로만 작성되어야 한다.)

⁠sudo docker-compose build

 

6-1. docker 이미지가 이미 있다면

⁠sudo docker images⁠

 

7. 컨테이너 실행

⁠sudo docker-compose up

  • 실행중인 컨테이너 확인 sudo docker ps
  • docker 로그 확인 ⁠sudo docker-compose logs
  • docker 컨테이너 중지 ⁠sudo docker-compose down

 

8. 마이그레이션 적용

django를 사용 중이라면, 마이그레이션 적용 필요

→ 컨테이너가 정상적으로 실행되면, 컨테이너 내부에서 마이그레이션 적용

⁠⁠sudo docker-compose exec web python manage.py migrate

 

9. aws ec2 관리 콘솔에서 보안그룹 설정으로 들어가 TCP 80 포트를 추가

 

10. 웹사이트 접속

⁠http://<EC2 IP>