■ 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 로 도커가 할당한 포트를 확인 후 적용 해야 할 것이다.



  • No labels