도커는 리눅스 컨테이너를 기반으로 하여 특정한 서비스를 패키징하고 배포하는데 유용한 오픈소스 컨테이너화 플랫폼.
사실상 현재 컨테이너 기술의 표준이라고 볼 수 잇으며 리눅스의 네임스페이스와 cgroup같은 커널 기능을 사용하여 가상화하는 기술을 말한다.
도커와 유사한 것이 바로 VM(가상머신)이다. 어떤 차이점이 있는지 살펴보도록 하자
먼저 VM(가상머신)을 보면 아래 다이어그램에 표시된 것처럼 호스트 OS위에 게스트 OS 전체를 가상화한다. 따라서 이미지 용량이 매우 크고 가상머신 이미지를 지속 배포하기엔 어려움이 존재함.
도커를 보면 가상머신과는 다르게 게스트 OS설치가 필요가 없다. 자원을 HOST OS와 공유하여 용량이 적으며 컨테이너에는 필요한 Bins/Libs만 존재함 따라서 배포에 수월함
도커 공식 홈페이지에서 가져온 아키텍처이다. 아래 다이어그램을 보면 도커는 클라이언트와 서버가 존재함.
Docker 클라이언트로 사용자가 명령어를 입력하면 도커 클라이언트는 명령어를 도커 데몬에게 Docker API로 전달한다.
*도커데몬 - Doker API 요청을 수신하고 이미지, 컨테이너, 네트워크 및 볼륨과 같은 Docker 객체를 관리함.
Docker 레지스트리는. Docker 이미지를 저장하는 곳.
Docker Hub에 퍼블릭 레지스트리를 생성할 수 있고 자신의 개인 레지스트리를 생성할 수도 있다.
- 이미지는 도커 컨테이너를 생성할 때 필요한 지시사항이 포함되어있는 읽기 전용 파일
- 기존 이미지를 커스터마이징 하여 새로운 이미지 생성 가능
- 직접 이미지를 만들고 싶으면 오커 파일에 필요한 것들을 절차에 맞게 기입하고 실행하면 됨.
- 컨테이너는 실행할 준비가 끝난 이미지 파일의 객체다. 기본적으로 컨테이너는 다른 컨테이너 및 해당 호스트 시스템과 비교적 잘 격리되어 있음.