[sns project] 도커 이미지 생성 및 쿠버네티스 배포

Docker 이미지 생성 및 배포

먼저 docker 이미지 파일을 생성하고 도커허브에 저장한다.

그 후 yaml 파일을 만들어 쿠버네티스로 관리한다.

본 프로젝트는 Mac OS에서 진행했다. Docker Desktop이 설치되어 있고 kubernetes가 활성화되어 있다고 가정한다. 참고

1. Docker 이미지 생성 및 배포

Dockerfile 생성

각 프로젝트 루트 파일에 Dockerfile 을 생성한다. 본 포스트에서는 서버는 스프링 부트로, 프론트엔드는 스프링으로 구현했음을 다시한번 언급한다.

Spring Dockerfile

1
2
3
4
5
6
7
# Dockerfile

From openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

FROM : 기본 이미지를 지정한다.

ENTRYPOINTA : 이미지가 컨테이너화 되며 실행될 명령을 입력한다.

React Dockerfile

1
2
3
4
5
6
7
8
9
10
11
# Dockerfile

FROM node:alpine

WORKDIR '/app'

COPY package.json .
RUN npm install
COPY . .

CMD ["npm", "run", "start"]

참고로 폴더 안에 node_modules 폴더를 확인 할 수 있는데 해당 파일은 삭제한다.

container를 만들면서 알아서 npm install로 node_modules을 생성해주기 때문이다.

도커 빌드

Dockerfile 이 있는 루트에서 실행해야 하며 반드시 . 을 입력해야 한다.

. 는 현재 명령어가 실행되는 곳의 기준으로 Dockerfile의 위치이다.

1
2
3
4
$ docker build -t chohanjoo/post:v0.1 .

# 일반화
# docker build -tag 사용자이름(도커 허브 유저)/앱이름:버전 .

도커 이미지가 빌드가 잘 되면 아래 명령어를 실행해서 정상적으로 되었는지 확인할 수 있다.

1
$ docker images

도커 이미지 배포

이제 빌드된 이미지를 도커 허브에 배포한다.

1
2
$ docker login
$ docker push chohanjoo/post:v0.1

2. 쿠버네티스 배포

이제 쿠버네티스에 배포한다.

배포 명령어

1
2
3
4
5
$ kubectl create deployment post --image=chohanjoo/mwohae-post --dry-run -o=yaml > post_deployment.yaml

$ echo --- >> post_deployment.yaml

$ kubectl create service clusterip post --tcp=8082:8082 --dry-run -o=yaml >> post_deployment.yaml

위 세 개의 명령어를 수행하면 post_deployment.yaml 파일이 생성된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
piVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: post
  name: post
spec:
  replicas: 1
  selector:
    matchLabels:
      app: post
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: post
    spec:
      containers:
      - image: chohanjoo/mwohae-post:v0.1
        name: mwohae-post
        resources: {}
status: {}
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: post
  name: post
spec:
  ports:
  - name: 8082-8082
    port: 8082
    protocol: TCP
    targetPort: 8082
  selector:
    app: post
  type: ClusterIP
status:
  loadBalancer: {}

다음 명령어를 입력하여 배포한다.

1
$ kubectl apply -f post_deployment.yaml

그 후 kubectl get all 명령어로 확인할 수 있다.

외부에서 HTTP 접근하기 위해서 port-forward 사용

1
$ kubectl port-forward chohanjoo/post 8082:8082

이후 localhost:8082 로 접근할 수 있다.

3. 쿠버네티스 Default 대시보드

(1). 대시보드 UI 배포

1
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

(2). 커맨드 라인 프록시

다음 명령어를 실행함으로써 대시보드를 사용할 수 있다.

1
$ kubectl proxy

대시보드 URL

(3). 계정 생성

대시보드 로그인에 필요한 계정은 다음 블로그를 참고하였다.


출처

[Spring Boot] Docker 컨테이너 배포 (with. Gradle) - dev , prod 별로 배포 할 때 참고

Spring Boot 과 Docker (with jib) - 도커 파일에 대해서 공부할 때 참고

Docker - jar 파일을 실행하는 도커이미지 만들기 (Dockerfile 이용)

초보자를 위한 맥 OS 쿠버네티스 스프링부트 배포하기

KUBERNETES DASHBOARD 사용하기

Docker를 이용해 간단한 React앱을 AWS에 배포해 보자-01