아래 그림을 보자.
당연히 서버-클라이언트 구조로 되어 있다.
docker build/pull/run
등의 커맨드를 주면, 도커 데몬이 해당 커맨드를 실행해서 원격 registry 도커 허브에 있는 이미지 파일을 다운로드 받는다. docker create
명령어로 도커 컨테이너를 생성한 뒤 docker start
명령어로 도커 컨테이너를 프로세스로 만들어 실행할 수 있다. 도커 이미지는 특정 시점에서 어플리케이션과 어플리케이션의 종속성, 그리고 실행환경 전반을 snapshot
으로 찍어 놓은 read only 묶음 파일이라고 보면 될 것 같다.
snapshot
이미지는 여러 레이어로 구성될 수 있으며, 각 레이어들은 고유한 uuid 값을 가진다.
도커 이미지로 부터 만들어진 실행 가능한 런타임 환경으로, portable(이식가능) 단위가 된다. 컴퓨팅 환경의 표준화를 구현 했다고 하는데, 이건 low 단에 어떤 환경이 있더라도 어플리케이션이 구동 되게 하려는 java의 WORA 철학과도 어느 정도 맞물리는 부분이 있는 것 같다. 어떻게 보면 java 또한 hw에 종속적이지 않은 개발을 하기 위해 jvm을 만들었으니까.
그리고 컨테이너를 생성하면 도커 이미지 파일 위에 rw 레이어인 컨테이너 레이어가 생기며 프로세스로 구동 된다고 한다.