Post

도커와 쿠버네티스 2: 도커의 개념

사전 기초 지식

운영체제의 개념

컴퓨터란?

  • 하드웨어와 소프트웨어로 구성되어 있다
    • 하드웨어: 손으로 만질 수 있는 기계 장치 → 하드웨어적 측면에서 컴퓨터는 CPU와 RAM의 모음이라고 생각할 수 있음
    • 소프트웨어: 하드웨어에서 작동되는 프로그램 → 운영체제는 시스템 소프트웨어임 ⇒ 운영체제가 있어야 프로그램들을 실행할 수 있다 ⇒ 운영체제: 하드웨어, 소프트웨 자원을 관리하고 이를 위해 스케줄링 기능을 제공할 뿐만 아니라 프로그램이 실행할 수 있는 환경을 제공하는 역할을 한다
photo 1photo 2photo 3
  • 컴퓨터가 이렇게 구성되어 있는데
    • 소프트웨어 ⇒ 애플리케이션 + 운영체제 ⇒ 운영체제 라이브러리 + 그 외 라이브러리 + 커
      • 운영체제와 애플리케이션 사이에는 셸이 존재하는데 셸은 껍질이라는 뜻 ⇒ 운영체제를 껍질처럼 감싸고 있는 것을 볼 수 있다
        • 셸: 운영체제와 사용자 사의에서 다리 열할을 하는 프로그램이라고 생각하면 된다 → 이를 통해서 사용자는 명령어를 입력함으로써 운영체제와 상호작용하며 다양한 작업을 할 수 있다.

프로그램, 프로세스, 스레드의 개념

그로그램이란?

  • 실행 가능한 명령어의 집합임 → 하드 디스크와 같은 저장 장치에 저장되어 있지만 메머리에는 올라가지 않은 정적인 상태

    프로세스란?

  • 실행 중인 프로그램 → 동적인 상태의 프로그램임
  • 멀티 프로세스: 디스크에 존쟇는 프로그램을 여러 번 실행하여 여러 개의 프로세스를 작동시키는 것

    프로그램 vs. 프로세스

프로그램프로세스
디스크에 존재하는 명령어 집합실행 중인 프로그램이라 램에 존재하는 것

스레드란?

  • 프로세스가 할당받은 자원을 이용하는 실행 단위이자 프로세스 내에 실행되는 여러 흐름의 단위임
    • 프로세스가 최소 한 개 이상의 스레드를 가짐 → 메인 스레드라고 함
    • 프로세스는 스레드의 컨테이너에 해당한다고 생각하면 됨 → 프로세스는 스레드의 정보를 담고 있는 것이라고 생각할 수 있음

네임스페이스의 개념

  • 네임스페이스: 프로세스를 실행할 때 시스템 리소스를 분리해서 실행할 수 있도록 도와주는 기능이다

리눅스 네임스페이스

네임스페이스의미역할
pidPID: Process ID니룩스 커널의 프로세스 ID 분리
netNET: Networking네트워크 인터페이스(NET) 관리
ipcIPC: Inter Process Communication프로세스 간 통신(IPC) 접근 관리
mntMNT: Mount파일 세스템의 마운트 관리
utsUTS: Unix Timesharing System커널과 버전 식별자 관리
  • 각각의 기능을 확용하면 프로세스를 격리시켜 충돌을 방지할 수 있다

도커 기초 지식

도커의 정의

  • 도커: 회사도 의미하고, 소프트웨어도 의미함

    소프트웨어로서의 도커

  • 컨테이너라고 부르는 운영체제 수준의 가상화 방식으로 소프트웨어를 배포하는 방식을 사용하는 PaaS 제폼임
    • PaaS: 애플리케이션, 데이터 단계만 사용자가 관리하는 서비스임 ⇒ 도커를 사용해서 다양한 개발 환경에서 컨테이너를 이용하여 소프트웨어를 편리하게 배포할 수 있다는 것
  • 오픈소스임
  • 도커를 활용한 애플리케이션 실행:
    • 운영체제 위에 도커가 설치되고 도커는 컨테이너 단위로 애플리케이션을 실행하게 되는데 컨테이너들은 서로 격리되어 있으므로 독립성을 보장함 → 각 컨테이너는 애플리케이션을 실행하는 데 필요한 최소한의 바이너리, 라이브러리가 포함된다

컨테이너의 개념

  • 컨테이너: 소프트웨어를 배포할 때 필요한 코드, 라이브러리, 환경 설정 파일들을 한 데 모아 격리시킨 후 실행 가능한 패키지로 만드는 것
  • 서로 다른 컨테이너는 격리된 환경에서 작동되므로 서로 충둘하지 않는다는 장점이 있다
    • 소프트웨어 시스템을 구축할 때 최소 구성 요소로 분할하여 구축하는 방식 → 마이크로서비스 아키텍처
  • 컨테이너가 동일한 운영체제 위에서 작동해서 격리된 서로 다른 컨테이너들끼리는 통신을 주고받을 수 있다 → 가상머신에 비해 리소스 소모량이 적으므로 효율족인 리소스 관리가 가능

가상화의 개념

  • 가상화: 컴퓨터에서 활용하는 시로스를 추상화하는 개념 → 이를 활용하여 여러 개의 가상머신을 생성함으로써, 단일 컴퓨팅 자원을 여러 개의 논리적인 자원으로 나누어 동작시킬 수 있다

    호스트 가상화

  • 운영체제를 설치한 후 하이퍼바이저를 통해 가상머신을 만들고 각 가상머신 내부에는 게스트 운영체제가 설치된다
    • 하이퍼바이저: 단일 물리 모신에서 다수의 가상머신을 실행할 때 활용하는 소프트웨어임
  • Ex: VirtualBox, VMWare, 등등
  • 많이 사용한다

    하이퍼바이저 가상화

  • 호스트 운영체제를 필요로 하지 않는 방식에 해당함 → 존재하지 않으므로 부팅 시 가상머신을 선택하게 된다
  • 성능이 우수하다는 장점 있지만 초기 설정이 복잡하고 관리가 어려울 수 있다는 단점도 있다

    컨테이너 가상화

  • 운영체제 위에 컨테이너를 운영하기 위해 필요한 도커를 설치한 후 다수의 컨테이너를 통해 애플리케이션을 실행하는 방식이다
  • Ex: Docker, Kubernetes, 등등
  • 이 방식을 사용하면 컨테이너 간 격리가 되어서 다른 애플리케이션에 영향을 미치지 않아 서로 다른 컴퓨팅 화경에서 애플리케이션을 실행하는 데 용이한다

도커 구성 요소

도커 클라이언트

  • docker-cli라고 부르는데 우분투에서 실행하는 터미널이라고 생각하면 된다
    • 명령어 행으로 dockerd API를 활용하여 build, pull, run 과 같은 명령을 내린다
    • 도커 데몬과 통신한다

      도커 데몬

  • dockerd라고 부르는데 백그라운드에서 실행되는 데몬 프로세스에 해당한다
  • 도커 API 요청을 수신하고 도커 이미지, 컨테이너 등과 같은 도커와 관련된 객체를 관리한다

    containerd

  • 컨테이너 실행과 관리에 필요한 기능을 수행하는 컨테이너 런타임 → 컨테이너의 생명주기를 모두 관리한다
    • 생명주기: 도커 이미지 전송, 컨테이너 실행, 스토리지, 네트워크 등 포함됨
  • 컨테이너 실행만 담당하는 runc와는 다른 역할을 하며 고수준 컨테이너 런타임에 해당한다

    runc

  • 컨테이너 실행과 관련된 작업을 수행하는 저수준 컨테이너 런타임 → 실제 컨테이너 실행만 담당

    containerd-shim

  • containerd와 runc 사이에서 작동하는 중간 프로세스에 해당하는데, 컨테이너 실행을 조정하는 역할을 한다
  • containerd는 runc와 통신함으로써 컨테이너 실행 → containerd-shim이 둘이 사이에서 중개자 역할 수행
This post is licensed under CC BY 4.0 by the author.

Trending Tags