■ Apache2 설치하여 웹서버 실행
도커는 기본적으로 컨테이너에 172.17.0.x 의 IP를 순차적 할당(내부 네트워크)을 받는다.
외부로 컨테이너의 어플리케이션을 노출하기 위해서는 컨테이너IP 와 호스트IP를 바인딩 해야 한다.
<외부로 노출하는 도커 컨테이너 실행 예>
# docker run -i -t --name webserver -p 80:80 ubuntu:14.04
-p 는 컨테이너의 포트를 호스트의 포트와 바인딩한다.
[호스트포트] : [컨테이너포트]
<다음은 호스트 7777 포트를 컨테이너의 80포트와 바인딩의 예>
# docker run -i -t -p 3306:3306 -p 192.168.56.101:7777:80 ubuntu:14.04 root@c2e5af01206c:/# apt-get update root@c2e5af01206c:/# apt-get install -y apache2 root@c2e5af01206c:/# service apache2 start
호스트의 특정 IP 를 사용하기 위하여, 192.168.56.101:7777:80 으로 바인딩할 IP로 명시,
여러개의 포트를 외부에 노출하기 위하여 -p 옵션을 여러개 사용한다.
컨테이너 내에서 아파치를 실행 했을때..다음과 같은 오류가 난다면...
Starting web server apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message
[/etc/apache2/apache2.conf] 파일에서 "ServerName localhost" 설정 후 저장.
service apache2 restart 또는 start 하면 된다.
다음과 같이 브라우저에서 실행을 하면 [호스트IP] : 192.168.56.101:7777 으로 접근이 가능.
호스트의 IP 와 포트를 컨테이너의 IP 와 포트로 연결한다는 개념은 172 대역을 가진 컨테이너의 NAT IP 와 80번 포트로 서비스한다고 여겨짐.
즉, 172.17.0.x :80으로 접근할 수 있다.
■ 도커 컨테이너 외부노출 아키텍처
■ Nginx 설치하여 웹서버 실행
# docker run -d -p 8000:80 nginx:latest Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 8176e34d5d92: Pull complete 5b19c1bdd74b: Pull complete 4e9f6296fa34: Pull complete Digest: sha256:4771d09578c7c6a65299e110b3ee1c0a... Status: Downloaded newer image for nginx:latest 03c80ecf37dc0012f74ad2c6a66e1d5c13bd60d81bc7728c9815d05e7d784e36 [root@localhost ~]# curl localhost:8000 <!DOCTYPE html> <html> <head> ... </html>
다음과 같이 브라우저에서 실행을 하면 [호스트IP] : 8000 으로 접근이 가능하다.
여러개 컨테이너들의 포트를 사용하고 게시하고 있다면 docker port 로 도커가 할당한 포트를 확인 후 적용 해야 할 것이다.