첫 번째 컨테이너

2023. 7. 22. 21:47쿠버네티스/입문

728x90
반응형

컨테이너는 클라우드 네이티브 개발에서 중요한 개념이다. 컨테이너를 빌드하고 실행하는 데 필요한 핵심 도구는 '도커'이다. 도커 데스크톱을 활용하여 간단한 데모 애플리케이션을 빌드하고 로컬에서 실행한 뒤 이미지를 컨테이너 레지스트리에 푸시해본다.

 

도커 데스크톱 설치

도커 데스크톱은 맥, 윈도우에서 동작하는 완벽한 쿠버네티스 개발 환경이다. 단일 노드의 쿠버네티스 클러스터를 제공한다. 도커 데스크톱으로 간단한 애플리케이션을 실행해본다.

 

참고 사이트 :

https://www.lainyzine.com/ko/article/a-complete-guide-to-how-to-install-docker-desktop-on-windows-10/

 

윈도우 Docker 설치 완벽 가이드(Home 포함)

Docker는 경량 가상화 기술인 리눅스 컨테이너 도구입니다. 윈도우 Home과 Pro에서도 몇 가지 설정을 통해 Docker Desktop을 사용할 수 있습니다. 이 글에서는 윈도우에서 Docker Desktop을 설치하는 방법을

www.lainyzine.com

https://github.com/cloudnativedevops/demo

 

 

GitHub - cloudnativedevops/demo: Simple demonstration app for 'Cloud Native Devops'

Simple demonstration app for 'Cloud Native Devops' - GitHub - cloudnativedevops/demo: Simple demonstration app for 'Cloud Native Devops'

github.com

 

설치 완료 후 "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