Docker란?
Docker는 LXC(Linux Container)를 활용한 소프트웨어로 프로세스가 하나 실행이 되면 내부 데이터들을 격리하듯이 컨테이너를 격리하는 기술이다.
도커는 컨테이너 라는 가상의 격리 환경을 만들기 위해 리눅스의 namespace
와 cgroups
이라는 기능을 사용한다.
- namespace : 프로세스를 독립시켜주는 가상화 기술로, 각 컨테이너에서 실행된 프로세스가 시스템(user, file, network, hostname, process)으로부터 독립할 수 있게 해준다.
- cgroups : 자원(cpu, memory, network, bandwidth)에 대한 제어를 가능하게 해주는 리눅스 커널 기능이다.
namespace와 cgroups
namespace
- 프로세스 별로 리소스 사용을 분리한다.
- VM에서는 각 게스트 별로 독립적인 공간을 제공하고 충돌하지 않도록 Hardware Resource 자체를 가상화 하는 반명 namespace는 Hardware Resource를 가상화 하지 않고, OS 자원을 가상화 한다.
- pid namespace : 프로세스 격리 처리
- net namespace : 네트워크 인터페이스
- ipc namespace : IPC 자원에 대한 엑세스 관리
- mnt namespace : 파일 시스템 포인트 관리
- host namespace : hostname 할당
cgroups
- Control Groups의 약자로 프로세스들이 사용할 수 있는 컴퓨팅 자원들을 제한하고 격리시킬 수 있는 리눅스 커널 기능이다.
- cgroups를 사용하면 다음 자원들을 제한할 수 있다.
- CPU
- Memory
- Network
- Device
- I/O