도커, 쿠버네티스, 컨테이너, 오케스트레이션... 나만 빼고 다 아는 것 같아 간단한 튜토리얼을 진행해보았다.
Docker 이미지를 Heroku에 배포하는 간단한 실습
이렇게 두 가지 방식이 있고 상단의 Container Registry를 이용해서 배포를 진행할 것이다.
그런데 🧞
Docker와 같은 Container 기술을 사용해 Heroku Elasticbeanstalk과 같은 PaaS를 제공하는데
'다시 PaaS에 Container를 올린다?'
의문이 든다. 어떤 장점을 가질 수 있을까. 나같은 경우에는 기존에 히로쿠에 배포하던 서비스를 도커 연습삼아 히로쿠에 올리는 실습을 하려 한 건데.. 내 프로젝트의 경우에는 환경변수 말고는 개발 환경에 따른 추가 설치 혹은 설정을 할 필요가 없었고 고로 굳이 Docker를 사용한다쳐도 장점이 없다. 내 경우엔 백프로 연습으로 귀결. 그래서 도커를 히로쿠에서 지원하는 이유는?
여기 나와있는데 Orchestration을 지원하니 어찌보면 쿠버네티스 느낌의 장점을 가질 수도 있다고 할지언정 사용은 안 할듯. Heroku 관련 문서는 공식 문서 제외 찾기가 쉽지 않다. 국산이라면 더더욱..
실습 진짜 시작
확실히 서론이 본론보다 길 것 같은 예감이 든다
Docker 설치가 되어있고 Heroku CLI가 설치 되어있고 Heroku Login(on cli) 가 되어있는 환경
프로젝트 루트 디렉토리에 Dockerfile을 만든다. 확장자 없는 이름이 'Dockerfile'인 파일, 이미지 생성시 알아서 인식하고 해당 Dockerfile에 나와있는 Step 대로 빌드해줌.
Dockerfile
FROM node:12
# app dir 생성
WORKDIR /src/app
# package-lock까지 가져가자
COPY package*.json ./
RUN yarn
COPY . .
EXPOSE 5000
CMD yarn run dev
Heroku command
heroku container:login
heroku create
heroku container:push web
heroku container:release web
heroku open
저 5줄이면 Docker image를 생성하고 heroku에 배포한다. heroku open을 통해 15초 정도 후에 바로 나온다. 위에 Dockerfile은 내가 Heroku 이전에 로컬에서 Docker로 이미지 만들고 배포했을 때 사용한 것이니 그냥 허전함 달래기 용.
Heroku Dashboard 들어가보면 요상한 이름의 Container가 올라가 있는 것을 확인할 수 있고 이름도 변경할 수 있다. 후다닥 끝내고 나니 Heroku와 Docker의 관계에 대해 궁금증만 증폭되었다. 나중에 다시 포스팅 하겠음!