[AWS Elastic Beanstalk + Docker]

JAMEe_·2024년 5월 8일

배포

목록 보기
3/6

🐳 Docker

  • 컨테이너 기반으로 애플리케이션을 빠르게 실행하고 관리할 수 있는 오픈소스 프로젝트

EC2 를 여러개 생성하려는 경우 각각 node, pm2 등등 초기 설정 및 설치가 반복적으로 필요
Docker 를 사용하여 이러한 번거로움 줄어듬
Dockerfile 을 바탕으로 이미지 빌드
COPY package*.json => 새로 생성될 컨테이너의 루트에 복사
COPY . . => 프로젝트의 모든 파일을 컨테이너 루트에 복사
EXPOSE 3000 => 컨테이너의 포트를 외부에서 접근할 수 있도록
CMD npm run start => 최종적으로 컨테이너에서 실행할 커맨드


DockerHub

  • Docker 이미지도 Github 처럼 공개적 저장소에 저장가능
  • Docker 이미지의 호스팅, 공유, 관리 및 배포에 최적화된 플랫폼

AWS Elastic Beanstalk

  • AWS 클라우드 인프라를 잘 알지 못해도 애플리케이션을 쉽게 배포할 수 있게 도와주는 완전관리형 서비스
  • EC2 보다 쉽게 인프라 유지
  • 자동으로 사용자가 필요한 인프라 요소들을 생성하고 연결
    • 서버 용량 조정
    • 로드밸런싱 추가/수정
    • 상태 모니터링
    • 배포 프로세싱

위 파일이 Elastic Beanstalk 에 전달되면 적절한 도커 이미지를 컨테이너 내부에 올림


Github Action 과 함께 사용하기


name: Deploy To Elastic Beanstalk

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Login to Docker hub
        uses: docker/login-action@v1
        with:
          username: ${{ secrets.DOCKERHUB_USERNAME }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}
      - name: Docker build and push
        uses: docker/build-push-action@v2
        with:
          push: true
          context: .
          file: ./Dockerfile
          tags: ${{ secrets.DOCKERHUB_USERNAME }}/market:latest
      - name: Beanstalk Deploy
        uses: einaregilsson/beanstalk-deploy@v20
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY}}
          aws_secret_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          application_name: ${{ secrets.AWS_APPLICATION_NAME }}
          environment_name: ${{ secrets.AWS_ENVIRONMENT_NAME }}
          version_label: ${{ github.run_id }}
          region: ap-northeast-2
          deployment_package: Dockerrun.aws.json

actions 가 Dockerhub 에 접근할 수 있도록 하고, Docker 이미지 내용인 Dockerfile 을 build. Dockerhub 에 push
actions 가 beanstalk 에 접근할 수 있도록 하고, Dockerrun.aws.json 파일에서 설정한 Dockerhub 주소의 Docker 이미지 연결 및 컨테이너 포트 생성

profile
안녕하세요

0개의 댓글