[Docker] 도커와 컨테이너

BoongDev·2023년 4월 11일
0

Docker

목록 보기
1/3

도커와 컨테이너

AWS 에서의 도커 정의:

  • Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너 라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.

위키피디아에서 제공하는 도커의 정의:

둘 모두 도커에 대해서 자세히 알기 어렵지만 컨테이너라는 개념이 나온다.

컨테이너

실생활에서의 컨테이너는 반복 사용 가능한 상자모양의 큰 수송 용기 물건을 담는 용도이다.

도커에서의 컨테이너

실세계에서 무언가를 담는 것처럼 도커에서의 컨테이너는 다양한 프로그램과 실행 환경을 컨테이너에 담고, 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 한다.

도커 이미지와 도커 컨테이너

도커 컨테이너를 만들기 위해서는 도커 이미지가 필요하다.

둘 정의

  • 도커 컨테이너 : 코드와 모든 종속성을 패키지화하여 응용 프로그램이 한 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 안정적으로 실행되도록 하는 소프트웨어 표준이다.
  • 도커 이미지 : 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정과 같은 응용 프로그램을 실행하는 데 필요한 모든 것을 포함하는 가볍고 독립적이며 실행 가능한 소프트웨어 패키지이다.

도커 이미지를 이용해 여러 개의 도커 컨테이너를 만들 수 있다. 이때 도커 컨테이너를 도커 이미지의 인스턴스라고 부른다.

도커를 사용할 때의 흐름

  1. 도커 클라이언트(CLI) 에 원하는 명령을 위한 명령어를 입력

  2. 도커 서버(도커 데몬)가 도커 클라이언트에 입력한 명령어를 전달받으면 명령어에 따른 이미지를 생성하고, 컨테이너를 실행한다. 그리고 해당 컨테이너에서 애플리케이션을 실행한다

    1. 간단한 도커 사용
    2. hello-world 라는 프로그램을 도커 환경에서 실행한다. 이미지의 이름이 hello-world이다.
    docker run hello-world

    hello-world 프로그램 도커 내부 처리 과정

    1. 도커 클라이언트에 명령어를 입력하면 클라이언트에서 도커 서버로 요청
    2. 서버에서 hello-world 라는 이미지가 로컬에 이미 다운로드 되어 있는지 확인
    3. 이미지가 있으면 5번으로 없으면 Unable to find image 'hello-world:latest' locally' 문구 출력
    4. 도커 이미지가 저장된 도커 허브(Docker Hub)에서 hello-world 이미지를 가져오고, 로컬에 저장 후 보관한다. (이미지 캐시 보관 장소)
    5. hello-world 이미지를 이용해서 컨테이너를 생성
    6. 생성된 컨테이너는 이미지에서 받은 설정이나 조건에 따라 프로그램을 실행한다.

도커와 기존 가상화 기술의 차이점

가상화 기술 이전 서버

하나의 서버, 하나의 운영체제, 하나의 프로그램만을 운영하여 안정적이지만 사용하지 않는 공간이 많아 비효율적

하이퍼바이저 기반의 가상화 기술

논리적으로 공간을 분할하여 가상 머신(VM) 이라는 독립적인 가상 환경에서 서버를 이용하는 기술을 이용해, 한 대의 서버로 여러 프로그램을 운영가능하게 되며 비효율적인 부분 해결.

하이퍼바이저는 호스트 시스템에서 다수의 게스트 운영체제(OS) 를 구동할 수 있게 해주는 소프트웨어이며, 하드웨어를 가상화하면서 하드웨어와 각각의 가상 머신(VM) 을 모니터링하는 중간 관리자이기도 하다.

하이퍼 바이저의 종류

  • 하이퍼바이저
    • 네이티브 하이퍼바이저
      • 구성
      • 하드웨어 → 하이퍼바이저 → OS
    • 호스트형 하이퍼바이저
      • 구성
      • 하트웨어 → OS → 하이퍼바이저 → OS

네이티브 하이퍼바이저 (bare metal, MS Azure 에서 사용하는 방식)

  • 하이퍼바이저가 직접 하드웨어를 제어하기 때문에 자원을 효율적으로 사용 가능
  • 별도의 호스트OS 가 없어 오버헤드가 적다
  • 여러 하드웨어 드라이버를 세팅해야 하므로 설치가 어려움

호스트형 하이퍼바이저

  • OS 위에서 실행된다.
  • 하드웨어 자원을 VM 내부의 게스트 OS 에 에뮬레이트 하는 방식 == 오버헤드가 크다
  • 게스트 OS 종류에 대한 제약이 없고 구현이 쉽다.
  • 대다수 많은 사람이 이용하는 VM

도커 컨테이너 는 가상 머신(VM)과 비교했을 떄 하이퍼바이저와 게스트OS 가 필요하지 않기 때문에 가볍다. 호스트 OS 위에 애플리케이션의 실행 패키지인 이미지만 배포하면 끝이다.

가상 머신은 애플리케이션을 실행하기 위해 가상 머신을 실행하고 자원을 할당한 다음, 게스트 OS(무겁다)를 부팅해 애플리케이션을 실행한다. → 훨씬 복잡하고 무겁다.

도커 컨테이너 격리 원리

리눅스의 Cgroup(control groups)과 네임스페이스(namespaces)에 대해 알아야 한다.

Cgroup(control groups)과 네임스페이스(namespaces)

다른 프로세스 사이에 벽을 만드는 리눅스 커널의 기능이다.

??? 도커를 사용하는 개발 환경 중 Windows 와 macOS 가 다수인데 어떻게 도커는 Linux 커널의 기능을 사용하는가?

도커 서버는 리눅스 VM 환경에서 실행되고 있기 때문이다. 따라서 모든 컨테이너가 리눅스 가상 머신에서 생성되며, 리눅스 커널이 컨테이너를 격리시키고 리소스를 나눠주게 된다.

Cgroup

  • CPU, 메모리, 네트워크 대역폭, HD I/O 등 프로세스 그룹의 시스템 리소스 사용량을 관리

네임스페이스

  • 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술로 별개의 독립된 공간을 사용하는 것처럼 격리된 환경을 제공하는 경량 프로세스 가상화 기술이다.

도커 컨테이너 구조

호스트 OS 는 공유하지만 하나의 컨테이너는 다른 컨테이너와 격리되며 그 안에서 실행되는 프로세스를 작동시키기 위해 필요한 양에 맞는 디스크, 네트워크, RAM 등이 할당되어 있다.

도커 이미지

도커 이지미는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함한다.

필요한 모든 것

  1. 컨테이너가 시작될 때 실행할 명령어
    1. 예) run kakaotalk
  2. 파일 스냅숏
    1. 파일 스냅숏은 디렉터리나 파일을 복사한 것

도커 컨테이너 생성되는 순서

  1. 도커 클라이언트에 ‘docker run <이미지>’ 명령어 실행
  2. 도커 이미지에 있는 파일 스냅숏을 컨테이너에 있는 하드 디스크로 옮긴다.
    (컨테이너 안에서 애플리케이션을 설치하고 실행해야 하므로 컨테이너로 이동시킨다.)
  3. 도커 이미지가 가지고 있는 명령어(컨테이너가 실행될 때 사용할 명령어)를 컨테이너에 전달한다.
  4. 컨테이너가 실행될 때 명령어를 이용해 애플리케이션 실행
profile
욕심 많은 주니어 개발자입니다.

0개의 댓글