docker image 를 사용해 서비스를 배포한다 (in microk8s)
알아둘일
2020. 2. 23. 20:56
간단한 golang 어플을 도커 이미지를 사용해서 배포하려 한다.(배포는 kubernetes 를 사용한다)
docker hub 등 온라인 방식으로 해도 되지만, microk8s 의 registry 서비스를 이용한다.
방법은 그리 어렵지 않다. https://microk8s.io/docs/registry-built-in 를 참조 한다.
일종의 registry 서비스를 로컬에 가동하여 도커 이미지를 등록 하는 것이다.
1. 이미지 빌드
$ sudo docker build . -t localhost:32000/prod-api:registry
Sending build context to Docker daemon 4.608kB
Step 1/6 : FROM golang:latest
latest: Pulling from library/golang
dc65f448a2e2: Pull complete
346ffb2b67d7: Pull complete
dea4ecac934f: Pull complete
8ac92ddf84b3: Pull complete
7ca605383307: Pull complete
f47e6cebc512: Pull complete
530350156010: Pull complete
Digest: sha256:fe6b1742d48c4d6d360c6fac1e289e8529aaab924fa0e49a330868be50c0f2f4
Status: Downloaded newer image for golang:latest
---> 297e5bf50f50
Step 2/6 : RUN mkdir /app
---> Running in 2a6795d86353
Removing intermediate container 2a6795d86353
---> 541dbb10344e
Step 3/6 : ADD . /app/
---> c60e6e741cb4
Step 4/6 : WORKDIR /app
---> Running in 5de0b590c65d
Removing intermediate container 5de0b590c65d
---> 24c7788d1b8e
Step 5/6 : RUN go build -o main .
---> Running in 5e44a7f53909
Removing intermediate container 5e44a7f53909
---> 56462a496eac
Step 6/6 : CMD ["/app/main"]
---> Running in bdde4584ff89
Removing intermediate container bdde4584ff89
---> dbba71be4f83
Successfully built dbba71be4f83
Successfully tagged localhost:32000/prod-api:registry
등록체크
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost:32000/prod-api registry dbba71be4f83 5 minutes ago 810MB
2. 이미지 registry 등록
$ sudo docker push localhost:32000/prod-api
The push refers to repository [localhost:32000/prod-api]
44006ff06569: Pushed
203febf79d4f: Pushed
2ec821486852: Pushed
cae11887bc90: Pushed
729c3ac48990: Pushed
8378cd889737: Pushed
5c813a85f7f0: Pushed
bdca38f94ff0: Pushed
faac394a1ad3: Pushed
ce8168f12337: Pushed
registry: digest: sha256:7c8fe99287f680f23e611c4113834c5c8343aa102a49a3584a65888205604609 size: 2420
3. kubernetes 로 배포
배포코드는 https://github.com/yusufkaratoprak/kubernetes-gosample 를 참조
$ vi config/deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: prod-api-dep
spec:
replicas: 1
selector:
matchLabels:
app: prod-api
template:
metadata:
name: prod-api
labels:
app: prod-api
spec:
containers:
- name: prod-api-dep
image: localhost:32000/prod-api:registry
ports:
- containerPort: 8090
$ vi config/service.yaml
apiVersion: v1
kind: Service
metadata:
name: prod-api-service
spec:
selector:
app: prod-api
ports:
- name: http
protocol: TCP
port: 8070
targetPort: 8090
externalIPs:
- 192.168.0.111
배포/가동 : kubectl apply -f config/
$ curl 192.168.0.111:8070 으로 체크
추후 LoadBalance 로 설정 - golang 파드는 replicas 로 여러대로 동작
반응형
'알아둘일' 카테고리의 다른 글
몽고 db - 백업 / 복구 후에 인덱스 다시 생성시 오류 (in kubernetes) (0) | 2020.04.18 |
---|---|
mount error(127): Key has expired - 우분투(리눅스)에서 윈도우 공유폴더 연결시 에러 (0) | 2020.03.10 |
golang 을 사용해서 api 앱을 만든다. (0) | 2020.02.21 |
mongodb - replica set 설정 (in kube / microk8s ) (0) | 2020.02.20 |
kubernetes 를 이용해서 mongodb replica set 을 세팅해본다 (1) | 2020.02.20 |
WRITTEN BY
- 1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.
,