도커 컨테이너 외부에 노출
컨테이너는 가상머신과 마찬가지 IP주소를 할당받는다.
기본적으로 도커는 컨테이너에 172.17.0.x 의 IP를 순차적 할당한다.
컨테이너를 생성한 후 ifconfig로 네트워크 인터페이스를 확인한다.
[root@localhost ~]# docker run -i -t --name network_test ubuntu:14.04 Unable to find image 'ubuntu:14.04' locally 14.04: Pulling from library/ubuntu c954d15f947c: Downloading [========================> ] 36.2MB/72.95MB c3688624ef2b: Download complete 848fe4263b3b: Download complete 23b4459d3b04: Download complete 36ab3b56c8f1: Download complete Digest: sha256:e1c8bff470c771c6e86d3166607e2c74e6986b05bf339784a9cab70e0e03c7c3 Status: Downloaded newer image for ubuntu:14.04 root@932ac299b590:/# root@932ac299b590:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 inet addr:172.17.0.2 Bcast:172.17.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:13 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1086 (1.0 KB) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
아무런 설정이 없었기때문에 이 컨테이너는 외부에 접근 할 수 없으며 도커가 설치된 호스트에서만 접근이 가능하다.
외부에 컨테이너의 어플리케이션을 노출하기 위해서는 컨테이너IP 와 호스트IP를 바인딩 해야 한다.
[root@localhost ~]# docker run -i -t --name mywebserver -p 80:80 ubuntu:14.04 root@4107b91f969d:/# [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4107b91f969d ubuntu:14.04 "/bin/bash" 31 seconds ago Up 30 seconds 0.0.0.0:80->80/tcp mywebserver 932ac299b590 ubuntu:14.04 "/bin/bash" 5 minutes ago Up 5 minutes network_test
-p 옵션은 컨테이너의 포트를 호스트포트와 바인딩하여 연결할 수 있게 설정한다.
-p의 옵션 형식은 다음과 같다.
[호스트포트] : [컨테이너포트]
호스트의 7777 포트를 컨테이너 80 포트와 연결하려면 7777:80 와 같이 입력하며
호스트의 특정 아이피를 사용하려면 192.168.0.100:7777:80 과 같이 바인딩할 아이피와 포트를 명시한다.
여러개의 포트를 외부에 개발하게되면 -p 옵션을 어러번 사용할수 있다.
[root@localhost ~]# docker run -i -t -p 3306:3306 -p 192.168.56.101:7777:80 ubuntu:14.04
실행이 완료되면 [도커엔진호스트IP] : 80 으로 접근이 가능하다.
호스트의 IP와 포트를 컨테이너의 아이피와 포트로 연결한다는 개념은 매우 중요하다.
172대역을 가진 컨테이너의 NAT IP와 80번 포트로 서비스하므로 여기에 접근하려면
172.17.0.x :80으로 접근할 수 있다.