-
도커를 공부하다 보면 가장 많이 등장하는 단어가 "컨테이너"이다. 그렇다면 컨테이너는 무엇이고 VM과 비교하여 무엇이 다른지 알아보자.
https://medium.com을 참고하여 순전히 개인 스터디를 위해 작성한다.
컨테이너
"VM처럼 하드웨어의 가상화를 제공하는것과 달리, 컨테이너는 유저공간의 추상화를 통해 운영체제 레벨의 가상화를 제공한다"컨테이너도 VM처럼 별도의 priate space, 루트 권한, 사설네트워크, IP주소, 커스텀 라우트, iptable 규칙, 파일 시스템 마운트등의 기능을 갖는다.
하지만 컨테이너는 "호스트 시스템의 커널을 다른 컨테이너들과 공유한다"
컨테이너는 유저 공간만을 포함하고, VM에는 포함되는 커널, 버추얼 하드웨어가 포함되지 않는다.
여러개의 컨테이너가 하나의 호스트 머신위에서 돌아가면 컨테이너는 자신만의 격리된 유저 공간을 갖는다.
도커란?
도커 컨테이너는 가상화된 공간을 생성하기 위해 리눅스의 자체 기능인 chroot, 네임스페이스, cgroup을 사용함으로써 프로세스 단위의 격리 환경을 만들기 때문에 성능 손실이 거의 없다.
컨테이너에 필요한 커널은 호스트의 커널을 공유해 사용하고, 컨테이너안에는 애플리케이션을 구동하는 데 필요한 라이브러리 및 실행 파일만 존재한다.
리눅스 커널이란?
시스템에 존재하는 자원을 효율적으로 관리하는 자원 관리자로 프로세스관리, 메모리관리, 파일시스템관리, 디바이스제어, 네트워크 관리 등이 있다.즉, 리눅스 커널은 프로세서와 시스템 메모리에 상주하면서 디바이스나 메모리 같은 하드웨어 자원을 관리하고, 프로세스의 스케줄을 관리하여 다중 프로세스를 구현하고, 시스템에 연결된 입출력을 처리하는 운영체제의 핵심 역할을 수행한다.chroot이란?
현재 실행중인 프로세스와 차일드 프로세스 그룹에서 root 디렉토리를 변경하는 작업을 말한다.
네임스페이스란?
하나의 시스템에서 시스템자월을 가상화하여 namespace로 구분되는 각각의 독립된 공간을 만들어 주는 기술
1. UTS namespace : hostname 을 변경하고 분할
2. IPC namespace : Inter-process communication. 프로세스간 통신 격리
3. PID namespace : PID (Process ID)를 분할 관리
4. NS namepsace : file system 의 mount 지점을 분할하여 격리
5. NET namespace : Network interface, iptables 등 network 리소스와 관련된 정보를 분할
6. USER namespace : user와 group ID를 분할 격리
cgroup (Control Group) 이란?
실행 프로세스가 사용하는 block I/O, CPU, memory등의 자원을 제한하고 감시하고 계산하는 리눅스 커널의 기능시스템의 자원할당, 우선순위지정, 거부, 관리 모니터링등의 제어 기능을 수행하므로 자원의 효율성을 향상시킴도커 이미지란?
VM의 iso파일과 비슷한 개념으로 도커 이미지는 여러 개의 계층으로 된 바이너리 파일을 갖는다.
컨테이너를 생성하고 실행할 때 읽기 전용으로 사용한다.
[저장소이름]/[이미지이름]:[태그]의 규칙을 갖는다.
도커 컨테이너
도커 이미지를 이용해 컨테이너를 생성하면파일시스템, 격리된 시스템 자원, 네트워크, 별도의 공간을 생성하며 이를 도커 컨테이너라고 부른다.컨테이너는 읽기 전용으로 사용되며 원본 도커 이미지와 다른 컨테이너에는 어떠한 영향을 주지 않는다.'Docker' 카테고리의 다른 글
2-1. 도커 명령어 (1) 2018.11.13 1-1. 도커를 시작하기 위해 vm이란? (0) 2018.11.11