컨테이너는 기본적으로 외부 환경에 노출되지 않는다. 각 컨테이너는 고유의 IP 주소를 갖지만, 이 IP 주소는 도커가 관리하는 내부 가상 네트워크의 주소지 호스트 컴퓨터가 연결된 물리 네트워크에 연결된 것이 아니다. 컨테이너의 포트를 공개한다는 것은 도커가 호스트 컴퓨터의 포트를 주시하다가 해당 포트로 들어오는 트래픽을 컨테이너로 전달해 주는 것이다. 앞서 본 예제에서는 호스트 컴퓨터의 8080번 포트로 들어온 트래픽이 컨테이너의 80번 포트로 전달됐다. 그림 2-6은 이 과정을 나타낸 것이다.
▲ 그림 2-6 호스트 컴퓨터의 물리 네트워크와 컨테이너의 가상 네트워크의 관계
이 그림에서 나의 컴퓨터는 도커를 실행하는 호스트 컴퓨터가 되고, IP 주소는 192.168.2.150이다. 이 주소는 내가 사용하는 물리 네트워크의 주소이며 나의 집 공유기가 부여한 것이다. 이 컴퓨터에는 도커를 통해 한 개의 컨테이너가 실행 중인데, 이 컨테이너의 IP 주소는 172.0.5.1이다. 이 주소는 도커가 부여한 도커 가상 네트워크의 주소다. 호스트 컴퓨터가 연결된 물리 네트워크의 컴퓨터는 컨테이너의 IP 주소에 접근할 수 없다. 왜냐하면 이 주소는 도커 내부에만 존재하는 주소이기 때문이다. 그러나 컨테이너의 포트가 공개됐으므로 컨테이너로 트래픽을 전달할 수는 있다.