docker

9-1. github action, Dockerrun.awe.json, VPC, Security Group

nathaneast 2024. 6. 24. 14:05

따라하며 배우는 도커와 CI환경

 

github action

name: Deploy FullStackApp
on:
  push:
    branches:
      - main 

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      # 도커 로그인
      - run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
      # 프론트엔드 테스트를 위한 빌드
      - run: docker build -t nathaneast/react-test-app -f ./frontend/Dockerfile.dev ./frontend
      # 프론트엔드 테스트 스크립트 실행
      - run: docker run -e CI=true nathaneast/react-test-app npm test
      # 소스코드 빌드
      - run: docker build -t nathaneast/docker-frontend ./frontend
      - run: docker build -t nathaneast/docker-nginx ./nginx
      - run: docker build -t nathaneast/docker-backend ./backend
      
      # 도커 허브로 이미지를 전송
      - run: docker push nathaneast/docker-frontend
      - run: docker push nathaneast/docker-nginx
      - run: docker push nathaneast/docker-backend

      - name: Generate deployment package
        run: zip -r deploy.zip . -x '*.git*'
        
      # AWS EB에서 도커 허브에있는 이미지 가져온 후 배포
      # 이미지에서 빌드가 되었기 때문에 빌드하지 않음
      - name: Deploy to EB
        uses: einaregilsson/beanstalk-deploy@v18
        with:
          aws_access_key: ${{ secrets.AWS_ACCESS_KEY }}
          aws_secret_key: ${{ secrets.AWS_SECRET_KEY }}
          application_name: fullstack-ex-app
          environment_name: Fullstack-ex-app-env
          existing_bucket_name: elasticbeanstalk-ap-northeast-2-992382706228
          region: ap-northeast-2
          version_label: ${{ github.sha }}
          deployment_package: deploy.zip

Dockerrun.awe.json

- 도커 파일이 다수 있을경우 어떤 파일을 먼저 실행, 행동 취할건지, 설정 등  코드로 명시

- 멀티컨테이너 도커 환경에서 사용

 

Dockerrun.awe.json

  • essential: 컨테이너가 실패한경우 작업 중지 여부

VPC

  • AWS 클라우드 공간에서 공간을 격리하는것
  • AWS RDS에서 나의 소스코드 데이터 베이스와 연결해야 통신 가능함
  • 인스턴스에서 해당 계정만 접근 가능하도록 함
  • EB, rds 생성시 자동으로 VPC 생성되고 지역별로 다르게 할당 됨 

Security Group

  • EC2, EB와 같은 인스턴스 인바운드, 아웃바운드 사이 방화벽을 둠
  • 인바운드, 아웃바운드를 통제함

p.s)

- 인바운드: 인스턴스로 요청을 받는것 (HTTP, HTTPS, SSH)

- 아웃바운드: 인스턴스에서 외부로 응답을 하는것 (파일 다운로드, 트래픽 처리 후 응답)

EB, RDS 통신 설정

  • VPC, Security Group 사용하여 EB, RDS 통신 가능하도록 설정
  • 같은 VPC안에 있는 AWS 서비스는 트래픽을 모두 허용할 수 있도록 보안그룹을 설정해줌

적용방법

  • VPC에서 보안 그룹 생성 -> RDS, EB에서 생성한 보안 그룹 추가
  • EB에서 컨테이너들이 RDS 환경변수 인식 가능하도록 설정
    • DB 호스트, 유저, 패스워드, 포트 등