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/


11 則留言:

  1. 感謝分享一系列實用又詳細的文章, 請問下一篇什麼時候會發布?
    謝謝~

    回覆刪除
    回覆
    1. 應該這週末吧 哈 先活過這禮拜!

      刪除
    2. 不好意思, 請教一下.
      每次進入都要輸入
      docker run -i -t -h sandbox sequenceiq/spark:1.2.0 bash
      這行指令嗎?
      謝謝

      刪除
    3. 看你的用途.如果環境已經設定好,為了讓每次執行時的環境一致,就會用run(run 的時候可以增加--rm參數避免產生container https://docs.docker.com/reference/run/#clean-up-rm).
      如果是要延續之前開的container(例如東西做到一半就關掉),可以使用docker start(https://docs.docker.com/reference/commandline/cli/#start)開啟先前的container (使用docker ps -a可以看到先前所有開過還沒有刪除的container)

      刪除
    4. 謝謝~ 已經參照您的步驟做完第三篇.

      期待第四篇中!!!!!!!

      刪除
    5. Orz...我希望今天晚上能生出來!

      刪除
    6. [Spark][教學] Spark x Docker x ipython Notebook !(四)-pyspark設定+commit images
      http://bryannotes.blogspot.tw/2015/01/spark-spark-x-docker-x-ipython-notebook_28.html
      剛剛發佈,請參考~有任何問題隨時跟我說~

      刪除
    7. 謝謝~
      我這幾天用CentOS再實作一次,但在安裝 ipython notebook 時,要啟動時一直出現問題。
      問題截圖:
      https://db.tt/Y6v6I2x8
      https://db.tt/4aSUpdyx
      非常感謝回覆~謝謝

      刪除
    8. 我自己沒遇過這個問題@@ 看訊息是因為ipython notebook啟動時會預設一個本地的ip做為啟動web服務的窗口,但是ipython無法指定那個ip
      試試看這裡的解決方式:
      https://github.com/ipython/ipython/issues/5802

      啟動sudo ifup lo

      刪除