2015年1月18日 星期日

[Apache Spark][教學] Spark x Docker x ipython Notebook !(三)-Docker網路設定篇


         因為container是一個獨立的運行環境,我們要從本機連線進去必須透過docker的網路設定,相關的細節設定可以參考
這邊只就用得到的部分介紹.

  • 延續前一篇的狀態,我們可以透過docker ps來觀察container的狀態(我們可以開新的終端機,執行ssh boot2docker->sudo sh進入docker):

你會看到container的代號(先記下很常用到),原始的Image,以及最重要的port連結,這些port代表Docker與container溝通的port.
$wget http://container_ip:8000
  • 接著我們要知道container的IP

$docker inspect container_name | grep IPAddress
  • 這時候我們回到ipython notebook去查ip(可以按esc+:q跳出)
發現預設的IP位置是http://localhost:8888要改掉這個設定(因為我們剛開始進入conatainer的時候,host已經該成sandbox,8888這個ip也連不出去)
  • 我們先跳出ipython notebook(control+C),重新帶入新的參數進入
$ipython notebook --ip=sandbox --port=8088
  • 這時候我們在docker就可以連到container中了
  • 以下就是MAC USER要做的事情,因為mac並不能直接執行docker,所以是透過boot2docker來模擬一層centOS,才在上面執行docker,所以對於mac來說,要連線到container是分成兩個階段:先連線到boot2docker,再連線到container.剛剛我們只是打通後者而者.那前者的ip和port怎麼辦呢?
  • ip比較簡單,在commend line輸入:
Mac$boot2docker ip
就可以查到ip,先把這個記下來
  • 接著就是要暴露container的port到外部,這部分有幾個方法:
    1. 在docker file中expose port(https://docs.docker.com/reference/builder/)
    2. 在建立container的時候把port的對應設好,前面是本機地port,後面是container的port
    3. docker run -i -t -h sandbox -p 8080:8080 [image:tag]
    4. 再來一種像我們這樣,container都建好了,要事後補救的就比較麻煩了:
    • 先查詢container的ip
      docker inspect container_name | grep IPAddress
    • 用linux的指令暴露port
       iptables -t nat -A  DOCKER -p tcp --dport 8088 -j DNAT --to-destination 172.17.0.19:8088
  • 當boot2docker的ip確定好,container的port暴露出來後,就可以在我們自己的本機端的瀏覽器接上container內部的python notebook(前面是boot2docker的ip,port是container接出來的port)
  • http://192.168.59.103:8088/