🧭 Kubernetes | January 11, 2021
- 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 엔진 설치
- 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” 를 출력