- Docker(도커) : 컨테이너 가상화 시스템
가상화 컨테이너에 application 배포를 자동화 시켜주는 오픈소스 엔진
container 가상화 실행 환경 위에 application 배포 엔진을 더함으로써 사용자의 코드를 어디서든 빠르고 가볍게 실행시킬수 있는 기술을 제공
docker는 한 컨데이너 당 하나의 application이나 프로세스를 실행하는 것을 권함
- Docker는 크게 4가지 부분으로 되어 있음
(1) Docker client 와 server (server는 docker engine으로 불리기도 함)
(2) Docker 이미지
(3) Docker registries
(4) Docker containers
Docker는 클라이언트와 서버 구조로 이루어져 있음
클라이언트가 서버에 명령을 전달하고 서버가 실행시키는 구조
docker binary 명령어
가 docker 클라이언트이고, dockerd
가 docker daemon 혹은 docker engine 임
클라이언트와 서버는 동일한 호스트 안에서 운영 될수도 있으며, 서로 다른 호스트에서 운영 될수도 있음
Docker의 life cycle에서 docker 이미지는 build
의 부분에 해당
Docker container에서 실행시키고 싶은 application을 docker 이미지로 빌드해서 실행시키게 됨
Docker registires는 docker 이미지를 저장하는 repository라고 보면 됨
Source code를 Github에 저장하여 관리하듯 docker 이미지
는 Dockerhub
같은 docker registries에 저장한다고 생각하면 됨
Github과 마찬가지로 public registry 가 있고 private registry가 있음
Docker container 에서 docker 이미지가 실행됨
Docker container는 하나 혹은 그 이상의 프로세스를 실행 시킬수 있음
Docker는 modern한 리눅스 커널이 설치되어 있는 x64 호스트에서는 다 실행 가능
overhead (오버헤드. 어떤 처리를 하기 위해 들어가는 간접적인 처리 시간 · 메모리 등)
가 적기 때문에 권장됨최근에는 docker를 Windows 나 Mac에서도 사용 가능
Docker 컨테이너는 독립된 root 파일 시스템이기도 하므로 파일 시스템 분리
가 이루어져 있음
또한 docker 컨테이너는 호스트와 분리된 프로세스 환경
을 가지고 있으므로 독립적인 프로세스를 실행할수 있음
네트워크 또한 분리 되어 있어 독립적인 가상 네트워크 인터페이스 와 IP 주소
를 가질 수 있음
Resource isolation and grouping
cgroups(control groups)
기능을 통해서 docker container 마다 독립적인 CPU와 메모리가 할당 될 수 있음Docker 파일 시스템은 copy-on-write
을 사용하여 효율적이며 빠른 디스크 I/O를 실행
Docker 컨테이너에서 STDOUT
, STDERR
, STDIN
을 통해서 생성되는 로그들은 전부 수집되어 분석하거나 trouble-shooting 을 가능하게 해줌
<출처> wecode(코딩 부트캠프) 세션