2023. 7. 22. 21:47ㆍ쿠버네티스/입문
컨테이너는 클라우드 네이티브 개발에서 중요한 개념이다. 컨테이너를 빌드하고 실행하는 데 필요한 핵심 도구는 '도커'이다. 도커 데스크톱을 활용하여 간단한 데모 애플리케이션을 빌드하고 로컬에서 실행한 뒤 이미지를 컨테이너 레지스트리에 푸시해본다.
도커 데스크톱 설치
도커 데스크톱은 맥, 윈도우에서 동작하는 완벽한 쿠버네티스 개발 환경이다. 단일 노드의 쿠버네티스 클러스터를 제공한다. 도커 데스크톱으로 간단한 애플리케이션을 실행해본다.
참고 사이트 :
https://github.com/cloudnativedevops/demo
설치 완료 후 "docker version'으로 설치 확인
도커 이미지 빌드
도커파일은 베이스 이미지라고 부르는 시작 이미지를 가져와 변환하여 새로운 이미지로 저장하는 명령을 담고 있다.
#go 언어 환경이 설치된 운영체제(알파 리눅스)의미
FROM golang:1.17-alpine AS build
# go build 명령어로 main.go 파일을 컴파일하여 demo라는 이름의 바이너리 파일을 생성
WORKDIR /src/
COPY main.go go.* /src/
RUN CGO_ENABLED=0 go build -o /bin/demo
# 비어있느 컨테이너(scratch)를 가져와 안에 demo 바이너리 파일을 복사
FROM scratch
COPY --from=build /bin/demo /bin/demo
ENTRYPOINT ["/bin/demo"]
빌드 단계를 거쳐 필요한 바이너리 파일만 빈 컨테이너에 넣어 매우 작은 이미지를 만든다. Go는 컴파일된 언어이므로 보안 문제를 일으킬 수 있는 공격 지점을 줄여주며, 독립적인 실행 파일을 생성할 수 있어서 최소 컨테이너를 작성하는 데 이상적이다.
"도커 파일"은 docker image build 도구의 명령을 포함하고 있다.
docker image build -t myhello .
이미지 이름 지정하기
이미지 생성하며 기본적으로 16진수 ID 값이 생성된다. -t를 사용하면 사람이 읽고 쓰기 편한 이름을 지정할 수 있다. 앞서 myhello로 지정하였다. 다음 명령어로 작동 테스트를 진행한다.
docker container run -p 9999:8888 myhello
포트 포워딩하기
컨테이너는 다른 프로그램과 격리되어 있어 네트워크 포트와 같은 리소스에 직접 접근이 불가하다.
데모 애플리케이션 8888번 포트로 연결을 수신하지만 이 포트는 컨테이너 내부의 8888번 사설 포트이다. 호스트 컴퓨터 포트가 아니다. 컨테이너의 8888번 포트로 연결하려면 호스트 컴퓨터의 포트를 컨테이너의 해당 포트로 "전달"해야 한다. 8888번을 포함하여 어떤 포트든 지정할 수 있다. 호스트 포트와 컨테이너 포트의 구별을 위해 9999번 포트를 사용하였다.
-p 인수를 사용하여 전달할 수 있다.
docker container run -p HOST_PORT:CONTAINER_PORT
컨테이너 레지스트리
도커에 컨테이너 이름을 지정하면 자동으로 이미지를 다운로드하고 실행할 수 있다. 로컬 이미지를 빌드하고 실행만 해도 되지만, 컨테이너 레지스트리에서 이미지를 푸시하고 풀할 수 있다면 훨씬 더 유용하다.
docker container run 명령의 기본 레지스트리는 도커 허브이다. 다른 레지스트리를 사용하거나 직접 레지스트리를 구축할 수 있다.
레지스트리 인증하기
도커 ID가 있다면 아이디와 패스워드를 사용해 도커 데몬을 도커 허브에 연결해보자.
docker login
이미지 이름 지정 및 푸시
docker image tag myhello Your_Docker_ID/test
docker image push Your_Docker_ID/test
이미지 풀하여 실행하기
docker container run -p 9999:8888 Your_Docker_ID/myhello
헬로, 쿠버네티스
도커 데스크톱은 쿠버네티스 지원이 포함되어 있다.(리눅스는 Minikube)
Enable Kubenetes 체크 후 적용하며 설치된다(몇 분 소요)
kubectl run demo --image=Your_Docker_ID/myhello --port=9999 --labels app=demo
#port-forwad
kubectl port-forward deploy/demo 9999:8888
#실행상태 확인
kubectl get pods --selector app=demo
에러 메시지
ErrImagePull or ImagePullBackoff라면 이미지를 찾아서 다운로드 할 수 없음을 의미한다. 이름을 잘못 입력하였거나 이미지가 없는것이다.
ContainerCreating가 표시된다면 양호한 상태다. 쿠버네티스가 이미지를 다운로드하고 나서 이미지를 실행할 것이다. 잠시 기다렸다가 다시 확인해보자.
'쿠버네티스 > 입문' 카테고리의 다른 글
쿠버네티스 구축 (0) | 2023.07.23 |
---|---|
모놀리식 아키텍처 / 마이크로서비스 아키텍처 (0) | 2023.07.22 |
Revolution (0) | 2023.07.22 |