Github Actions 에서 바로 docker 이미지를 만들어 hub 에 올려놓을 수 있다.
그렇게 되면 docker hub 에 있는 이미지를 EC2 가 pull 해서 실행할 수 있을 거다.
일단 docker hub 에 이미지를 올리는 것 까지 해보자.
일단 나는 nodejs
를 배포할 거다. java
배포는 설치방법과 jar 파일의 실행만 다를 뿐 큰 틀에서 비슷하다.
준비물: Git repo
, Docker hub 아이디
우리는 Docker Access Token 도 만들었고, Github 에 Repo 는 당연히 준비되었다.
token 만 secrets 에 잘 적어놓으면 된다.
여느때와 다름 없이 github Actions
에서 새로운 yml 파일을 만들어주고 코드를 적어넣자.
name: 'deploy'
on: push
jobs:
build:
name: Build
runs-on: ubuntu-latest
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v2
with:
node-version: '18.10.0'
- name: Install Dependencies
run: npm install
- name : Npm Build
run: unset CI && npm run build
# 여기 까지는 여느 빌드와 다름 없다.
docker:
name: Deploy Docker Image
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push
uses: docker/build-push-action@v3
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/우리가 만들 docker repo 이름
- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
도커에 로그인 하기 위해서 도커 아이디를 secrets username
에 적고
access token 을 secrets password
에 적었다.
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push
uses: docker/build-push-action@v3
with:
context: .
file: ./Dockerfile
push: true
tags: ${{ secrets.DOCKER_USERNAME }}/우리가 만들 docker repo 이름
buildx 를 사용해 builder 인스턴스를 만들고
앞으로 작성할 Dockerfile
을 보고 docker 이미지를 만들어 우리가 만들 docker repo
에 push 하도록.
yml 파일은 끝났으니
Dockerfile 을 작성해줘야한다.
repo 의 root 폴더에 만들면 된다. gitignore 가 있는 그 곳
나는 간단하게 github repo 에서 만들었다.
우선
.dockerignore
를 만들어 /node_modules
를 적어준다.
그리고 Dockerfile
을 만들어서
FROM node:12
MAINTAINER 도커username <도커 가입 이메일>
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]
WORKDIR
: 작업 폴더 설정
COPY A B
: A 를 B에 추가
EXPOSE 3000
: 3000 포트로 열기
CMD
: 컨테이너를 시작하면 실행됨
Github Actions 에서의 작업이 모두 끝나면
Docker hub 의 Repo 에 가보면 우리가 적어준 docker repo 이름으로 repo 가 생성되어있고
그 안에
latest 라는 태그의 이미지가 하나 만들어져있다.
성공
이제 어떻게 이미지를 실행시키지...?
EC2 에서 docker run 뭐시기 하면 먹통이 되는데.. 제대로 하고 있는 게 맞나...