개요
Docker hub에서 운영하던 도커 이미지를 Github으로 배포하기 위함.
Github Actions를 사용하여 자동으로 컨테이너 이미지를 릴리스해보는 연습을 해보자
요구사항
- Hello World를 출력하는 노드 서버를 도커 이미지로 빌드
- 빌드된 이미지를 나의 Docker hub에 업로드
- 도커 이미지를 빌드하는 워크플로우 작성
Dockerfile 배포하기
Dockerfile 작성
FROM node:14
WORKDIR /app
COPY ./package.json .
RUN npm install
COPY . .
ARG PORT=4000
EXPOSE ${PORT}
WORKDIR server/
CMD ["node","server-express.js"]이미지 빌드
$ docker build --tag YOUR-HUB/node-server:latest -f Dockerfile .이미지 목록 출력
$ docker images | grep "^YOUR-HUB/node-server"
YOUR-HUB/node-server        latest    bf7148e0192c   About an hour ago   863MBDocker hub repository 생성

Docker hub에 이미지 배포
$ docker push YOUR-HUB/node-server:latest
latest: digest: sha256:1137ec3dcad57308cf6ad6560b168ebf3a274efeb540c4ddab5f5894bc07da24 size: 3253환경변수 설정하기
민감한 정보를 YAML 파일에 그대로 입력해 commit 기록에 남겨두는 것은 치명적 보안 위험을 초래할 수 있으므로 깃허브에서 제공하는 환경 변수를 활용하여 사용하도록 하자

워크플로우 작성하기
build.yml
name: build docker image
on:
# 릴리즈는 배포 가능한 소프트웨어 반복으로,패키지 하여 더 많은 사용자가 다운로드, 사용 가능
  release: # 릴리즈 작업 발생 시 해당 워크플로우 실행
    types: 
      - published
jobs:
  build-image:
    runs-on: ubuntu-latest
    steps:
      - name: "1. github runner에 레포지토리 체크아웃"
        uses: actions/checkout@v2
      - name: "2. Docker hub Login"
        uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9
        with:
          # 레파지토리 setting에서 secret 설정
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - name: "3. Create metadata"
        id: meta
        uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38
        with:
          images: YOUR-HUB/node-server
      - name: "4. docker image build & push"
        uses: docker/build-push-action@ad44023a93711e3deb337508980b4b5e9bcdc5dc
        with:
          context: node-server/
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}새로운 릴리스 발행
repository 오른쪽 사이드바의 Release 클릭 후 Create a new release 클릭하여 새로운 릴리스를 발행해보자.

나는 현재 이미 발행된 릴리스가 있으므로 수정한 후 push 해보겠다.
 

Actions 빌드 결과 확인

Docker hub 배포 확인
내 Docker hub repository에 node-server 이미지가 정상적으로 배포되었는지 확인해보자 ...

