Github Actions - Docker 이미지 빌드 및 푸시하기
목차
인트로
Docker를 이용한 개발을 하는 경우에 이미지를 빌드하여 레지스트리에 저장하는 프로세스 반드시 필요한 작업입니다. Docker의 장점인 이식성이 레지스트리 덕분에 더 높아진 것도 있죠. 하지만 이미지를 빌드하고 레지스트리로 푸시하는 작업은 귀찮은 작업입니다. Github Actions를 이용해 이 작업을 자동화할 수 있는 방법을 알아보겠습니다. Github Actions MarketPlace에는 다양한 Action들이 있는데요. 제가 자주 사용하는 방법을 공유해 보도록 하겠습니다.
docker-build-push
제가 애용하는 Action입니다. SO EASY하게 이미지 빌드 및 푸시작업을 실행할 수 있습니다. 여러 Registry를 지원합니다. 사용법을 알아보겠습니다. 매우 간단합니다.
Docker Hub
name: Docker hub registry Build and Push
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- id: commit
uses: pr-mpt/actions-commit-hash@v2
- name: Build and Push to Docker Hub
uses: mr-smithers-excellent/docker-build-push@v6
with:
image: ${{ secrets.DOCKER_HUB_USERNAME}}/image-name
tags: ${{ steps.commit.outputs.short }}, latest
registry: docker.io
dockerfile: Dockerfile
username: ${{ secrets.DOCKER_HUB_USERNAME }}
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
- 우선 도커 허브의 아이디와 비밀번호를 Repository Secret으로 등록합니다. Github Repository에서 Secret으로 등록하시거나
- VSCode를 사용한다면 Github Actions Extension을 사용해서 추가할 수도 있습니다.
- image는 docker hub username / image name 형식으로 넣어줍니다.
- tags는 원하는 태그를 넣으면 되고 ,(콤마)를 이용해서 복수의 태그를 달 수 있습니다.
- 예제에서는 commit 해시 와 latest를 넣었습니다.
- 나머지는 위의 예시에서 보이는대로 고정입니다.
ECR
ECR도 크게 다르지 않습니다.
name: ECR Build and Push
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- id: commit
uses: pr-mpt/actions-commit-hash@v2
- name: Build and Push to ECR
uses: mr-smithers-excellent/docker-build-push@v6
with:
image: image-name
tags: ${{ steps.commit.outputs.short }}, latest
registry: [aws-account-number].dkr.ecr.[region].amazonaws.com
dockerfile: Dockerfile
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- image는 docker hub에 저장할 때와 다르게 image이름만 적어줍니다. ex) fastapi-project
- ECR의 Repository 이름 이기도 합니다.
- tags는 docker hub에 적용한 방법과 동일합니다.
- registry는 이렇게 생긴 ECR URI를 넣어주면 됩니다. ex)123456789012.dkr.ecr.ap-northeast-2.amazonaws.com
AWS_ACCESS_KEY_ID
,AWS_SECRET_ACCESS_KEY
를 secret 으로 넣어주면 됩니다.- Private Registry와 관련하여 IAM ROLE에 ECR관련 권한이 필요하니 추가해야합니다.
- 아래 이미지는 ecr관련 정책을 생성한 예시입니다.
마무리
Docker 이미지를 Github Actions를 이용해 Docker Hub와 ECR에 제가 자주 사용하는 Action을 이용해서 저장하는 방법을 알아봤습니다. 공유드린 내용 이 외에 더 알아보고 싶은 분들은 아래 링크에서 살펴보시기 바랍니다. Market Place를 찾아보면 이미지 빌드와 관련해서 더 많은 action들이 존재하니 더 많이 찾아보고 싶은 분들은 찾아봐도 좋겠습니다.
Loading...