[Docker] 도커로 Node 웹 애플리케이션 배포하기 - 3. 가상 서버 호스팅 서비스에 서비스 배포하기

tkppp·2022년 7월 27일
0
post-thumbnail

저번 포스트에 이어서 가상서버 호스팅 서비스인 Vultr 에 서비스를 배포해보는 과정을 알아보겠습니다.

가상 서버란?

VPS는 하나의 물리서버를 여러 개의 가상 서버로 쪼개어 사용하는 것을 의미한다. 그렇게 쪼개어진 가상 서버를 여러 명의 클라이언트가 나누어 쓰는 것이다. 따라서 하나의 물리서버의 리소스를 다른 이들과 공유하지만 각자 독립적인 서버 공간을 가지는 것이 가능하다.

가상 서버 호스팅 서비스(VPS)

말 그대로 가상 서버를 호스팅해주는 클라우드 서비스이다. AWS Lightsail, Vultr, Digital Ocean 등등 VPS 서비스가 있다. 가장 익숙한 것은 아마존 웹 서비스가 제공하는 Lightsail 일것이다. 프리티어 기간에는 무료이지만 이후에는 월정액으로 과금된다.

VPS 서비스를 선택하는 기준은 여러가지가 있는데 필자는 서울 리전이 존재하고 한달 무료 크레딧 100$를 제공하는 Vultr 를 선택하였다.

추천 링크를 통해서 가입해야만 100$ 크레딧을 제공하므로(그냥 가입하면 50$로 알고 있음) 필요하다면 구글링하여 추천인 링크를 통해 가입하면 된다.

Vultr 인스턴스 생성

회원가입 후 로그인을 하고 인스턴스를 생성하는 것은 아래 포스트 참조
서버 구축하기(Vultr + hosting.kr) + 초기 설정

인스턴스 접속

인스턴스를 생성했다면 Vultr 가 제공하는 웹 콘솔을 사용하는 것도 방법이지만 해상도라던지 클립보드 사용이라던지 불편한점이 많다. 그래서 ssh 이용한 원격 접속으로 콘솔에 접속할 것이다.

$ ssh [user]@[ip]

ssh 설정을 따로 하지 않았다면 위와 같은 명령어로 쉽게 가상 서버 콘솔에 접속할 수 있다. 비밀번호를 누르고 접속에 성공했다면 아래와 같은 화면이 나타날 것이다.

도커 설치

ssh로 가상서버에 원격접속을 완료했으면 도커를 설치해야한다. 설치방법은 공식 문서 를 참조하자. 리눅스 배포판 별로 설치 방법이 상이하니 자신의 가상 서버 OS에 맞는 설치법을 찾아 설치하자.

도커 설치가 완료되었다면 docker --version 명령어로 잘 설치되었는지 확인하자.

이미지 받아오기

도커를 가상 서버에 설치했다면 이전 포스트에서 만들었던 이미지와 DB 이미지를 도커 허브에서 받아온다

$ docker pull [docker-id]/[image-name]
$ docker pull mysql

docker images 명령어로 이미지를 잘 받아왔는지 확인할 수 있다.

컨테이너 실행

이전 포스트에서 했던것과 같이 컨테이너를 백그라운드로 실행해주면 배포가 완료된다. 유의할 점은 앱이 DB 연결에 의존하기 때문에 DB 컨테이너를 앱 컨테이너보다 먼저 실행해야한다는 것이다.

$ docker run -d --name mysql-container \
-e MYSQL_ROOT_PASSWORD=tiffndla0423 \
-e LC_ALL=C.UTF-8 \
-p 3306:3306 \
-v mysql-vol:/var/lib/mysql \
mysql

$ docker run -d --name [container-name] \
-e DB_HOST=mysql-container \
--link mysql-container \
-p 80:8080 \
[image-name]

docker ps -a 명령어로 컨테이너가 잘 실행되었는지 확인할 수 있다.

마무리

배포가 끝났다. 도커 없이 배포한다면 가상서버에 필요한 환경 설정을 하고 mysql을 설치하고 또 db 설정을 진행한다음 git 을 설치하고 소스 코드를 클론하여 앱을 실행해야한다. 이 과정 속에서 문제가 생긴다면 아주 골치아파질 것이다. 이와 달리 로컬에서 배포 환경의 이미지를 만들었기 때문에 배포 환경에 도커를 설치하고 이미지를 받아 컨테이너를 실행하기만 하면 배포가 완료된다. 컨테이너와 호스트 OS는 격리되어 있기 때문에 호스트의 환경 설정은 불필요하다.

도커로 배포를 진행하는 것이 간편하긴 하지만 매 실행마다 긴 도커 명령어를 쳐야하는 점은 불편할 것이다. 이를 해결해주는 것이 Docker Compose 이다. 필요하다면 도커 컴포즈에 대해 알아보면 좋을 것이다.

0개의 댓글