AWS 에서의 도커 정의:
위키피디아에서 제공하는 도커의 정의:
둘 모두 도커에 대해서 자세히 알기 어렵지만 컨테이너라는 개념이 나온다.
실생활에서의 컨테이너는 반복 사용 가능한 상자모양의 큰 수송 용기 물건을 담는 용도이다.
실세계에서 무언가를 담는 것처럼 도커에서의 컨테이너는 다양한 프로그램과 실행 환경을 컨테이너에 담고, 동일한 인터페이스를 제공하여 프로그램의 배포 및 관리를 단순하게 한다.
도커 컨테이너를 만들기 위해서는 도커 이미지가 필요하다.
둘 정의
도커 이미지를 이용해 여러 개의 도커 컨테이너를 만들 수 있다. 이때 도커 컨테이너를 도커 이미지의 인스턴스라고 부른다.
도커 클라이언트(CLI) 에 원하는 명령을 위한 명령어를 입력
도커 서버(도커 데몬)가 도커 클라이언트에 입력한 명령어를 전달받으면 명령어에 따른 이미지를 생성하고, 컨테이너를 실행한다. 그리고 해당 컨테이너에서 애플리케이션을 실행한다
docker run hello-world
hello-world 프로그램 도커 내부 처리 과정
Unable to find image 'hello-world:latest' locally'
문구 출력Docker Hub
)에서 hello-world 이미지를 가져오고, 로컬에 저장 후 보관한다. (이미지 캐시 보관 장소)하나의 서버, 하나의 운영체제, 하나의 프로그램만을 운영하여 안정적이지만 사용하지 않는 공간이 많아 비효율적
논리적으로 공간을 분할하여 가상 머신(VM) 이라는 독립적인 가상 환경에서 서버를 이용하는 기술을 이용해, 한 대의 서버로 여러 프로그램을 운영가능하게 되며 비효율적인 부분 해결.
하이퍼바이저는 호스트 시스템에서 다수의 게스트 운영체제(OS) 를 구동할 수 있게 해주는 소프트웨어이며, 하드웨어를 가상화하면서 하드웨어와 각각의 가상 머신(VM) 을 모니터링하는 중간 관리자이기도 하다.
하이퍼 바이저의 종류
네이티브 하이퍼바이저 (bare metal, MS Azure 에서 사용하는 방식)
호스트형 하이퍼바이저
도커 컨테이너 는 가상 머신(VM)과 비교했을 떄 하이퍼바이저와 게스트OS 가 필요하지 않기 때문에 가볍다. 호스트 OS 위에 애플리케이션의 실행 패키지인 이미지만 배포하면 끝이다.
가상 머신은 애플리케이션을 실행하기 위해 가상 머신을 실행하고 자원을 할당한 다음, 게스트 OS(무겁다)를 부팅해 애플리케이션을 실행한다. → 훨씬 복잡하고 무겁다.
리눅스의 Cgroup(control groups)과 네임스페이스(namespaces)에 대해 알아야 한다.
다른 프로세스 사이에 벽을 만드는 리눅스 커널의 기능이다.
??? 도커를 사용하는 개발 환경 중 Windows 와 macOS 가 다수인데 어떻게 도커는 Linux 커널의 기능을 사용하는가?
→ 도커 서버는 리눅스 VM 환경에서 실행되고 있기 때문이다. 따라서 모든 컨테이너가 리눅스 가상 머신에서 생성되며, 리눅스 커널이 컨테이너를 격리시키고 리소스를 나눠주게 된다.
Cgroup
네임스페이스
호스트 OS 는 공유하지만 하나의 컨테이너는 다른 컨테이너와 격리되며 그 안에서 실행되는 프로세스를 작동시키기 위해 필요한 양에 맞는 디스크, 네트워크, RAM 등이 할당되어 있다.
도커 이지미는 응용 프로그램을 실행하는 데 필요한 모든 것을 포함한다.
필요한 모든 것
‘docker run <이미지>’
명령어 실행