2020-10-21 도커 강의정리(1) 도커란
도커
- 도커란? 컨테이너를 사용하여 응용프로그램을 더 쉽게 만들고 배포하고 실행도록 설계된 도구.
- 컨테이너 : 다양한 프로그램, 실행환경을 컨테이너로 추상화하고 동일한 인터페이스를 제공.
- 코드와 모든 종속성을 패키지화하여 응용프로그램이 컴퓨팅 환경에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 한다.
- 컨테이너 이미지 : 코드, 런타임, 시스템도구, 시스템라이브러리 등 응용프로그램을 실행하는 데 필요한 모든것을 포함.
- 컨테이너는 이미지의 인스턴스라고 생각하면 된다.
흐름
-
사용하기 위해 도커 CLI에 커맨드를 입력 => 도커서버(Daemon)이 커맨드를 받아 이미지를 생성하거나 실행하거나 알맞은 작업을 수행한다.
-
$docker run hello-world
-
도커가상화 기술과 기존의 가상화 기술
공통점
- 하드웨어에서 격리된 환경 내에 애플리케이션을 배치.
차이점
- 격리된 환경을 얼마나 격리시키는지.
- VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않아서 가볍다.(오버헤드가 적다)
- 애플리케이션을 실행할때, 호스트OS에 실행패키지(이미지)를 배포하면 되지만, VM은 VM을 띄우고 게스트OS부팅하고 실행하기 때문에 무겁다.
- 도커커는 호스트 OS에 올라가기 때문에 다른 컨테이너들과 동일한 커널을 공유한다.
- 컨테이너내부에서 돌아가는 모든 프로세스는 호스트 OS에서 볼 수 있다.
기존방식(하이퍼 바이저기반)
-
한대의 서버를 하나의 용도로만 사용하고 남는 리소스는 방치, 안정적이지만 비효율적이다.
- 논리적으로 공간을 분할할 수 있게해준다.
- VM이라는 독립적인 가상 환경의 서버를 이용할 수 있다.
- 하이퍼바이저는 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게하는 기술, 하드웨어를 가상화하면 하드웨어와 각각의 VM을 모니터링하는 중간관리자이다.
하이퍼바이저
- 네이티브 하이퍼바이저와 호스트형 하이퍼바이저로 나눌 수 있다.
- 네이티브 하이퍼 바이저 : 하이퍼바이저가 하드웨어를 직접제어해서 자원을 효율적으로 사용가능, 별도의 호스트 OS가 없어서 오버헤드가 적다. 여러 하드웨어 서버를 세팅해야되서 설치가 어렵다.
- 호스트형 하이퍼바이저
- 호스트OS위에서 실행, 하드웨어 자원을 VM내부의 게스트 OS에 에뮬레이트하는 방식이라 오버헤드가 크다.
- 게스트 OS종류에 대한 제약이 없고, 구현이 쉽다.
- 많이 쓰이는 방식
- 코어가 독립된VM환경으로 각각 간다. Core1에서 문제가 생겨도 Core2에 문제가 전혀없다.
어떻게 컨테이너를 격리시킬까?
- 리눅스에 Cgroup(Control Group)과 네임페이스(namespace)를 활용
- Cgroup : CPU, 메모리, Network bandwidth, I/O 등 프로세스 그룹의 시스템 리소스 사용량 관리 => 리소스를 많이 쓰는 프로그램을 Cgroup에 넣어서 CPU, 메모리 등 리소스 제한을 걸 수 있다.
- 네임스페이스 : 하나의 시스템에서 프로세스를 격리시킬 수 있는 가상화 기술. 경량 프로세스 가상화 기술
이미지로 컨테이너 만들기
- 이미지는 애플리케이션을 실행하는데 필요한 모든것을 포함.
- 필요한 것들
- 시작시 실행될 명령어
- 파일 스냅샷
이미지 만드는 순서
- Docker 클라이언트에 docker run image입력
- 도커 이미지에 있는 파일 스냅샷을 컨테이너 하드 디스크에 옮긴다.
Written on October 21, 2020