Official build-push-action README
git action docker buildx
기본적으로 CI/CD 툴을 사용해서 Docker 이미지를 빌드를 여러번 수행 했을 경우
로컬 환경해서 빌드를 여러번 했을 경우처럼 캐시가 적용되어서 변경 사항이 있는 이미지 레이어만 빌드 수행하기 때문에 빌드 시간이 줄어든다
하지만 Git Action에서는 Docker 이미지를 빌드하는 환경이 매 번 바뀌기 때문에
Git Action이 작동하는 가상환경에 캐시를 적용할 수 있는 이미지 레이어 데이터가 없어 캐시를 적용하기 위해서는
docker/build-push-action을 설정해주면 따로 이미지 데이터가 없어도 캐시를 적용시킬 수 있는 Cache backend API을 제공한다
이에 대한 자세한 Buildkit 내용은 여기에 있다 Buildkit
주로 많이 범용적으로 사용하는 AWS ECR에 이미지를 푸시하는 Action 파일을 작성하였다
name: Docker Build
on:
push:
branches:
- 'main'
jobs:
build:
name: docker build and push
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ap-northeast-2
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@v1
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: main Environment Docker build & Push Docker image to Amazon ECR
uses: docker/build-push-action@v2
if: contains(github.ref, 'main')
env:
ECR: ${{ steps.login-ecr.outputs.registry }}
TAG: ${{ github.sha }}
with:
context: .
push: true
tags: |
${{env.ECR}}/tag:main
${{env.ECR}}/tag:main-${{env.TAG}}
cache-from: type=gha
cache-to: type=gha,mode=max
build-args: |
ENV=main
단순히 Git Action에서 캐시를 적용시킨다고만 해서는 빌드시간을 크게 단축할 수는 없고
기본적인 Dockerfile의 최적화도 진행해줘야한다 Dockerfile의 최적화 내용은 다음 포스트에서 다룰거다