현재 프로젝트에 적용된 docker 플로우는 다음과 같습니다.

git aciton 의 gradle.yml 파일을 이용하여 docker 이미지 빌드를 하여 ec2 인스턴스를 이미지화 합니다.

auto scaling 적용 후 시작 템플릿의 script 에 docker 플로우를 작성해주었습니다.

gradle.yml

# docker 이미지 빌드
    - name: Docker build
      run: |
        sudo docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
        sudo docker build -t app .
        sudo docker tag app ${{ secrets.DOCKER_USERNAME }}/ff:latest
        sudo docker push ${{ secrets.DOCKER_USERNAME }}/ff:latest
  1. Docker 레지스트리에 로그인합니다
  2. 현재 디렉토리(.)에 있는 Dockerfile을 사용하여 Docker 이미지를 빌드합니다. 이미지의 이름은 "app"으로 지정됩니다.
  3. 이전에 빌드한 "app" 이미지에 새로운 이름과 태그를 지정합니다.
  4. 이전 단계에서 태그한 이미지를 Docker 레지스트리로 푸시합니다.

시작 템플릿 script

#!/bin/bash 
sudo docker pull flashfrenzy/ff:latest
sudo docker stop $(sudo docker ps -a -q) 
sudo docker run -d --log-driver=syslog -p 8080:8080 flashfrenzy/ff:latest 
sudo docker rm $(sudo docker ps --filter 'status=exited' -a -q)
sudo docker image prune -a -f
  1. #!/bin/bash → bin/bash를 사용하겠다는 명령어
  2. 최신 docker 이미지 다운
  3. 현재 실행 중인 docker container 정지
  4. 최신 docker 이미지로 신규 docker container 실행
  5. 정지되어 있는 모든 docker container 삭제