Hyun's Wonderwall

[GDSC Ewha 5th] 7주차 과제 - 도커, 쿠버네티스 본문

Study/Java, Spring

[GDSC Ewha 5th] 7주차 과제 - 도커, 쿠버네티스

Hyun_! 2024. 2. 29. 23:40

[1. Docker]

* 컨테이너 : 코드와 그에 필요한 모든 종속성을 패키징하여 응용 프로그램이 한 컴퓨팅 환경에서 빠르고 신뢰성 있게 다른 환경으로 실행되도록 하는 표준 소프트웨어 단위.

* Docker : 컨테이너를 관리하기 위한 기술. 애플리케이션을 개발, 출시, 실행하기 위해 사용하는 개방형 플랫폼이다.

Docker를 사용하면 인프라에서 애플리케이션을 분리하고 인프라를 관리형 애플리케이션처럼 취급할 수 있다. Docker의 커널 컨테이너화 기능을 애플리케이션 관리 및 배포를 지원하는 워크플로우 및 도구와 결합하여 사용하는데, 이렇게 함으로써 코드를 더욱 빠르게 출시, 테스트, 배포할 수 있다. (# GitHub CI/CD에서 도커 활용한 경험 생각남)

VM vs Docker

VM : Guest OS가 존재하여 가상화된 하드웨어에서 동작한다. Guest OS는 자체 커널을 보유하고, 자체 커널은 하이퍼바이저와 상호작용한다. 하이퍼바이저는 하드웨어 자원에 액세스한다. -> 오버헤드 문제?

Docker : Guest OS 없이 Host OS 위에 바로 애플리케이션을 패키징한 컨테이너를 올린다. 컨테이너는 Host 시스템의 운영 체제 커널(리눅스 커널)을 공유한다. VM에 비해 종속성 격리가 간편하다.(Guest OS를 설치할 필요가 없어서)

*커널: 운영체제의 핵심적인 역할을 하는 코어.(프로세스 관리, 메모리 관리, 저장장치 관리 등)

Docker와 리눅스 기술

Host가 리눅스 커널이 있어야 컨테이너가 호스트의 리눅스 커널을 공유 가능하다. (맥은 바로 쓸 수 있지만, 윈도우의 경우 WSL을 설치해야 함) 컨테이너는 다음의 4가지 리눅스 기술을 활용한다: Processes, Namespaces, cgroups, Union file systems

Docker = 프로세스

도커 컨테이너는 호스트 시스템이 보기에는 하나의 프로세스이고(PID), 도커 컨테이너가 보기에는 하나의 머신처럼 관리된다. (도커 프로세스 ID: 1번)

 

GCP

- 멀티 리전, 리전,  컴퓨팅 영역

 

# 실습: GCP의 Cloud Shell 사용하기

 

# 실습: 도커 컨테이너 실행하기

- 도커는 먼저 로컬에서 실행할 이미지를 찾고, 로컬에 없으면 DockerHub라는 공개 레지스트리에 이 이미지가 있는지를 자동으로 검색한다.


# 실습: Dockerfile로 Node 서버 만들기 (Node.js 서버를 띄움)

- FROM (퍼블릭 repo에서 이미지를 pull)

- ADD, COPY (로컬 파일을 복사. 뭐를 어디에 할지 할 때 . /app 등 폴더 위치를 작성.)

- CMD (컨테이너가 출시된 다음에 실행할 명령문들을 정의)


[2. K8S]

쿠버네티스 (Kubernetes, k8s)

컨테이너로 이루어진 워크로드와 서비스를 관리하기 위한 기술.
이식성이 있고 확장가능한 오픈소스 플랫폼. 선언적 구성과 자동화를 모두 용이하게 해준다.

 

쿠버네티스 아키텍쳐

Master Node=컨트롤 플레인, 아래에 여러 Worker Node들이 있다.

GKE 클러스터 아키텍쳐

사용자는 컨트롤 플레인으로 클러스터 전체를 관리. (kubectl 명령어로 접근)

Work Nodes는 Pod들을 가지며, Pod는 컨테이너들의 집합 단위임. (컨테이너 그 자체를 다루지 않고 Pod를 관리.)

Pod

Pod의 컨테이너들은 네트워킹과 스토리지를 비롯해 리소스를 공유함. IP 주소, 네트워크 포트, 네트워크 네임스페이스 등도...

 

# 실습: GKE 클러스터 생성, 클러스터에 애플리케이션 배포