認識那條鯨魚 Docker 初探

29
認識那條鯨魚 - Docker 初探 by 王仲昀 [email protected]

Transcript of 認識那條鯨魚 Docker 初探

Page 1: 認識那條鯨魚   Docker 初探

認識那條鯨魚 - Docker 初探

by 王仲昀[email protected]

Page 2: 認識那條鯨魚   Docker 初探

王仲昀 / Cloud

Github ID: fatcloud

用途不明的技能練得很多,從電

子電路到機械甚至光學都摸過一

陣子,都能自幹一些東西。

練的最深的技能仍然是寫程式

Page 3: 認識那條鯨魚   Docker 初探
Page 4: 認識那條鯨魚   Docker 初探

I come, I see, I conquer. 

- Emperor Seabunny

Page 5: 認識那條鯨魚   Docker 初探

拍.電.視.時間 (Python Computer Vision time)

臉書描述:

一個企圖把對 Python + OpenCV 有興趣的人類聚集起來,讓大家一起挖坑跳坑、 Demo 斷頭 project,分享一些用途不明的新奇技術,以及堆積整體開發實力的社團

目前狀態:

● 有人挖坑 + 跳坑 [||..............]● Demo 斷頭 project [||..............]● 分享一些用途不明的新奇技術 [||||||||........]● 堆積整體開發實力 [||||............]

一個每一到三星期就會舉辦分享活動,討論較深較有趣的軟體技術的社團。

Page 6: 認識那條鯨魚   Docker 初探

成就回顧

● 挖坑 / 跳坑 + Demo 斷頭 project 記錄○ 雷射筆畫螢幕 => 自挖自跳自 Demo

■ 製做完整的火焰效果

■ 做成 chrome 的 plug-in 讓它能在簡報時直接使用 (?)

● 分享 / 試玩新技術○ 動作顯微鏡

○ 類神經致敬神器

○ 天社福肉 (TensorFlow) 土魠魚油 (tutorial)

● 堆積整體開發實力○ TechTree!

Page 7: 認識那條鯨魚   Docker 初探

警告以下按鈕請不要現場點擊,要也在回到家中夜深人靜的時候再嘗試

Page 8: 認識那條鯨魚   Docker 初探
Page 9: 認識那條鯨魚   Docker 初探

警告以下按鈕請不要現場點擊,要也在回到家中夜深人靜的時候再嘗試

因為這個功能是呼叫 Github 的 API 實現,一分鐘限呼叫六次

現在人數太多,大家一起去按只會下載到空的 .zip 檔

想要嘗試可以直接下載 PyCV-time 的 Github 不要走 TechTree

Page 10: 認識那條鯨魚   Docker 初探

歡迎加入

● TechTree 的研發團○ 軍師

○ 武將

○ 工兵

● 揪團打怪

● 有趣的講題分享

[預告] 下星期將會以 Shadertoy 為出發點帶大家認識 OpenGL / WebGL 這類的語

言,學著自己寫 Shader 跑圖出來!!

Page 11: 認識那條鯨魚   Docker 初探

繼續之前,回想一下 TechTree 這東西

● 這概念聽起來不是只限於 Python + OpenCV 可用

● 環境的安裝將是主要的進入障礙

● 剛才執行的指令是不是有點長看起來怪怪的?

Page 12: 認識那條鯨魚   Docker 初探

回顧剛才執行 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

Page 13: 認識那條鯨魚   Docker 初探
Page 14: 認識那條鯨魚   Docker 初探

今日的主菜

● 介紹自己、介紹拍電視時間、介紹 TechTree● 執行比較簡單的程式

○ 基本動作教學

● 比較麻煩的程式:

○ 用到 GUI 的程式

○ 用到 webcam 的程式

○ 用到 GPU 的程式

Page 15: 認識那條鯨魚   Docker 初探

Docker 基本動作教學

參考資料:《Docker —— 從入門到實踐-》正體中文版

Page 16: 認識那條鯨魚   Docker 初探

基本概念

● Docker 讓你在同一台電腦上的平行世界執行程式

● 關於平行世界的詞彙有兩個○ container○ image

● 一個 container 就是一個平行世界的分支

● 一個 image 則是一種 container 的樣板

● 用法大致就是○ <要執行的指令> 改成 docker <一堆參數設定> <平行世界名稱> <要執行的指令>○ 以 firefox http://ppt.cc/7KJuO 為例

Page 17: 認識那條鯨魚   Docker 初探

創造平行世界分支(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.

Page 18: 認識那條鯨魚   Docker 初探

從樣板出發創造平行世界分支 (container)

● 執行 docker images ⇒ 顯示有名為 ubuntu 的 image

● 執行 docker run ubuntu bash 就會在 ubuntu 的環境執行 bash● 沒有反應?因為它發生在平行世界裡我們看不到阿~~● 執行 docker run -it ubuntu bash 才會把異世界的訊息接到當前的 terminal 上

● 再開一個 terminal 執行 docker ps 就可以看到現正運行的 container

Page 19: 認識那條鯨魚   Docker 初探

進到異世界胡搞瞎搞 (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 <被自動取的名子> 反應會跟第一次執行一樣

Page 20: 認識那條鯨魚   Docker 初探

把現實世界的檔案掛載到 container 裡

● 在執行 docker run 的時候使用 -v <本機資料夾>:<掛載路徑>● docker run -it -v ~/Desktop/:/hahaha ubuntu bash● 這樣養在異世界裡的程式就可以對這資料夾裡的檔案為所欲為啦!

● 已經忘記是在哪看到,見過一個資訊說掛載要掛資料夾,不要掛單一檔案

Page 21: 認識那條鯨魚   Docker 初探

儲存異世界的狀態

● 把剛才執行好要儲存為樣板的 container 找出來 docker ps -a● docker commit <要存的 container 名稱> -m “說明訊息” <樣板命名>● 有 docker hub 帳號的話可以 docker pull 放到網路上

Page 22: 認識那條鯨魚   Docker 初探

執行比較麻煩的案例

Page 23: 認識那條鯨魚   Docker 初探

執行 GUI 環境

● 我的做法來自這篇教學以及下方的留言

● X11 是一支在原生作業系統上執行的程式,負責執行視窗

● 所有的程式想要開出視窗來都要拜託 X11

● X11 表示:欸你誰阿?

● 你執行的程式表示:我 root 啦我超大

● X11:root 是誰阿沒聽過,掰(掛電話)

Page 24: 認識那條鯨魚   Docker 初探

執行 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

Page 25: 認識那條鯨魚   Docker 初探

其實要顧的事項還不只於此

● 執行前要把環境變數給好

○ -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

Page 26: 認識那條鯨魚   Docker 初探

執行要使用 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

Page 27: 認識那條鯨魚   Docker 初探

執行使用 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 設定

Page 28: 認識那條鯨魚   Docker 初探

小抄

能上 shadertoy 的 container

docker run -it -e DISPLAY -v $HOME/.Xauthority:/home/developer/.Xauthority --net=host --privileged fatcloud/ar-sandbox firefox

只要每次都把這些參數加上去

我們就可以做出一個毫無安全性可言的 docker container 啦!

Page 29: 認識那條鯨魚   Docker 初探

謝謝大家