호돌찌의 AI 연구소
article thumbnail

이전 글에서 CI 관련된 내용을 알려드렸습니다. Docker Image를 Build 하고, 생성한 Image를 Docker Hub에 Push 하는 내용을 다루겠습니다. 그전에 Dockerhub에 먼저 가입을 따로 하셔서 계정을 생성을 해두시길 바랍니다. 

 


Push를 하기 위한 Workflow를 설명하면 다음과 같습니다. 

  • 작성한 App을 빌드한다
  • Docker 이미지로 생성한다
  • Docker Repository로 추가한다

 

우선 app을 빌드하는 내용부터 시작하겠습니다. 

Dockerfile 예제는 여기에서 들고 옵니다. app.py라고 만듭니다. 

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, Docker!'

 

그 후 이전 글에서 만든 branch에서 app.py를 만듭니다.

 

 

이제 아래와 같은 Dockerfile을 만듭니다.

# syntax=docker/dockerfile:1

FROM python:3.8-slim-buster

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt

COPY . .

CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]

 

requirements.txt를 요구하는데, 이 파일도 만들어야 합니다. flask만 추가하면 됩니다. 

 

 

마지막으로 위의 Dockerfile까지 추가합니다. (정석적인 방법으로는 ide위에서 만들어서 github add, push 작업을 하는 것을 권장합니다.)

 

 

 

 

 

 

이제 작업은 거의 끝났습니다. 이제 github actions를 이용해서 Dockerfile을 build 하고, DockerHub에 push 하는 것이 목표입니다.

github-actions-app이라는 이름으로 repo를 생성

 

Docker build & push action github는 아래와 같습니다.

https://github.com/marketplace/actions/docker-build-push-action

 

Docker Build & Push Action - GitHub Marketplace

Builds a Docker image and pushes to a private registry with support for multiple tags

github.com

 

이 부분이 support 하는 것은 github registry, Docker hub 등도 지원해주며, 기본적인 사용방법과 각 지원처에서 사용하는 방법들이 전부 들어있습니다. 그전에 github repository에서 dockerhub repository로 가려면 인증정보를 반드시 기입하여야 합니다. 

 

1) docker hub > account settings > security 가서 Access Token을 발급을 받습니다. 반드시 발급받은 토큰을 따로 저장을 해두셔야 합니다. 

 

2) 이제 넣고자 하는 github repo에서 setting > secrets > New을 들어가서 secret 설정 정보를 반영합니다. 하나씩 Name과 Value를 기입하여야 합니다. 

DOCKER_USERNAME은 dockerhub ID, DOCKER_PASSWORD는 1번에서 발급받은 Access Token입니다. 

이제 Build, Push 할 준비가 끝났습니다. 

 

3) Docker Usage 아래에 Input에 다양한 것들이 있는데, Required가 Yes인 경우에는 반드시 작성하여야 합니다. Image, Registry 이외에는 옵션입니다. 

 

4) 최종 ci.yml 최종본을 아래와 같이 작성합니다. 


name: Python application

on:
  push:
    branches: [ python-ci-workflow ]
  pull_request:
    branches: [ python-ci-workflow ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python
      uses: actions/setup-python@v2
      with:
        python-version: "3.8"
    - name: Display Python version
      run: python -c "import sys; print(sys.version)"
    - name: Build & push Docker image
      uses: mr-smithers-excellent/docker-build-push@v5
      with:
        image: # hotorch/github-actions-project
        tags: v3, latest
        registry: docker.io
        username: ${{ secrets.DOCKER_USERNAME }} # hotorch
        password: ${{ secrets.DOCKER_PASSWORD }} # access token

 

5) 이를 이제 github actions를 확인해보러 가겠습니다. Step이 진행되고 있음을 알 수 있습니다. 

 

6) Docker hub에 반영되는 시간이 걸립니다. 네트워크에 따라서 반영되는 시간이 10분 정도까지 길어질 수 있습니다. Tags내용이 dockerhub에 정상적으로 표시가 되면 반영이 된 것입니다. 

 

이번 글들은 MLOps보다는 개발자 분들이 자주 하는 작업들에 대한 내용들이었습니다. 다음 글에서는 DVC과 CML이라는 오픈소스를 이용하여 Model Metric Tracking에 대한 내용을 Github Actions을 활용하는 글로 찾아뵙겠습니다. 

 


https://bit.ly/37BpXiC

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

 

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.

 

 

 

 


profile

호돌찌의 AI 연구소

@hotorch's AI Labs

포스팅이 도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!