Docker Engine 이란
Docker Engine(Docker 가 설치된 Host) 은 3개의 Component 로 구성됨
- Docker Daemon
- Docker REST API Server
- Docker CLI
Docker Daemon
- Docker Daemon 은 Docker 객체인 Image, Container, Volume 및 Network 를 관리하는 Background Process
Docker REST API Server
- Docker REST API Server 는 프로그램이 쓰는 API 인터페이스로 Daemon 과 통신하고 명령어를 전달할 때 사용됨
Docker CLI
- Docker CLI 는 평시 사용하는 명령줄 인터페이스로 Container 실행, 중지 및 Image 제거 등에 사용됨
- Docker REST API Server 를 사용하여 Docker Daemon 과 상호작용하는데 이 때 Docker CLI 가 같은 Host 에 존재하지 않아도 됨
docker -H=10.123.2.1:2375 run nginx
와 같이 Docker Engine 의 주소와 포트를 지정해서 상호작용 가능
Containerization
- Docker 는 Namespace 로 공간을 구분함
- Process ID, Network, IPC, Mount 및 Unix Timesharing 시스템을 독립된 Namespace 에 생성
- 따라서 컨테이너가 각각 분리됨
Namespace - PID
- 모든 Process 는 같은 Host 에서 실행되지만 Namespace 에 의해 분리됨
- Container 내부에서 PID=1 인 Process 는 Host 에서 PID=5 인 Process 와 동일
docker exec {CONTAINER ID} ps -ef
로 확인한 PID 와ps -ef
로 확인한 PID 가 다름
cgroups
- Docker Host 와 Container 는 CPU 와 Memory 등 동일한 하드웨어 리소스를 공유함
- Container 가 사용할 수 있는 리소스는 기본적으로 제한이 없어서 Host 의 모든 리소스를 활용할 수 있음
- 이 때 cgroups(control groups) 를 통해 각 Container 에 할당된 하드웨어 리소스를 제한할 수 있음
docker run --cpus=.5 ubuntu
로 Container 가 사용할 CPU 를 50% 로 제한docker run --memory=100m ubuntu
로 Container 가 사용할 Memory 를 100MB 로 제한
- 자세한 내용은 공식 문서 참조