이전 페이지에서는 Windows7 가 설치된 개인 PC 에 CoreOS 와 Docker 를 설치하여, cluster 환경을 구축하는 방법을 포스팅 했습니다. CoreOS 를 설치하고 나면 별도의 과정 없이 바로 Docker 를 이용할 수 있습니다. 본 페이지에서는 Docker 컨테이터에서 간단한 Web server 기능을 하는 간단한 Python 스크립트를 실행하고, 이를 Windows 의 Web browser 에서 확인하는 방법을 다룹니다.


참고로, 궂이 CoreOS 를 설치하지 않고 Docker 사이트에 있는 install 과정만 따라 하더라도 이후 docker 사용 방법은 동일합니다.


여기서는 Docker 사용법은 설명하지 않습니다. Docker 에 관한 훌륭한 포스팅이 많으므로, 해당 링크를 남기는 것으로 설명을 갈음합니다.


도커(Docker) 튜토리얼 : 깐 김에 배포까지 - Docker 사용법(추천)

CoreOS : 설치부터 컨테이너 배포까지 - 김창섭 님 발표 슬라이드

Intro to Docker - www.docker.io 의 슬라이드.

Docker란 무엇인가? - Docker 기본 개념과 성능

Lightweight Linux Container Docker 를 활용하여 어플리케이션 배포하기 - 김영찬 님 발표

docker the cloud - spoqa의 xym 님의 글


+@

내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기

- '개발환경 설정' 이라는 문제를 docker 는 container 로, vagrant 는 가상화로 해결하고자 한다.

Clustered computing with CoreOS, fleet and etcd - CoreOS 개발자 발표


1. Docker ubuntu container 실행

docker pull ubuntu

docker run -i -t -p 9999:8080 ubuntu


ubuntu 최신버전(14.04) 이미지를 실행합니다. 해당 Container 는 CoreOS 의 9999 번 포트를 8080 번 포트로 포워딩 받습니다.

2. Python 스크립트 작성

vi home/simple_response.py

/home 디렉토리에 simple_response.py 파일을 만들고 아래 소스 코드를 입력합니다.

#!/usr/bin/python
from http.server import BaseHTTPRequestHandler,HTTPServer

PORT_NUMBER = 8080
HTML_MESSAGE = "Hello World!\n"

#This class will handles any incoming request from the browser
class myHandler(BaseHTTPRequestHandler):

        #Handler for the GET requests
        def do_GET(self):
                self.send_response(200)
                self.send_header('Content-type','text/html')
                self.end_headers()
                # Send the html message
                self.wfile.write(bytes(HTML_MESSAGE, 'UTF-8'))
                return

try:
        #Create a web server and define the handler to manage the incoming request
        server = HTTPServer(('', PORT_NUMBER), myHandler)
        print('Started httpserver on port ', PORT_NUMBER)

        #Wait forever for incoming htto requests
        server.serve_forever()

except KeyboardInterrupt:
        print('^C received, shutting down the web server')
        server.socket.close()

"exit" 명령어를 입력해 container 를 나옵니다. 스크립트는 container 밖에서 실행하도록 하겠습니다.


docker ps -a

docker start <CONTAINER_ID>

<CONTAINER_ID> 부분에 직전에 종료한 container 의 id 를 입력하여 해당 container 를 살려 냅니다.

docker exec -d e2c7 python3 /home/simple_response.py

ubuntu 최신버전(14.04)에는 python 3.4 버전이 이미 설치되어 있습니다. "python3" 명령어로 위 파일을 실행합니다. 명령어는 "python" 이 아니라 "python3" 입니다.

docker ps

docker ps 명령어를 이용해 확인해 보면 PORTS 에서 "0.0.0.0:9999→8080/tcp" 를 볼 수 있습니다. Cluster 의 9999 tcp 포트가 container 의 8080 포트로 포워딩 되고 있다는 뜻입니다.

curl http://127.0.0.1:9999

9999번 포트의 응답을 확인합니다. "Hello World!" 메세지를 확인할 수 있습니다.


container 내의 Python 스크립트가 "Hello World!" 메세지를 반환하는 Web server 역할을 하고 있음을 볼 수 있습니다. 클러스터 내에서 응답을 확인했으니, 이제 windows 에서 클러스터로 port forwarding 을 해 주기만 하면 됩니다.

3. Port Forwarding (windows -> CoreOS)

방법은 간단합니다. VirtualBox 에서 core-01 을 선택하고 "설정→네트워크→포트포워딩" 으로 들어가서 127.0.0.1:9000 포트를 게스트의 9999 번 포트로 포워딩하는 규칙을 추가하면 됩니다.


Web Browser 에서 127.0.0.1:9000 으로 접속하면 Hello World! 를 출력하는 것을 볼 수 있습니다.

Windows 의 9000 포트 -> coreOS의 9999 번 포트 -> docker container 의 8080 번 포트

이렇게 2번의 포트 포워딩을 거쳐, windows 에서 실행한 웹 브라우져가 container 내의 python 웹 서버와 통신하는 것입니다.