# 不賴陪你玩 Docker docker 自架服務不求人 - 發問與投票連結:sli.do #docker https://hackmd.io/@fly/docker101 --- ## 嘿!兩兩分組認識一下如何? (15 mins) - 分組功能測試 https://support.zoom.us/hc/zh-tw/articles/206476093-Enabling-breakout-rooms - 認識一位朋友 - 什麼興趣? - 為什麼想了解 Docker? - 其他新鮮事? - 介紹這位你認識的朋友 - 邀請大家分享 Docker 經驗與需求 --- ## 出場人物 - 所有的與會成員 - 伴1:[Fly(不賴)](https://fb.me/flyism) - 伴2/3:饅頭/石頭 --- ## 伴學目標 - 讓任何人都可以在自己電腦執行想要的數位服務 - 你就是那個任何人,可以想想要玩什麼服務 - 交流理解的 Docker 原理 - 整合進入自己的長期專案? --- ## 不賴的 Docker 經驗 - 利用中研院虛擬主機上跑它來執行機器學習作台語語音辨識實驗 - 機中機中機中機……的概念 --- ## Why Docker - 快、乾淨、簡單 https://ithelp.ithome.com.tw/articles/10190614 --- ### 一些好處 * 持續整合的:Docker 讓環境統一變得更容易,這有助於設計持續整合、持續部署的架構。 * 大禮包:只要雲端服務或機器支援 Docker,就能運行 Docker 包裝好的服務。 * 好版控:Docker 使用 Dockerfile 的純文字檔做為建置 image 的來源,這代表 Docker 實現了環境即程式碼(Infrastructure-as-code,IaC),環境資訊可以被版控系統記錄。 * 輕:同為虛擬化技術,Docker(或指 container)的資源使用率較 VM 好,它直接跟底層共用作業系統,不需中間再隔一層作業系統虛擬層,因此啟動 container 非常快。 * 熱門:Docker 應用場景橫跨開發與維運,也是 DevOps 熱門技能之一。 https://ithelp.ithome.com.tw/articles/10237506 --- ## 嘿!安裝 Docker 來相陪 (30 mins) - 來以作業系統分組互助吧 - 主持人遊走各系統群交流經驗 --- 安裝 Docker https://docs.docker.com/desktop/ https://ithelp.ithome.com.tw/articles/10238198 https://ithelp.ithome.com.tw/articles/10201630 ~~虛擬機安裝 https://ithelp.ithome.com.tw/articles/10193928~~ ### MAC 裝完即用 ``` brew cask install docker ``` ### WINDOWS 可能會碰到的坑 - 要裝服務 Hyper-v ~~- 可使用虛擬機安裝(過時) 有時候因為某些理由,可能會不想或無法(如 Windows 7)在原生系統上安裝 Docker,這時可以考慮使用虛擬機安裝。 https://ithelp.ithome.com.tw/articles/10238198~~ ### LINUX (todo) 注意:必須要是 64-bit 版本才能運行 Docker。 ``` sudo curl -fsSL https://get.docker.com/ | sh sudo usermod -aG docker your-user ``` --- ## 嘿!三三兩兩來研究想一鍵啟動服務吧 一行指令快速啟動你要的服務 - 以下搜集實用的 self-host services 可以找一個來試試,到 Sli.do 投下你想架的服務吧 - 找到想要的服務 - 閱讀文件 - 執行!就這麼容易(嗎?) https://github.com/relink2013/Awesome-Self-hosting-for-the-whole-family --- ## 一些 Image 範例 - Blynk server 控制版服務 - livego server 網路串流 - jitsi 視訊 - hackmd 社群版 - https://hackmd.io/c/codimd-documentation/%2Fs%2Fcodimd-docker-deployment - opencart - https://hub.docker.com/r/bitnami/opencart/ - https://blog.maki0419.com/2020/08/docker-opencart.html - wordpress - https://github.com/bitnami/bitnami-docker-wordpress - Rails web server 網站 - https://github.com/bitnami/bitnami-docker-rails - https://github.com/ledermann/docker-rails --- ## 技術原理(如果有興趣了解再看下去) ### 嘿!Docker - 邀請大家分享對 Docker 技術面認知 --- Docker 包括三個基本概念 : 映像檔(Image)唯讀映像檔,可堆疊的貨櫃 容器(Container) image 執行起來的 process,船運行程 倉庫(Repository)存放處,港口倉庫 --- 另一個與 repository 很像,但容易混用的名詞為 Registry,後者涵蓋範圍更廣,包含了更多 repository 與身分驗證功能等,通常比較常討論的也是 registry。 目前 Docker 預設的 registry 為 DockerHub,大多數程式或服務的 image 都能在上面找得到。 https://hub.docker.com ,港口 --- Image、container、repository 之間的關係就像光碟一樣:早期世紀帝國等光碟遊戲,會需要搭配其他可讀寫空間(如硬碟),才有辦法執行。 Image 像光碟片一樣,唯讀且不能獨立執行 Container 像硬碟一樣,可讀可寫可執行 Repository 則是光碟盒,而 Registry 則是像光碟零售商 https://ithelp.ithome.com.tw/articles/10238216 --- ![](https://i.imgur.com/2H4XMVp.png) https://ithelp.ithome.com.tw/articles/10238216 --- ## 玩映像檔 Image ``` 拉 image docker pull hello-world 求救 docker help ``` --- ``` docker run 用來執行 container docker logs 用來查看 container 的 log 訊息 docker ps 用來顯示有哪些container 在執行,如果下-a參數把沒有執行的列出來 docker rm 刪除 container docker rmi 刪除 Docker Image # 使用 CONTAINER ID: 6d7e00198a56 或 NAMES: relaxed_bhabha 皆可 docker rm 6d7e00198a56 ``` --- ## 玩容器 Container ``` docker run -it ubuntu /bin/bash apt-get update apt-get install -y apache2 service apache2 start ``` https://ithelp.ithome.com.tw/articles/10190921 -i|--interactive 和 -t|--tty --- ## docker exec VS docker run docker run 與 docker exec 做的事很相似,決定性差異在於:docker run 會產生新的 container,而 docker exec 需要運行中的 container。 --- ## 玩 registry `docker run -d -p 5000:5000 -v /home/user1/storage:/var/lib/registry --name registry registry:2` --- ## Image 匯出與讀取 ``` 從一台電腦存image docker save -o hello-world.tar hello-world 到另台電腦可以 docker load -i hello-world ``` --- ## Docker Volume 處理資料 ![](https://i.imgur.com/snJbolN.png) 在預設的Docker daemon下,我們常會遇到幾種情況: * 當該容器不再存在時,數據將不會持久保存,並且如果另一個Process需要它,則可能很難從容器中取出數據。 * 容器的可寫層與運行容器的主機緊密耦合。您不能輕易地將數據移動到其他地方。 * 寫入容器的可寫層需要 存儲驅動程序來管理文件系統。存儲驅動程序使用Linux內核提供聯合文件系統。與使用直接寫入主機文件系統的數據卷相比,這種額外的抽象降低了性能 。 --- 在使用 docker run 指令時,指定 -v 參數,使得實體主機的資料夾路徑 Mapping 到 Container 的資料夾路徑,指令如下 ``` docker run -it -v /home/user1/storage:/storage centos /bin/bash ``` /home/user1/storage 是實體主機的資料夾路徑 Mapping 到 Container 裡面的 /storage 資料夾路徑。 https://ithelp.ithome.com.tw/articles/10192397 https://ithelp.ithome.com.tw/articles/10241922 --- ## network Container是個封閉的空間,但難免有些功能開發是需要與其他Containers甚至是外界串接的,因此Docker network因應不同需求發展出了多種類別的network https://ithelp.ithome.com.tw/articles/10242460 --- ## docker-compose 處理多個 Container ![](https://ithelp.ithome.com.tw/upload/images/20200916/20129737SAKXpErjiV.png) --- 想要彈性地處理更多子服務,可以了解 Docker-compose 參見 https://g0v.hackmd.io/65RtkztoTDuDVreqtFHxtQ#%E4%B8%BB%E8%A6%81%E7%B5%90%E6%A7%8B%E8%AA%AA%E6%98%8E https://ithelp.ithome.com.tw/articles/10194183 https://ithelp.ithome.com.tw/articles/10243618 --- ## 查看 Docker Container 的資源使用狀態 ``` docker stats nginx1 nginx2 限制 ram 的使用 docker run --memory 512MB --name nginx3 -d nginx 限制 CPU 的使用 docker run --cpu-period=1000000 --cpu-quota=500000 --name cputest2 -it centos /bin/bash ``` --- ```-c / —cpus``` 原本預設值為1024, 一半即為512,是相對值,佔用主機一半cpu資源 https://ithelp.ithome.com.tw/articles/10243101 --- ## Container 應用 https://ithelp.ithome.com.tw/articles/10242637 --- ## Docker build / Dockerfile to Image https://ithelp.ithome.com.tw/articles/10244280 using cache https://ithelp.ithome.com.tw/articles/10246065 https://ithelp.ithome.com.tw/articles/10240510 --- --- ## 可能的坑 - 執行權限 https://ithelp.ithome.com.tw/articles/10190824 - 如果不要停止 container 而要退出 docker container 的terminal 需要輸入ctrl + p之後再輸入 ctrl + q 的按鍵,就不會把 container 關閉。 --- ## 非伺服器也能對外開放服務,反向代理 反向代理讓你的桌機自架服務可以快速對外開放 - 徵求對反向代理有經驗的朋友分享 --- ### Ngrok - https://ngrok.com/ --- ### More... - https://github.com/anderspitman/awesome-tunneling --- ### localtunnel https://github.com/localtunnel/localtunnel --- ## One more thing - 編輯器外掛 Vscode + docker --- ## 參考 https://g0v.hackmd.io/@MRLyM3ynSfmNj1QrR_csrQ/SJx85m828 https://hackmd.io/v1jFG5KhTnKX5gGKjtf8lg https://www.osboxes.org/virtualbox-images/ 為各種框架 build image https://ithelp.ithome.com.tw/articles/10247679 --- # 好吧,你說你只是想要簡單架服務? 連 Docker 都不用學,直接在 VPS 上快速啟用想要的服務(我是不是太晚講? XD) https://www.youtube.com/watch?v=D1soV_Ff7uk
{}
    551 views