본문 바로가기

관심사/독후감

15단계로 배우는 도커와 쿠버네티스

✏️ 줄치며 책 읽기

챕터 01. 쿠버네티스란? 

쿠버네티스란 컨테이너화된 애플리케이션을 유연하게 운영할 수있는 기능을 제공하는 플랫폼이다.

쿠버네티스 아키텍처

마스터

kubectl 같은 API 클라이언트로 요청을 받아 애플리케이션 배포, 스케일 업/다운, 컨테이너 버전 업 등의 요구를 처리한다. 

노드

실제 프로그램이 실행되는 서비이다. 요청이 늘어나면 기본적으로 컨테이너의 수를 늘리면 되는데, 이때 노드 수를 늘려야할 때도 있다. 

쿠버네티스의 연결 가능한 노드 수는 1.11 기준으로 5000대이다. 노드를 추가하고 제거하는 작업은 애플리케이션이 돌아가는 도중에도 가능하다. 

 

챕터 02. 컨테이너의 이해

(1) docker daemon

도커 데몬은 클라이언트인 도커 커맨드의 명령을 받아 도커 오브젝트인 이미지, 컨테이너, 볼륨, 네트워크 등을 관리한다. 데몬은 원격 클라이언트로 부터 요청을 받는 것도 가능하다.

(2) docker client

도커 커맨드는 컨테이너를 조작하는 커맨드 라인 유저 인터페이스로 도커 데몬의 클라이언트다. 

예시. docker build, docker pull, docker run 

(3) image

이미지는 읽기 전용인 컨테이너의 템플릿을 말한다.컨테이너를 기동하기 위한 실행 파일과 설정 파일의 묶음으로 볼 수 있다. 컨테이너를 실행하면 이미지에 담긴 미들웨어나 애플리케이션이 설정에 따라 기동된다. 윈도우 OS 설치 CD라고 보면 이해하기 쉽다. 

대부분 이미지는 다른 이미지에 기반하여 만들어진다. 예를 들어, 웹서버 Nginx 컨테이너는 리눅스 배포판인 데미안에 기반하여 만들어졌다. 이미지를 만들 때는 기반 이미지와 설치 스크립트 등을 Dockerfile에 기재하여 빌드한다.

 

도커 이미지의 이동과 실행

다음 그림은 젠킨스 서버를 띄우는 예시이다.

1. docker run jenkins 명령문을 실행하면,

2. 로컬 레파지토리에 젠킨스 이미지가 있는지 확인하고 

3. 없으면 레지스트리에서 젠킨스 이미지를 다운받고 

4. 이미지를 컨테이너로 실행한다. 

그러면 로컬에 지정한 포트로 젠킨스 서버에 접속할 수 있다. 

 

도커 이미지 빌드

도커 이미지를 빌드할 때, 내부에서 동작하는 절차는 위와 같다. 위의 예시는 장고 애플리케이션을 도커로 빌드하는 사례이다. 순서는 다음과 같다.

1. docker build를 실행하면

2. 기반이 되는 이미지를 원격 레지스트리에서 받아온 후,

3. 받아온 이미지를 컨테이너로 실행한 후,

4. 그 안에서 필요한 프로그램을 설치하거나, 다운받아서 실행한 후

5. 다시 로컬 레파지토리에 이미지로 저장한다. 

(4) container

컨테이너는 하나의 프로세스라고 볼 수 있다. 그러나 정지된 상태로 관리될 수 있기 때문에, "실행 가능한 이미지의 인스턴스"라고 정의할 수 있다. 

docker run으로 이미지는 컨테이너로 변환되어 하나의 인스턴스가 된다. 이 실행 상태의 컨테이너는 IP 주솔르 가지는 하나의 독립된 서버처럼 동작한다. 컨테이너의 IP 주소와 포트번호로 온 요청은 컨테이너 내의 프로세스로 연결된다.

컨테이너를 실행할 때는 여러 옵션을 줄 수 있다. 그래서 동일한 이미지를 재사용할 수 있다.

컨테이너를 정지하고 싶을 때는 docker stop/kill 명령문을 사용하면 된다. 이 때, 컨테이너가 정지만 될 뿐, 삭제가 되지는 않는다. docker rm 명령문으로 제거되기 전가지는 기동 당시의 옵션과 로그를 계속 가지고 있다. 정지된 컨테이너를 재실행할 때는 docker start 명령문을 사용하면 된다. 그러나 이 때, 정지 전에 할당되었던 IP 주소가 유지되지 않는다. 컨테이너는 기동 전 이력과는 상관없이 IP 주소가 할당된다.

 

docker registry

도커 레지스트리는 컨테이너의 이미지가 저장되는 곳이다. 도커는 기본으로 docker hub에 있는 이미지를 찾도록 설정되어있다. 레지스트리는 리포지토리를 여러 개 가지는 보관 서비스다. 그리고 리포지토리에는 하나의 이미지에 태그를 사용하여, 여러 버전을 함께 관리한다. 

챕터 05. 컨테이너 API

 

docker run -d --name myd -e INTERVAL=10 -v 'pwd'/data/:pv my_daemon:0.3

-d은 백그라운드 데몬으로 컨테이너를 돌린다는 의미이다. -e는 환경변수를 의미한다. -v는 호스트 주소로 퍼시스턴스 볼륨을 마운트할 때 사용한다. 'pwd'/data는 호스트 주소의 절대경로를 의미하고, pv는 컨테이너에 연결시킬 경로를 말한다. 

 

docker attach --sig-proxy=false myd

백그라운드로 동작하는 컨테이너를 터미널에 연결 시키는 명령문이다.

이 때, --sig-proxy 설정은 터미널에서 ctrl+c를 눌렀을 때, 컨테이너를 종료하지 않고 터미널과 분리하기 위함이다.