2023-01-12 12:40:51

깃허브 액션을 사용하여 master 브랜치에 push하는 순간 자동으로 도커 이미지가 빌드되어 도커허브 레포지토리에 push되게 하는 절차를 정리해보겠습니다. 

 

1. 우선 Dockerfile을 작성합니다. 저는 테스트용으로 간단한 플라스크 앱을 만들었기 때문에 다음과 같이 작성했습니다. Dockerfile은 프로젝트마다 다르게 작성되어야 할 것이므로 각자 커스터마이징해서 작성하는 것으로 하겠습니다. 

 

FROM python:3.10.5-slim

WORKDIR /usr/src/app

COPY . .

RUN pip3 install -r requirements.txt

EXPOSE 5000

CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]

 

2. 프로젝트 경로 안에 .github 폴더를 만들고 또 그 .github 폴더 안에 workflows 폴더를 생성합니다. 

 

3. .github/workflows/ 폴더 안에 deploy-image.yml 파일을 만들고 다음과 같은 내용을 작성합니다. .yml 파일의 이름은 달라도 상관없습니다. 가장 밑에 tags 부분에는 여러분의 "도커허브아이디/이미지명:태그명"을 넣어주셔야 합니다. 저는 master 브랜치에 푸쉬할 때 자동으로 도커 이미지가 빌드되고 푸쉬되게 했는데 만약 다른 브랜치, 예를 들어 release 브랜치에 push할 때 작업이 되게 하려면 상단에 있는 branches에 master 대신 release를 넣어주시면 됩니다. 

 

name: Build and Push Docker Image
on:
  push:
    branches:
      - master
jobs:
  build-and-push-image:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@v2

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v1

    - name: Login to DockerHub
      uses: docker/login-action@v1
      with:
        username: ${{ secrets.DOCKERHUB_USERNAME }}
        password: ${{ secrets.DOCKERHUB_TOKEN }}

    - name: Build and push
      id: docker_build
      uses: docker/build-push-action@v2
      with:
        push: true
        tags: kyohoonsim/flask-k8s-test:0.1

 

4. 현재 프로젝트와 연결되어 있는 깃허브 레포지토리에서 설정(Settings) 탭으로 들어가서 좌측 사이드바에서 [Security] - [Secrets and variables] - [Actions]에 들어갑니다. 

 

5. [New repository secret] 버튼을 클릭한 후에 DOCKERHUB_USERNAME에는 도커허브 아이디를 넣고, DOCKERHUB_TOKEN에는 도커허브 비밀번호를 넣어줍니다. 다음 그림과 같이 생성되면 됩니다. 

 

 

6. 이제 모든 준비가 되었으니 프로젝트에서 master 브랜치로 push 해봅니다. 

 

7. push 했다면 깃허브에서 해당 레포지토리의 Actions 탭에 들어갑니다. 다음과 같이 초록색 불이 들어오면 제대로 작업이 수행된 것입니다. 프로젝트 사이즈에 따라 시간이 좀 걸릴 수 있습니다. 

 

 

8. 도커허브에 가서 이미지가 잘 push되어 있는지 확인합니다. 잘 push 되었네요.^^