#2 Linux, Docker, K8S에서 각각 배포해보기


Linux 환경에서의 배포

사전 준비사항

- node 설치

vi hello.js

var http = require('http')
var content = function(req, resp) {
  resp.end('Hello world!' + '\n')
  resp.writeHead(200)
}
var w = http.createServer(content)
w.listen(8000)

리눅스 안에 node js를 설치하고, 웹 서버를 오픈한 뒤 해당 8000포트로 진입 시 “hello world” 를 출력

Docker 환경에서의 배포

사전 준비사항

- docker 엔진 설치
- node는 설치가 안된 상태

vi hello.js 파일 생성

var http = require('http')
var content = function(req, resp) {
  resp.end('Hello world!' + '\n')
  resp.writeHead(200)
}
var w = http.createServer(content)
w.listen(8000)

Dockerfile 파일 생성

FROM node.slim # node 이미지를 가져와서 node가 설치되어 있는 환경를 구축
EXPOSE 8000 # 8000번 포트를 개방
COPY hello.js . # 현재 폴더 안에 있는 hello.js 파일을 현재 컨테이너의 디렉토리(.)에 복사
CMD node hello.js # 컨테이너가 생성된 후 명령어 실행

SHELL 명령어 실행

$ docker build -t {name}:{tag} .
# Dockerfile를 이미지화 시킴
# -t 옵션은 name:tag 순으로 formatting 해줌
# 버전은 지정하지 않으면 자동으로 latest으로 설정
# . 은 Dockerfile의 이름을 명시해 주었을 때 자동으로 이를 인식함 / 파일이름을 바꾸었다면 해당 파일이름을 기입
# 이미지 확인
$ docker images
# 이미지를 실행
$ docker run -d -p 8100:8000 이미지명 또는 이미지ID
# -d 백그라운드로 실행
# -p {개방할 포트}:{타켓 포트}

이전과 똑같이 js 파일을 만들어 주고,
node가 설치되어 있지 않은 환경에서 Dockerfile를 이용해 Docker hub에서 이미지를 다운받아 node를 설치하고 실행
8100포트로 진입 시 “hello world” 를 출력


컨테이너 내부에 COPY된 내용 확인

SHELL 명령어 실행

$ docker exec -it 이미지 or 이미지ID bin/bash
# 컨테이너 내부로 진입 후
# ls 명령어를 쳤을 때 hello.js 가 생성되어 있는 것을 확인

쿠버네티스에서 사용하기 위해 Docker hub에 배포

$ docker login
$ docker push 이미지명

쿠버네티스 환경에서의 배포

Pod 생성

apiVersion: v1 # 버전
kind: Pod # 리소스 타입
metadata:
  name: hello-pod # 파드의 이름
  labels:
    app: hello # 파드의 레이블
spec:
  containers:
    - name: hello-container # 컨테이너 이름
      image: image_name # 도커 허브에 올린 이미지 이름
      ports:
        - containerPort: 8000 # 컨테이너 8000번 포트 사용

Service 생성

apiVersion: v1
kind: Service
metadata:
  name: hello-svc
spec:
  selector:
    app: hello # 위에서 생성한 Pod의 레이블이랑 매칭
  ports:
    - port: 8200 # 서비스로 개방할 포트
      targetPort: 8000 # 컨테이너의 포트
  externalIPs:
    - 192.168.0.30 # 외부 IP 설정

쿠버네티스와 도커 이미지 파일로 node와 소스코드 등 쉽게 pull해와 서비스 배포를 쉽게 할 수 있었다.
8100포트로 진입 시 “hello world” 를 출력


위로 올라가기💨

Hello, I'm@nickhealthy
개발자를 꿈꾸고, 파이썬과 클라우드에 관심이 많은 비전공자

Github