JoungSik/GitHub Packages 에 Docker Container 배포하기

Created Thu, 21 Oct 2021 23:59:59 +0900 Modified Sat, 31 Dec 2022 01:31:35 +0900

GitHub Packages 에 Docker Container 배포하기

최근 회사 프로젝트에서 Docker Image 를 공개적으로 오픈하게 되었습니다.

원래는 DockerHub 를 사용하고 있었지만 관리 측면에서 Dockerfile 파일이 있는 GitHub 에 같이 두는게 좀 더 정리된 느낌을 받아서 이번엔 GitHub Packages 에 공개적으로 올리고 이를 서버에서 From 으로 받아 서버 도커 이미지를 만들어 내는 과정까지 해보려고 합니다.

설정

베이스가 되는 Dockerfile 을 작성해줍니다.

FROM ruby:3.0.0

# Install dependencies
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

# Set an environment variable where the Rails app is installed to inside of Docker image:
RUN mkdir /run-data
RUN mkdir -p /workspace
RUN mkdir -p /workspace/tmp
RUN mkdir -p /workspace/tmp/pids

이후 .github/workflows/published.yml 파일을 작성해줍니다.

name: Publish Docker image

on:
  push:
    branches: master

jobs:
  build-and-push-image:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v2

      - name: Log in to the Container registry
        uses: docker/login-action@v1
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.TOKEN }}

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v1

      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v1
      
      - name: Build and push Docker image (rails api server)
        uses: docker/build-push-action@v2
        with:
          context: .
          file: ./base-api-server/Dockerfile
          push: true
          tags: ghcr.io/company/base-image:latest

환경 변수로 받게 되는 TOKEN 값을 GitHub 홈페이지에서 입력해줍니다.

organizations 설정 페이지에서 Secrets 를 공유하는 방법도 있지만 유료 플랜이고 현재 회사에서는 유료로 GitHub 을 사용하고 있지 않아 개별 저장소로 가서 TOKEN 값을 입력합니다.

1

TOKEN 값을 입력하는 방법은 예전 블로그에 작성해두었습니다.

2

이제 Public 으로 설정을 바꿔주고 다시 dockerfile 을 수정해 packages 와 연결을 해줍니다.

3

FROM ruby:3.0.0
LABEL org.opencontainers.image.source https://github.com/OWNER/REPO

# Install dependencies
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

# Set an environment variable where the Rails app is installed to inside of Docker image:
RUN mkdir /run-data
RUN mkdir -p /workspace
RUN mkdir -p /workspace/tmp
RUN mkdir -p /workspace/tmp/pids

그러면 다음처럼 깔끔하게 정리되어 나옵니다.

4

5

적용

다음은 이런 도커 컨테이너를 불러와 작업하는 방법 입니다.

FROM ghcr.io/company/base-image:latest

상단 부분만 변경해주면 됩니다.