도커 ! 공부

FineLee·2022년 1월 22일
0

Cloud

목록 보기
3/8

1. Container 란?

컨테이너는 OS의 커널 위에서 croup, namespace,netfilter등과 같은 커널 기능들
을 통해 프로세스를 cpu,memory, networking,filesystem의 특정영역에 격리시켜
다른 공유 영역의 접근을 제한하고 독립적인 공간을 제공하는 기술이다.
독립된 공간에 애플리케이션과 애플리케이션의 구동에 필요한 라이브러리 및 바이너리를 Doker나 Podman을 통해서 OCI표준에 맞게 '이미지 화' 할 수 있으며
컨테이너 엔진 위에 배포, 관리 가능하다.
또한, 개별 소프트웨어 실행에 필요한 실행환경을 독립적으로 운용할 수 있도록 실행의 독립성을 확보해주는 운영체계 수준의 격리기술을 말한다.

VM은 플랫폼 하나마다 OS필요해서 확장성이 떨어짐.
컨테이너는 OS하나위에서 독립적인 프로그램처럼 관리되고 실행된다. OS에 종속적이지않고, 컨테이너 엔진만 있다면 어디든 배포 가능하다.

추가 정보

VM부연설명

VM은 하이퍼바이저를 사용하여 물리적 시스템 위에서 실행되며, 하이퍼 바이저는 호스트 시스템 "bare-metal"에서 실행된다.

  • 하이퍼 바이저: VM위에서 실행되는 소프트웨어, 펌웨어도는 하드웨어의 한 부분이다. 하이퍼 바이저 자체는 호스트 머신이라고 불리는 물리적 컴퓨터에서 실행된다. 호스트 시스템은 VM에 RAM및 CPU를 비롯한 리소스를 제공한다. 이러한 리소스는 VM간에 분할되어있으며 적합한대로 배포할 수 있다.


VM에는 자체 가상 운영체제가 있으므로, 하이퍼바이저는 VM에 이 게스트 운영체제를 관리하고 실행할 수 있는 플랫폼을 제공하는데 필수적인 역할을 한다. 호스트 컴퓨터가 게스트로 실행되는 가상 시스템간에 리소스를 공유할 수 있도록 허용한다.
사진에서 볼 수 있듯이, VM은 가상 하드웨어, 커널(즉, OS)및 각 새 VM의 사용자 공간을 패키징한다.

컨테이너 부연설명

하드웨어 가상화를 제공하는 VM과 달리 컨테이너는 "사용자 공간"을 추상화하여 운영체제 수준의 가상화를 제공한다.
VM과 유사하긴 하다.
처리를 위한 전용공간을 가지고있고, 루트로 명령을 실행할 수 있고, 개인 네트워크 인터페이스와 IP주소를 가지고 있고, 사용자 지정 경로와 통합 가능한 규칙을 허용하고, 파일 시스템을 탑재할 수 있다.
컨테이너와 VM의 큰 차이점은 컨테이너가 호스트 시스템의 커널을 다른 컨테이너와 공유한다는 점이다
(예컨대, Linux운영체제를 공유하는 여러개의 컨테이너 가능 VM은 VM마다 운영체제가 필요한듯)

도커

도커는 리눅스 컨테이너를 기반으로 한 오픈 소스 프로젝트다.
네임스페이스와 제어 그룹과 같은 리눅스 커널 기능을 사용하여 운영체제 위에 컨테이너를 만든다.

  1. 사용 편의성: 도커는 개발자, 시스템 관리자, 설계자 등 누구나 휴대용 애플리 케이션을 신속하게 구축하고 테스트 하기 위해 컨테이너를 훨씬 쉽게 이용할 수 있도록 했다. 그것은 누구나 랩톱에 애플리케이션을 패키징할 수 있게 해주며, 이는 다시 어떤 퍼블릭 클라우드 , 심지어 베어메탈에서도 수정되지 않은 상태로 실행될 수 있다.

  2. 속도: 도커 용기는 매우 가볍고 빠르다. 컨테이너는 커널에서 실행되는 샌드박스 환경이기 때문에, 더 적은 자원을 차지한다. 매번 전체 가상 운영체제를 부팅해야 하므로, 더 오래걸릴 수 있는 VM과 비교하여 몇초만에 도커 컨테이너를 생성하고 실행 할 수 있다.

  3. 도커허브: '도커 이미지용 앱스토어' 라고 생각할 수 있다.
    여기서 이미지란?
    : 서비스 운영에 필요한 컴파일된 실행파일을 묶는 형태
    특정 프로세스를 실행하기 위한 모든 파일과 설정값을 지닌것으로, 여러 컴파일과 설치가 필요없는 상태의 파일을 의미함.
    예컨대, Ubuntu 이미지는 Ubuntu를 실행하기 위한 모든 파일을 가지고 있다.
    참고

<이해하는데 필요한 지식 알아봄>
커널이란? : 프로그램이다. Memory Resident 라는것이다.
이는 메모리에 항상 상주해 있는것을 의미한다.
즉, 운영체제를 이루는 핵심 요소로 컴퓨터 내의 자원을 사용자 프로그램이 사용할 수 있도록 관리해주는 프로그램이다.

cgroup : 시스템 자원 할당, 우선순위 지정, 거부, 관리, 모니터링 세밀 제어 가능
실행중인 사용자 정의 프로세스간 할당
namespace :
lightweight가상화 솔루션
커널 인스턴스를 만들지 않고 기존 리소스들을 필요한 만큼의 namespace로 분리하여 묶어 관리하는방법으로 사용

netlink : 커널 모듈과 사용자 프로세스 사이에 네트워크 정보를 전달하는데 사용됨.프로세스간 통신, 커널과 유저사이의 양방향 링크 가능

netfilter : 리눅스 커널 모듈로 네트워크 패킷을 처리하기 위한 프레임워크
네트워크의 비중이 높음.

  • NAT 기능
  • Packet Filter (iptables포함됨)
  • Packet Mangling
profile
해송의 벨로그

0개의 댓글