[Infra] 도커(docker)(0) 도커의 개념, 컨테이너?

업데이트:

도커(docker)(0) 도커의 개념, 컨테이너?

참고링크

운영체제 프론트엔드 백엔드 데이터베이스 인프라
리눅스구조 js필터 아파치에러로그 행삭제 아파치스쿱
프로세스 헬로월드 웹서버개념 ES기초 로그분석
네임스페이스 프로젝트생성 아파치설치 MySQL기초 beeline
디렉토리 헤더생성 flask연동 큐브리드 하둡기초
리다이렉션 async-get 장고MsSQL연결 null공백 나이파이
쓰레드 async-post 장고MySQL연결 MySQL설치(win) 백본
라즈베리파이설치 로그인페이지 장고inpectdb MySQL테이블생성 제플린
OSI7계층소개   장고read   SSL인증
OSI1계층   장고insert   커버로스
OSI2계층   장고put   도커개념
OSI3계층   장고del   도커설치
OSI4계층   flask한글요청   도커기초
OSI5,6,7계층       도커이미지
DNS서버       컨테이너네트워크
DHCP       도커API
bashrc       도커컴포즈
bash       도커볼륨
ifconfig       장고이미지
소켓프로그래밍       도커postgre
리눅스유저생성       도커이미지삭제
netstat포트열기       도커Redis
컴파일러       k8s구조
운영체제vs커널       k8s설치
작업스케쥴링       k8s서비스배포
디스크추가       POD네트워크
aws유저추가       퍼시스턴트볼륨
기초명령어       k8s에러
포트번호        

참고 링크

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)입니다. 이때 컨테이너 런타임이란 컨테이너 실행을 담당하는 소프트웨어를 말합니다.