GiitHub Actions로 Docker Image 구축 Push

Docker Hub의 자동 빌드가 작동하지 않기 때문에 GiitHub Actions로 이동하려고 시도했습니다.
필요조건으로 하다
  • 태그 후 Docker Image 만들기
  • Docker Hub Push 1 이미지
  • GiitHub Contaainer Registry의 Push 1 이미지
  • 두 개 다 한 예를 쓰면 두세 개가 될 수 있다.
    Circle CI용 기본 이미지 제작https://github.com/taka0125/circleci-ruby을 기반으로 한 글이다.
    라벨에서 루비 버전·번들러 버전 같은 것도 정하고 쓸데없는 짓도 하고

    시크릿 설정


    해당 창고의 Settings>Secrets에서 설정합니다.
    Doke Hub에 로그인할 로그인 정보 및 GiitHub Container Registry에 대한 로그인 정보 설정
  • DOCKER_USERNAME
  • Docker Hub의 사용자 이름
  • DOCKER_PASSWORD

  • https://hub.docker.com/settings/security로 발행된 액세스 토큰
  • PERSONAL_ACCESS_TOKEN

  • https://github.com/settings/tokens 발행된 GiitHub 액세스 토큰
  • write:packages의 권한
  • 의 이름 설정

    GiitHub Action 설정


    설정.github/workflows/docker.yml
    name: Publish Docker image
    
    on:
      push:
        tags:
          - '*'
    
    jobs:
      push_to_registry:
        name: Push Docker image to Docker Hub
        runs-on: ubuntu-latest
        steps:
          - name: Check out the repo
            uses: actions/checkout@v2
    
          - name: Set up Docker Buildx
            uses: docker/setup-buildx-action@v1
    
          - name: Cache Docker layers
            uses: actions/cache@v2
            with:
              path: /tmp/.buildx-cache
              key: ${{ runner.os }}-buildx-${{ github.sha }}
              restore-keys: |
                ${{ runner.os }}-buildx-
    
          - name: Prepare Build Arg
            id: prepare_build_arg
            run: |
              CURRENT_TAG=${GITHUB_REF#refs/tags/}
              echo ::set-output name=CURRENT_TAG::${CURRENT_TAG}
              echo ::set-output name=RUBY_VERSION::${CURRENT_TAG%-*}
              echo ::set-output name=BUNDLER_VERSION::${CURRENT_TAG##*-}
    
          - name: Log in to Docker Hub
            uses: docker/login-action@v1
            with:
              username: ${{ secrets.DOCKER_USERNAME }}
              password: ${{ secrets.DOCKER_PASSWORD }}
    
          - name: Build and push Docker image to Docker Hub
            uses: docker/build-push-action@v2
            with:
              push: true
              tags: taka0125/cimage-ruby:${{ steps.prepare_build_arg.outputs.CURRENT_TAG }}
              labels: |
                org.opencontainers.image.source=${{ github.event.repository.clone_url }}
              cache-from: type=local,src=/tmp/.buildx-cache
              cache-to: type=local,dest=/tmp/.buildx-cache-new
              build-args: |
                RUBY_VERSION=${{ steps.prepare_build_arg.outputs.RUBY_VERSION }}
                BUNDLER_VERSION=${{ steps.prepare_build_arg.outputs.BUNDLER_VERSION }}
    
          - name: Login to GitHub Container Registry
            uses: docker/login-action@v1
            with:
              registry: ghcr.io
              username: ${{ github.repository_owner }}
              password: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
    
          - name: Build and push Docker image to GitHub Container Registry
            uses: docker/build-push-action@v2
            with:
              push: true
              tags: |
                ghcr.io/${{ github.repository_owner }}/cimage-ruby:${{ steps.prepare_build_arg.outputs.CURRENT_TAG }}
              labels: |
                org.opencontainers.image.source=${{ github.event.repository.clone_url }}
              cache-from: type=local,src=/tmp/.buildx-cache
              cache-to: type=local,dest=/tmp/.buildx-cache-new
              build-args: |
                RUBY_VERSION=${{ steps.prepare_build_arg.outputs.RUBY_VERSION }}
                BUNDLER_VERSION=${{ steps.prepare_build_arg.outputs.BUNDLER_VERSION }}
    
          - name: Move cache
            run: |
              rm -rf /tmp/.buildx-cache
              mv /tmp/.buildx-cache-new /tmp/.buildx-cache
    

    Docker Hub용 설정


          - name: Log in to Docker Hub
            uses: docker/login-action@v1
            with:
              username: ${{ secrets.DOCKER_USERNAME }}
              password: ${{ secrets.DOCKER_PASSWORD }}
    
          - name: Build and push Docker image to Docker Hub
            uses: docker/build-push-action@v2
            with:
              push: true
              tags: taka0125/cimage-ruby:${{ steps.prepare_build_arg.outputs.CURRENT_TAG }}
              labels: |
                org.opencontainers.image.source=${{ github.event.repository.clone_url }}
              cache-from: type=local,src=/tmp/.buildx-cache
              cache-to: type=local,dest=/tmp/.buildx-cache-new
              build-args: |
                RUBY_VERSION=${{ steps.prepare_build_arg.outputs.RUBY_VERSION }}
                BUNDLER_VERSION=${{ steps.prepare_build_arg.outputs.BUNDLER_VERSION }
    
    이 섹션은 Docker Hub에 대한 설정입니다.

    GiitHub Contaainer Registry용 설정


          - name: Login to GitHub Container Registry
            uses: docker/login-action@v1
            with:
              registry: ghcr.io
              username: ${{ github.repository_owner }}
              password: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
    
          - name: Build and push Docker image to GitHub Container Registry
            uses: docker/build-push-action@v2
            with:
              push: true
              tags: |
                ghcr.io/${{ github.repository_owner }}/cimage-ruby:${{ steps.prepare_build_arg.outputs.CURRENT_TAG }}
              labels: |
                org.opencontainers.image.source=${{ github.event.repository.clone_url }}
              cache-from: type=local,src=/tmp/.buildx-cache
              cache-to: type=local,dest=/tmp/.buildx-cache-new
              build-args: |
                RUBY_VERSION=${{ steps.prepare_build_arg.outputs.RUBY_VERSION }}
                BUNDLER_VERSION=${{ steps.prepare_build_arg.outputs.BUNDLER_VERSION }}
    
    이 섹션은 GiitHub Contaainer Registry 설정에 사용됩니다.
    Docker Hub과 다를 게 없습니다.

    제출,Push,라벨 붙이기

    3.0.0-node-2.3.4 레이블cimage/ruby:3.0.0-node를 바탕으로bundler2.3.4의 이미지를 추가하여 완성합니다.
    Docker Hubhttps://hub.docker.com/repository/docker/taka0125/cimage-ruby
    GiitHub Contaainer Registry는 https://github.com/taka0125/circleci-ruby/pkgs/container/cimage-ruby
    GiitHub Contaainer Registry 측은 애초 이미지를 Push한 뒤 이미지를 Public으로 만들어 창고를 링크하거나 수동으로 설정했다.
    이것도 GiitHub Actions로 하면 되는데...

    좋은 웹페이지 즐겨찾기