[Infra] 도커(docker)(0) 도커의 개념, 컨테이너?
업데이트:
도커(docker)(0) 도커의 개념, 컨테이너?
참고링크
참고 링크
- (0)도커의 개념
- (1)도커 설치하기, hello world!
- (2)도커 컨테이너 조작 기초(pull, run, ps)
- (3)도커 이미지 변경 후 저장(commit)
- (4)도커 컨테이너 네트워크
- (5)도커 API 이미지 빌드 및 컨테이너 실행
- (6)도커 컴포즈를 활용한 여러 개의 Flask, Nginx 배포
- (7)도커 볼륨을 이용한 데이터 관리
- (1)쿠버네티스 구조
- (2)쿠버네티스 설치
- (3)쿠버네티스 서비스 배포하기
- (4)컨테이너 IP와 파드 IP의 관계
- (5)퍼시스턴트 볼륨 스토리지
1. 우리의 상황
일반적으로 파이썬, 자바, 루비 같은 다양한 프로그래밍 언어를 이용해 개발을 하면 다양한 라이브러리를 사용합니다. 그리고 시간이 지날수록 언어의 버전이 달라지고 라이브러리도 업데이트 됨에 따라 기존에 사용하던 문법이 달라지거나 새로운 함수가 등장하기도 합니다.
따라서 개발자는 소프트웨어의 버전이 달라짐에 따라 이에 따라 안정성을 유지하기가 힘들어집니다.
이러한 문제를 해결하기 위해 도커의 컨테이너 개념을 사용합니다.
2. 가상서버 vs 컨테이너
컨테이너는 하나의 리눅스 프로세스가 마치 전용 서버에서 동작하고 있는것 같은 분리 상태를 만들어 넵니다. 이는 리눅스 커널의 네임스페이스와 컨트롤 그룹(cgroup)이라는 기술을 기반으로 합니다.
위 그림에서 하이퍼바이저는 가상 머신(VM)을 생성하고 실행하는 프로세스입니다. 하이퍼바이저의 종류에는 버추어박스(virtual box)나 VMware 등이 있습니다.
또는 다음 그림과 같이 가상서버와 컨테이너를 함께 사용할 수도 있습니다.
3. 도커 아키텍쳐
전체적인 도커 구조는 다음과 같습니다. 도커는 일단 큰 틀에서 클라이언트(client), 호스트(host), 레지스트리(registry)로 나눌 수 있습니다. 먼저 클라이언트는 사용자 쪽에서 명령 커맨드를 입력하는 터미널이라고 생각할 수 있습니다. 그리고 호스트(host)는 사용자의 명령을 받아 작업을 수행하는 서버라고 생각할 수 있겠습니다. 그리고 레지스트리(Registry)는 전세계 사람들이 도커 이미지를 올리는 곳인 도커 회사라고 생각할 수 있습니다. 레지스트리는 도커 허브(docker hub)라고 하는데, https://hub.docker.com/를 의미합니다.
위 그림에서 도커 데몬은 도커 엔진(docker engine)이라고도 부르는데 호스트의 백그라운드에서 실행중인 도커를 의미합니다. 쉽게 생각해서 클라이언트에서 내린 명령을 받고 수행하는 녀석이라고 생각하시면 편합니다.
위 그림의 코드를 설명하면 다음과 같습니다.
-
docker build : 호스트에서 직접 도커 이미지를 만들어 저장합니다.
-
docker push : 호스트에서 만든 이미지를 레지스트에 올림
-
docker pull : 레지스트리에 존재하는 이미지를 호스트로 다운로드 받아서 저장
-
docker run : 호스트에 존재하는 이미지를 컨테이너로 가동시킴, 만약 호스트에 이미지가 없다면 레지스트리에서 다운로드 받음.
4. 도커 기본 구성 요소
4.1. 도커 데몬(docker daemon)
도커 데몬은 호스트에서 메모리에 상주하며 백그라운드에서 컨테이너를 관리하는 프로세스 입니다. 도커 데몬은 클라이언트의 요청을 기다리고 있다가 요청이 발생하면 적절히 대응합니다. 요약하면, 도커 데몬은 메모리에 상주하면서 사용자에게 요청이 오면 즉시 대응할 수 있도록 대기 중인 프로세스를 의미합니다. 도커 사용자는 도커 데몬과 통신합니다.
4.2. 도커 이미지(docker image)
도커 이미지는 도커 컨테이너를 싱행하기 위해 필요한 모든 것들을 모아놓은 패키지입니다. 도커 이미지에는 기본적으로 코드, 라이브러리 및 컨테이너가 어떻게 인스턴스화 되어야하는지에 대한 내용이 포함되어 있으며, 해당 소프트웨어의 구성물이 어떻게 실행되어야 하는지도 포함되어 있습니다. 도커 이미지는 가상 머신 환경의 스냅샷이라고 볼수 있습니다. 즉, 실행중인 도커 컨테이너의 특정 시점을 나타낸다라고 할수 있는거죠.
4.3. 도커 컨테이너(docker container)
도커 컨테이너는 가상화된 런타임 환경입니다. 이때 런타임(runtime)이란 “프로그램이 실행되고 있는 동안의 동작”을 의미합니다.
4.4. containerd
containerd는 도커에서 만든 컨테이너 런타임(container runtime)입니다. 이때 컨테이너 런타임이란 컨테이너 실행을 담당하는 소프트웨어를 말합니다.