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 값을 입력합니다.
TOKEN 값을 입력하는 방법은 예전 블로그에 작성해두었습니다.
이제 Public 으로 설정을 바꿔주고 다시 dockerfile 을 수정해 packages 와 연결을 해줍니다.
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
그러면 다음처럼 깔끔하게 정리되어 나옵니다.
적용
다음은 이런 도커 컨테이너를 불러와 작업하는 방법 입니다.
FROM ghcr.io/company/base-image:latest
상단 부분만 변경해주면 됩니다.