Microsoft Student Ambassador가 되고 나서 Alpha 마일스톤으로 승급했다. 덕분에 Azure $150를 매달 지원받는데, 안 쓰면 아깝다. 기존에 University Student로서 지원받았던 계정에는 대략 5만원이 남았다. 빨리 해치우고 엠버서더 계정으로 갈아타야지! 하는 생각에 이 CI/CD 여정이 시작되었다.
Dockerfile
을 빌드하고 이미지를 Docker Hub에 올린다.먼저 GitHub repository 안에 아래처럼 .github/workflows/ci.yml
이라는 파일을 만들었다고 가정하자.
name: Docker Image CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: docker login
env:
DOCKER_USER: ${{secrets.DOCKER_USER}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASSWORD
- name: Build the Docker image
run: docker build --tag ${{secrets.DOCKER_USER}}/scraper:latest -f my_server/Dockerfile .
- name: docker push
run: docker push ${{secrets.DOCKER_USER}}/scraper:latest
여기서 이미지 이름은 scraper
이고, 태그 이름은 latest
이다. 그리고 Dockerfile
이 있는 폴더명은 GitHub repository 루트로부터 my_server/Dockerfile
이다.
→ Dockerfile
이 루트 디렉토리에 있는 게 아니라면 Dockerfile
내에서도 COPY할 때 신경 써야 한다. COPY . .
라고 하던 거를 COPY /my_server/. .
해야 함.
Secret 값들은 GitHub Settings에서 미리 넣어두어야 한다.
위처럼 workflow를 만들어주면 변경사항이 있을 때마다 Docker Hub에 올려주는 CI가 된다.
그리고 이제 Azure Container App을 하나 만든다.
연결 대상을 이처럼 Docker Hub로 설정하고, 이미지 이름과 태그에 {유저명}/{이미지명}:{태그명}으로 입력하여 연결하면 된다.
여기서 잠깐. 나는 Dockerfile
에서 EXPOSE 8000
을 하였다. 그런데 Azure Container App에서는 어떻게 접속하면 될까?
이렇게 수신 탭에 들어가서 HTTP 포트를 뚫어준다. 사진에는 잘렸지만 수신 트래픽도 '어디서나 트래픽 허용'으로 선택해야 한다. 그러면 엔드포인트로 들어갈 시 정상적으로 배포된 모습을 확인할 수 있다. 이렇게 CD도 완료.