앱 플랫폼: 미리 빌드된 컨테이너 이미지를 푸시로 자동 배포

App Platform은 처음부터 DOCR(DigitalOcean Container Registry)에서 실행되는 컨테이너 이미지를 지원했지만 많은 요청을 받은 기능은 새 이미지가 특정 태그로 푸시될 때 컨테이너를 자동 배포하는 기능입니다. 최신 릴리스에서는 이 기능이 추가되었으며 모두 사용할 수 있습니다!

Note: this feature is not supported for DockerHub.



자동 배포 작동 방식



앱 플랫폼의 DOCR 이미지 구성 요소에 대해 자동 배포가 활성화되면 컨테이너 레지스트리가 모니터링되고 새 이미지 푸시 앱 플랫폼에서 대상 태그에 대한 이미지 다이제스트를 확인하고 새 이미지가 배포되는 가장 최근에 배포된 버전과 다른 경우 확인합니다.

즉, 태그를 푸시할 때 해당 이미지의 최신 버전을 나타내는 설명 태그를 사용하고 싶을 것입니다. 예를 들어 production , staging , dev 가 일반적입니다.

자동 배포 활성화



UI: 생성 중



앱 또는 구성 요소를 생성할 때 DOCR 리포지토리 및 이미지를 선택한 다음 Autodeploy 확인란을 선택합니다.



UI: 기존 이미지 구성요소



이미 배포된 DOCR 이미지가 있는 경우 해당 구성 요소의 설정에서 자동 배포를 활성화할 수 있습니다.



앱 사양: 사양 내에서 활성화



고급 사용자의 경우 자동 배포를 활성화하는 것은 기존 이미지 사양에 작은 yaml 구조를 추가하는 것만큼 쉽습니다.

deploy_on_push:
  enabled: true



예를 들어:

name: docr-autodeploy-example
region: ams
services:
- http_port: 8080
  image:
    deploy_on_push:
      enabled: true
    registry_type: DOCR
    repository: go-info-webserver
    tag: latest
  instance_count: 1
  instance_size_slug: basic-xxs
  name: go-info-webserver
  routes:
  - path: /



GitHub Actions 예시



GitHub Actions의 팬으로서 다음을 수행하는 간단한 워크플로가 있습니다.
  • 두 개의 태그를 사용하여 도커 이미지를 빌드합니다.
  • git 커밋 짧은 해시
  • latest

  • doctl 명령줄 도구를 설치합니다
  • .
  • DigitalOcean 계정에 연결된 레지스트리로 인증합니다
  • .
  • 모든 태그가 있는 이미지를 푸시합니다
  • .
    latest 이미지 태그를 대상으로 하는 위의 앱 사양과 함께 기본 이미지가 변경되면(다이제스트 확인을 통해) 새 이미지가 배포됩니다. 다이제스트가 변경되지 않은 경우 배포가 발생하지 않습니다.

    name: Push Docker Image to DOCR
    
    on:
      push:
        branches: ["master"]
    env:
      REGISTRY: "registry.digitalocean.com/jon"
      IMAGE_NAME: "go-info-webserver"
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Build the Docker image
          run: docker build --file docker/Dockerfile --tag $(echo $REGISTRY)/$(echo $IMAGE_NAME):$(echo $GITHUB_SHA | head -c7) --tag $(echo $REGISTRY)/$(echo $IMAGE_NAME):latest .
    
        - name: Install doctl
          uses: digitalocean/action-doctl@v2
          with:
            token: ${{ secrets.DIGITALOCEAN_ACCESS_TOKEN }}
    
        - name: Auth with DOCR
          run: doctl registry login --expiry-seconds 1000
    
        - name: Push image to DOCR
          run: docker push $(echo $REGISTRY)/$(echo $IMAGE_NAME) --all-tags
    
    


    When an image is pushed to a registry with a tag that has already been used, the new image will take that tag, untagging the old image.

    좋은 웹페이지 즐겨찾기