이미지 이름은 diamol/ch03-web-ping이고, 이 이미지는 도커가 가장 먼저 이미지를 찾기 위해 접근하는 저장소인 도커 허브에 저장돼 있다. 이미지를 제공하는 저장소를 레지스트리(registry)라고 하는데, 도커 허브는 무료로 제공되는 공개 레지스트리다. 도커 허브는 웹 인터페이스도 제공한다. 이 이미지에 대한 자세한 사항은 https://hub.docker.com/r/diamol/ch03-web-ping에서도 확인할 수 있다.
docker image pull 명령을 실행해 출력된 내용 중 흥미로운 부분은 이미지가 저장된 방식을 짐작케 하는 부분이다. 도커 이미지는 논리적으로는 하나의 대상(애플리케이션 스택 전체가 하나의 파일로 압축된 압축 파일을 생각하면 쉽게 이해할 수 있다)이다. 이 이미지의 경우 내가 작성한 애플리케이션 코드 외에 Node.js 런타임을 포함한다.
이미지를 내려받는 과정을 보면 여러 건의 파일을 동시에 내려받는다는 점에서 단일 파일을 내려받는 과정이 아니라는 것을 알 수 있다. 이들 각각의 파일을 이미지 레이어라고 부른다. 도커 이미지는 물리적으로는 여러 개의 작은 파일로 구성돼 있다. 그리고 도커가 이들 파일을 조립해 컨테이너의 내부 파일 시스템을 만든다. 모든 레이어를 내려받고 나면 전체 이미지를 사용할 수 있게 된다.
실습 내려받은 이미지로 컨테이너를 실행하고 실행된 애플리케이션의 기능을 확인하자.
docker container run -d --name web-ping diamol/ch03-web-ping
-d 플래그는 --detach의 축약형이다. 그러므로 이 컨테이너는 백그라운드에서 동작한다. 애플리케이션 역시 사용자 인터페이스 없이 배치 잡(batch job)처럼 동작한다. 그러나 2장에서 실행했던 웹 사이트 컨테이너와 달리, 이 컨테이너는 네트워크를 통해 요청을 받지 않는다. 그러므로 포트를 외부로 공개할 필요도 없다.