개요
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 863MB
Docker 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 이미지가 정상적으로 배포되었는지 확인해보자 ...