SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
認識那條鯨魚 - Docker 初探
by 王仲昀
cloud@seabunny.tech
王仲昀 / Cloud
Github ID: fatcloud
用途不明的技能練得很多,從電
子電路到機械甚至光學都摸過一
陣子,都能自幹一些東西。
練的最深的技能仍然是寫程式
I come, I see, I conquer. 
- Emperor Seabunny
拍.電.視.時間 (Python Computer Vision time)
臉書描述:
一個企圖把對 Python + OpenCV 有興趣的人類聚集起來,讓大家一起挖坑跳坑、
Demo 斷頭 project,分享一些用途不明的新奇技術,以及堆積整體開發實力的社團
目前狀態:
● 有人挖坑 + 跳坑 [||..............]
● Demo 斷頭 project [||..............]
● 分享一些用途不明的新奇技術 [||||||||........]
● 堆積整體開發實力 [||||............]
一個每一到三星期就會舉辦分享活動,討論較深較有趣的軟體技術的社團。
成就回顧
● 挖坑 / 跳坑 + Demo 斷頭 project 記錄
○ 雷射筆畫螢幕 => 自挖自跳自 Demo
■ 製做完整的火焰效果
■ 做成 chrome 的 plug-in 讓它能在簡報時直接使用 (?)
● 分享 / 試玩新技術
○ 動作顯微鏡
○ 類神經致敬神器
○ 天社福肉 (TensorFlow) 土魠魚油 (tutorial)
● 堆積整體開發實力
○ TechTree!
警告
以下按鈕請不要現場點擊,要也在回到家中夜深人靜的時候再嘗試
警告
以下按鈕請不要現場點擊,要也在回到家中夜深人靜的時候再嘗試
因為這個功能是呼叫 Github 的 API 實現,一分鐘限呼叫六次
現在人數太多,大家一起去按只會下載到空的 .zip 檔
想要嘗試可以直接下載 PyCV-time 的 Github 不要走 TechTree
歡迎加入
● TechTree 的研發團
○ 軍師
○ 武將
○ 工兵
● 揪團打怪
● 有趣的講題分享
[預告] 下星期將會以 Shadertoy 為出發點帶大家認識 OpenGL / WebGL 這類的語
言,學著自己寫 Shader 跑圖出來!!
繼續之前,回想一下 TechTree 這東西
● 這概念聽起來不是只限於 Python + OpenCV 可用
● 環境的安裝將是主要的進入障礙
● 剛才執行的指令是不是有點長看起來怪怪的?
回顧剛才執行 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
今日的主菜
● 介紹自己、介紹拍電視時間、介紹 TechTree
● 執行比較簡單的程式
○ 基本動作教學
● 比較麻煩的程式:
○ 用到 GUI 的程式
○ 用到 webcam 的程式
○ 用到 GPU 的程式
Docker 基本動作教學
參考資料:《Docker —— 從入門到實踐-》正體中文版
基本概念
● Docker 讓你在同一台電腦上的平行世界執行程式
● 關於平行世界的詞彙有兩個
○ container
○ image
● 一個 container 就是一個平行世界的分支
● 一個 image 則是一種 container 的樣板
● 用法大致就是
○ <要執行的指令> 改成 docker <一堆參數設定> <平行世界名稱> <要執行的指令>
○ 以 firefox http://ppt.cc/7KJuO 為例
創造平行世界分支(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.
從樣板出發創造平行世界分支 (container)
● 執行 docker images ⇒ 顯示有名為 ubuntu 的 image
● 執行 docker run ubuntu bash 就會在 ubuntu 的環境執行 bash
● 沒有反應?因為它發生在平行世界裡我們看不到阿~~
● 執行 docker run -it ubuntu bash 才會把異世界的訊息接到當前的 terminal 上
● 再開一個 terminal 執行 docker ps 就可以看到現正運行的 container
進到異世界胡搞瞎搞 (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 <被自動取的名子> 反應會跟第一次執行一樣
把現實世界的檔案掛載到 container 裡
● 在執行 docker run 的時候使用 -v <本機資料夾>:<掛載路徑>
● docker run -it -v ~/Desktop/:/hahaha ubuntu bash
● 這樣養在異世界裡的程式就可以對這資料夾裡的檔案為所欲為啦!
● 已經忘記是在哪看到,見過一個資訊說掛載要掛資料夾,不要掛單一檔案
儲存異世界的狀態
● 把剛才執行好要儲存為樣板的 container 找出來 docker ps -a
● docker commit <要存的 container 名稱> -m “說明訊息” <樣板命名>
● 有 docker hub 帳號的話可以 docker pull 放到網路上
執行比較麻煩的案例
執行 GUI 環境
● 我的做法來自這篇教學以及下方的留言
● X11 是一支在原生作業系統上執行的程式,負責執行視窗
● 所有的程式想要開出視窗來都要拜託 X11
● X11 表示:欸你誰阿?
● 你執行的程式表示:我 root 啦我超大
● X11:root 是誰阿沒聽過,掰(掛電話)
執行 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
其實要顧的事項還不只於此
● 執行前要把環境變數給好
○ -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
執行要使用 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
執行使用 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 設定
小抄
能上 shadertoy 的 container
docker run -it -e DISPLAY -v $HOME/.Xauthority:/home/developer/.Xauthority --
net=host --privileged fatcloud/ar-sandbox firefox
只要每次都把這些參數加上去
我們就可以做出一個毫無安全性可言的 docker container 啦!
謝謝大家

Mais conteúdo relacionado

Mais procurados

docker intro
docker introdocker intro
docker intro
koji lin
 

Mais procurados (20)

Docker Build
Docker BuildDocker Build
Docker Build
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
AWS EC2 for beginner
AWS EC2 for beginnerAWS EC2 for beginner
AWS EC2 for beginner
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Introduction to Golang final
Introduction to Golang final Introduction to Golang final
Introduction to Golang final
 
Software Engineer Talk
Software Engineer TalkSoftware Engineer Talk
Software Engineer Talk
 
容器式基礎架構介紹
容器式基礎架構介紹容器式基礎架構介紹
容器式基礎架構介紹
 
Docker 101
Docker 101Docker 101
Docker 101
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
Docker
DockerDocker
Docker
 
Docker基礎
Docker基礎Docker基礎
Docker基礎
 
docker intro
docker introdocker intro
docker intro
 
Docker open stack
Docker open stackDocker open stack
Docker open stack
 
Docker集群管理 工具篇
Docker集群管理 工具篇Docker集群管理 工具篇
Docker集群管理 工具篇
 
Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器Docker - 30秒生出100台伺服器
Docker - 30秒生出100台伺服器
 
Docker實務
Docker實務Docker實務
Docker實務
 
Continuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CIContinuous Delivery Workshop with Ansible x GitLab CI
Continuous Delivery Workshop with Ansible x GitLab CI
 
Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊Rancher: 建立你的牧場艦隊
Rancher: 建立你的牧場艦隊
 

Semelhante a 認識那條鯨魚 Docker 初探

Clojure cnclojure-meetup
Clojure cnclojure-meetupClojure cnclojure-meetup
Clojure cnclojure-meetup
sunng87
 

Semelhante a 認識那條鯨魚 Docker 初探 (20)

Linking error
Linking errorLinking error
Linking error
 
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
DevOpsDays Taipei 2018 - Puppet 古早味、新感受:改造老牌企業進入自動化時代
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養企業導入容器經驗分享與開源技能培養
企業導入容器經驗分享與開源技能培養
 
Docker容器微服務 x WorkShop
Docker容器微服務 x WorkShopDocker容器微服務 x WorkShop
Docker容器微服務 x WorkShop
 
20170905 dev ops in hiiir
20170905 dev ops in hiiir20170905 dev ops in hiiir
20170905 dev ops in hiiir
 
Docker In-Depth
Docker In-DepthDocker In-Depth
Docker In-Depth
 
LineBot.pptx
LineBot.pptxLineBot.pptx
LineBot.pptx
 
使用 Docker 建置 END OF LIFE 的 Ruby 開發環境
使用 Docker 建置 END OF LIFE 的 Ruby 開發環境使用 Docker 建置 END OF LIFE 的 Ruby 開發環境
使用 Docker 建置 END OF LIFE 的 Ruby 開發環境
 
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
COSCUP 2016 Workshop: 用 Docker 架設班級 git-it 練習環境
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討
 
Weic2015 docker
Weic2015 dockerWeic2015 docker
Weic2015 docker
 
Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器Azure Container Service 使用 DC / OS 管理 docker 容器
Azure Container Service 使用 DC / OS 管理 docker 容器
 
FHIR Server 安裝與使用
FHIR Server 安裝與使用FHIR Server 安裝與使用
FHIR Server 安裝與使用
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽開發人員不可不知的 Windows Container 容器技術預覽
開發人員不可不知的 Windows Container 容器技術預覽
 
Docker
DockerDocker
Docker
 
Clojure cnclojure-meetup
Clojure cnclojure-meetupClojure cnclojure-meetup
Clojure cnclojure-meetup
 
OpenLab.Taipei #2 PORTA2030
OpenLab.Taipei #2 PORTA2030OpenLab.Taipei #2 PORTA2030
OpenLab.Taipei #2 PORTA2030
 
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 Continuous Delivery Workshop with Ansible x GitLab CI (5th) Continuous Delivery Workshop with Ansible x GitLab CI (5th)
Continuous Delivery Workshop with Ansible x GitLab CI (5th)
 

認識那條鯨魚 Docker 初探

  • 1. 認識那條鯨魚 - Docker 初探 by 王仲昀 cloud@seabunny.tech
  • 2. 王仲昀 / Cloud Github ID: fatcloud 用途不明的技能練得很多,從電 子電路到機械甚至光學都摸過一 陣子,都能自幹一些東西。 練的最深的技能仍然是寫程式
  • 3.
  • 4. I come, I see, I conquer.  - Emperor Seabunny
  • 5. 拍.電.視.時間 (Python Computer Vision time) 臉書描述: 一個企圖把對 Python + OpenCV 有興趣的人類聚集起來,讓大家一起挖坑跳坑、 Demo 斷頭 project,分享一些用途不明的新奇技術,以及堆積整體開發實力的社團 目前狀態: ● 有人挖坑 + 跳坑 [||..............] ● Demo 斷頭 project [||..............] ● 分享一些用途不明的新奇技術 [||||||||........] ● 堆積整體開發實力 [||||............] 一個每一到三星期就會舉辦分享活動,討論較深較有趣的軟體技術的社團。
  • 6. 成就回顧 ● 挖坑 / 跳坑 + Demo 斷頭 project 記錄 ○ 雷射筆畫螢幕 => 自挖自跳自 Demo ■ 製做完整的火焰效果 ■ 做成 chrome 的 plug-in 讓它能在簡報時直接使用 (?) ● 分享 / 試玩新技術 ○ 動作顯微鏡 ○ 類神經致敬神器 ○ 天社福肉 (TensorFlow) 土魠魚油 (tutorial) ● 堆積整體開發實力 ○ TechTree!
  • 8.
  • 9. 警告 以下按鈕請不要現場點擊,要也在回到家中夜深人靜的時候再嘗試 因為這個功能是呼叫 Github 的 API 實現,一分鐘限呼叫六次 現在人數太多,大家一起去按只會下載到空的 .zip 檔 想要嘗試可以直接下載 PyCV-time 的 Github 不要走 TechTree
  • 10. 歡迎加入 ● TechTree 的研發團 ○ 軍師 ○ 武將 ○ 工兵 ● 揪團打怪 ● 有趣的講題分享 [預告] 下星期將會以 Shadertoy 為出發點帶大家認識 OpenGL / WebGL 這類的語 言,學著自己寫 Shader 跑圖出來!!
  • 11. 繼續之前,回想一下 TechTree 這東西 ● 這概念聽起來不是只限於 Python + OpenCV 可用 ● 環境的安裝將是主要的進入障礙 ● 剛才執行的指令是不是有點長看起來怪怪的?
  • 12. 回顧剛才執行 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
  • 13.
  • 14. 今日的主菜 ● 介紹自己、介紹拍電視時間、介紹 TechTree ● 執行比較簡單的程式 ○ 基本動作教學 ● 比較麻煩的程式: ○ 用到 GUI 的程式 ○ 用到 webcam 的程式 ○ 用到 GPU 的程式
  • 15. Docker 基本動作教學 參考資料:《Docker —— 從入門到實踐-》正體中文版
  • 16. 基本概念 ● Docker 讓你在同一台電腦上的平行世界執行程式 ● 關於平行世界的詞彙有兩個 ○ container ○ image ● 一個 container 就是一個平行世界的分支 ● 一個 image 則是一種 container 的樣板 ● 用法大致就是 ○ <要執行的指令> 改成 docker <一堆參數設定> <平行世界名稱> <要執行的指令> ○ 以 firefox http://ppt.cc/7KJuO 為例
  • 17. 創造平行世界分支(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.
  • 18. 從樣板出發創造平行世界分支 (container) ● 執行 docker images ⇒ 顯示有名為 ubuntu 的 image ● 執行 docker run ubuntu bash 就會在 ubuntu 的環境執行 bash ● 沒有反應?因為它發生在平行世界裡我們看不到阿~~ ● 執行 docker run -it ubuntu bash 才會把異世界的訊息接到當前的 terminal 上 ● 再開一個 terminal 執行 docker ps 就可以看到現正運行的 container
  • 19. 進到異世界胡搞瞎搞 (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 <被自動取的名子> 反應會跟第一次執行一樣
  • 20. 把現實世界的檔案掛載到 container 裡 ● 在執行 docker run 的時候使用 -v <本機資料夾>:<掛載路徑> ● docker run -it -v ~/Desktop/:/hahaha ubuntu bash ● 這樣養在異世界裡的程式就可以對這資料夾裡的檔案為所欲為啦! ● 已經忘記是在哪看到,見過一個資訊說掛載要掛資料夾,不要掛單一檔案
  • 21. 儲存異世界的狀態 ● 把剛才執行好要儲存為樣板的 container 找出來 docker ps -a ● docker commit <要存的 container 名稱> -m “說明訊息” <樣板命名> ● 有 docker hub 帳號的話可以 docker pull 放到網路上
  • 23. 執行 GUI 環境 ● 我的做法來自這篇教學以及下方的留言 ● X11 是一支在原生作業系統上執行的程式,負責執行視窗 ● 所有的程式想要開出視窗來都要拜託 X11 ● X11 表示:欸你誰阿? ● 你執行的程式表示:我 root 啦我超大 ● X11:root 是誰阿沒聽過,掰(掛電話)
  • 24. 執行 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
  • 25. 其實要顧的事項還不只於此 ● 執行前要把環境變數給好 ○ -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
  • 26. 執行要使用 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
  • 27. 執行使用 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 設定
  • 28. 小抄 能上 shadertoy 的 container docker run -it -e DISPLAY -v $HOME/.Xauthority:/home/developer/.Xauthority -- net=host --privileged fatcloud/ar-sandbox firefox 只要每次都把這些參數加上去 我們就可以做出一個毫無安全性可言的 docker container 啦!