O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

認識那條鯨魚 Docker 初探

2.952 visualizações

Publicada em

介紹 PyCV-time / TechTree
docker 操作基本功
在 docker container 中使用 GUI 介面 / webcam / GPU 前要做的處理

Publicada em: Tecnologia
  • Seja o primeiro a comentar

認識那條鯨魚 Docker 初探

  1. 1. 認識那條鯨魚 - Docker 初探 by 王仲昀 cloud@seabunny.tech
  2. 2. 王仲昀 / Cloud Github ID: fatcloud 用途不明的技能練得很多,從電 子電路到機械甚至光學都摸過一 陣子,都能自幹一些東西。 練的最深的技能仍然是寫程式
  3. 3. I come, I see, I conquer.  - Emperor Seabunny
  4. 4. 拍.電.視.時間 (Python Computer Vision time) 臉書描述: 一個企圖把對 Python + OpenCV 有興趣的人類聚集起來,讓大家一起挖坑跳坑、 Demo 斷頭 project,分享一些用途不明的新奇技術,以及堆積整體開發實力的社團 目前狀態: ● 有人挖坑 + 跳坑 [||..............] ● Demo 斷頭 project [||..............] ● 分享一些用途不明的新奇技術 [||||||||........] ● 堆積整體開發實力 [||||............] 一個每一到三星期就會舉辦分享活動,討論較深較有趣的軟體技術的社團。
  5. 5. 成就回顧 ● 挖坑 / 跳坑 + Demo 斷頭 project 記錄 ○ 雷射筆畫螢幕 => 自挖自跳自 Demo ■ 製做完整的火焰效果 ■ 做成 chrome 的 plug-in 讓它能在簡報時直接使用 (?) ● 分享 / 試玩新技術 ○ 動作顯微鏡 ○ 類神經致敬神器 ○ 天社福肉 (TensorFlow) 土魠魚油 (tutorial) ● 堆積整體開發實力 ○ TechTree!
  6. 6. 警告 以下按鈕請不要現場點擊,要也在回到家中夜深人靜的時候再嘗試
  7. 7. 警告 以下按鈕請不要現場點擊,要也在回到家中夜深人靜的時候再嘗試 因為這個功能是呼叫 Github 的 API 實現,一分鐘限呼叫六次 現在人數太多,大家一起去按只會下載到空的 .zip 檔 想要嘗試可以直接下載 PyCV-time 的 Github 不要走 TechTree
  8. 8. 歡迎加入 ● TechTree 的研發團 ○ 軍師 ○ 武將 ○ 工兵 ● 揪團打怪 ● 有趣的講題分享 [預告] 下星期將會以 Shadertoy 為出發點帶大家認識 OpenGL / WebGL 這類的語 言,學著自己寫 Shader 跑圖出來!!
  9. 9. 繼續之前,回想一下 TechTree 這東西 ● 這概念聽起來不是只限於 Python + OpenCV 可用 ● 環境的安裝將是主要的進入障礙 ● 剛才執行的指令是不是有點長看起來怪怪的?
  10. 10. 回顧剛才執行 TechTree 節點的動作 py27-cv2-ubuntu1404.py 其實是用來組出下面這個命令 docker run -it --rm -e DISPLAY -w /exp -v $HOME/.Xauthority:/home/developer/. Xauthority --net=host --privileged -v /home/cloud/Github/PyCV- time/experiments/augmented_reality:/exp fatcloud/py27-cv24-gui-camera python /exp/AR_realtime.py
  11. 11. 今日的主菜 ● 介紹自己、介紹拍電視時間、介紹 TechTree ● 執行比較簡單的程式 ○ 基本動作教學 ● 比較麻煩的程式: ○ 用到 GUI 的程式 ○ 用到 webcam 的程式 ○ 用到 GPU 的程式
  12. 12. Docker 基本動作教學 參考資料:《Docker —— 從入門到實踐-》正體中文版
  13. 13. 基本概念 ● Docker 讓你在同一台電腦上的平行世界執行程式 ● 關於平行世界的詞彙有兩個 ○ container ○ image ● 一個 container 就是一個平行世界的分支 ● 一個 image 則是一種 container 的樣板 ● 用法大致就是 ○ <要執行的指令> 改成 docker <一堆參數設定> <平行世界名稱> <要執行的指令> ○ 以 firefox http://ppt.cc/7KJuO 為例
  14. 14. 創造平行世界分支(container)之前要有樣板(image) ● 搜尋: docker search <keyword> ○ docker search tensoflow => 出現 xblaster/tensorflow-jupyter. ● 下載: docker pull <image_name> ○ docker pull xblaster/tensorflow-jupyter ● 撰寫 / 尋找野生的 Dockerfile ○ 例如這個 ● 然後建立:docker build <image_name> <Dockerfile> ● 檢查自己的電腦上現在有哪些 image:docker images.
  15. 15. 從樣板出發創造平行世界分支 (container) ● 執行 docker images ⇒ 顯示有名為 ubuntu 的 image ● 執行 docker run ubuntu bash 就會在 ubuntu 的環境執行 bash ● 沒有反應?因為它發生在平行世界裡我們看不到阿~~ ● 執行 docker run -it ubuntu bash 才會把異世界的訊息接到當前的 terminal 上 ● 再開一個 terminal 執行 docker ps 就可以看到現正運行的 container
  16. 16. 進到異世界胡搞瞎搞 (start, exec, stop) ● docker run -it ubuntu bash 成為新世界的 root 以後,現在要幹嘛咧? ● 胡亂做點改變再出去 ○ echo “haha” > a.txt ○ cat a.txt ● 重新執行一次 docker run -it ubuntu bash 成為新世界的神,剛剛那個檔案 a.txt 到哪去了? ● 把已經執行到停止的平行世界分支找回來 docker ps -a ● 啟動那個分支 docker start <被自動取的名子> ● 它還是在平行世界裡我們看不到 ● docker exec -it <被自動取的名子> bash 你就可以回去為所欲為了 ● 不過這次你要呼叫 docker stop <被自動取的名子> 才能讓它停下來 ● 其實也可以 docker start -i <被自動取的名子> 反應會跟第一次執行一樣
  17. 17. 把現實世界的檔案掛載到 container 裡 ● 在執行 docker run 的時候使用 -v <本機資料夾>:<掛載路徑> ● docker run -it -v ~/Desktop/:/hahaha ubuntu bash ● 這樣養在異世界裡的程式就可以對這資料夾裡的檔案為所欲為啦! ● 已經忘記是在哪看到,見過一個資訊說掛載要掛資料夾,不要掛單一檔案
  18. 18. 儲存異世界的狀態 ● 把剛才執行好要儲存為樣板的 container 找出來 docker ps -a ● docker commit <要存的 container 名稱> -m “說明訊息” <樣板命名> ● 有 docker hub 帳號的話可以 docker pull 放到網路上
  19. 19. 執行比較麻煩的案例
  20. 20. 執行 GUI 環境 ● 我的做法來自這篇教學以及下方的留言 ● X11 是一支在原生作業系統上執行的程式,負責執行視窗 ● 所有的程式想要開出視窗來都要拜託 X11 ● X11 表示:欸你誰阿? ● 你執行的程式表示:我 root 啦我超大 ● X11:root 是誰阿沒聽過,掰(掛電話)
  21. 21. 執行 GUI 程式 - 解法 ● 在異世界裡創一個帳號,和本機上的帳號有相同的 uid 及 gid ● 找出 uid/gid 的命令:id ● export uid=1000 gid=1000 && mkdir -p /home/developer && echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && echo "developer:x:${uid}:" >> /etc/group && echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && chmod 0440 /etc/sudoers.d/developer && chown ${uid}:${gid} -R /home/developer ● 換身份 su developer
  22. 22. 其實要顧的事項還不只於此 ● 執行前要把環境變數給好 ○ -e DISPLAY=$DISPLAY ● 護照也要用 -v 傳給 developer ○ -v $HOME/.Xauthority:/home/developer/.Xauthority ● 一般程式和 X11 溝通的通道也要接進去 ○ -v /tmp/.X11-unix:/tmp/.X11-unix ● 執行 firefox 要把對外的網路也連到 container 上 ○ --net=host(有這個設定就可以省略上一步) ● 直接抄答案:可以執行 firefox 的命令 ● docker run -it -e DISPLAY -v $HOME/.Xauthority:/home/developer/.Xauthority --net=host fatcloud/py27-cv24-gui-camera firefox
  23. 23. 執行要使用 webcam 的程式 ● 直接講結論:只有被加到 video 這個 group 的使用者才有資格使用 camera ● the webcam howto ● 當然也要掛載好 device -v /dev ● 通常用 --privilege 就會掛上去了,不過根據實測 kinect 不行,一定要 -v /dev ● docker run -it -e DISPLAY -v $HOME/.Xauthority:/home/developer/.Xauthority --net=host fatcloud/py27-cv24-gui-camera bash ● 執行 id 可以看到 video
  24. 24. 執行使用 GPU 的程式 ● 結論:要安裝適合自己 GPU 的 driver ● 假設你的本機已經裝好了 driver 的話 ○ 執行 glxinfo | grep "OpenGL version" 可以看到 NVIDIA 352.63 之類的字樣 ○ 可能要先裝相關的程式庫 sudo apt-get install mesa-utils ● 在 container 內執行 sudo apt-get install nvida-352 ● nvida-352 這裡要換成自己的 driver 版本 ● 執行前給一個 --privilidge 設定
  25. 25. 小抄 能上 shadertoy 的 container docker run -it -e DISPLAY -v $HOME/.Xauthority:/home/developer/.Xauthority -- net=host --privileged fatcloud/ar-sandbox firefox 只要每次都把這些參數加上去 我們就可以做出一個毫無安全性可言的 docker container 啦!
  26. 26. 謝謝大家

×