# Docker_08/13(二) [Docker 介紹影片](https://youtu.be/b0HMimUb4f0?si=62b7esby0ScTehaQ) [Docker 文章介紹](https://hackmd.io/@yillkid/SylE30wD5/https%3A%2F%2Fhackmd.io%2F%40yillkid%2FHySZrRH6U) *** ### 用自己的話總結看到的內容: Docker 是一個快速 建立、測試和佈署的軟體應用程式 主要透過用映像(image)檔案 讓容器讀取轉換啟動 還有像 GitHub repository(倉庫)存取和拉回使用資料 Docker的容器和映像檔的運作 -映像檔(image)檔 是透過Dockerfile.text內容轉換為映像檔 它裡面有函式庫,可以獨立執行的輕量化套件 -Docker容器(container) 用來運作映像檔 一個映像檔可以同時運作不同容器 -GitHub repository(倉庫) 跟GitHub類似 可以從 Dockerhub 找取需要套件 或 自行編寫打包成需要套件 他跟虛擬環境的不同是 Docker 不用像虛擬環境``安裝作業系統`` 直接從 Dockerhub 拉取需要的作業系統映像檔 Docker 不用像虛擬環境``啟動虛擬環境開機(VirtualBox)`` 啟動速度上比較快,檔案容量大致是MB,但(VirtualBox)是GB單位 Docker 不用像虛擬環境``把系統的硬體資源隔離`` 它的底層還是使用本機作業系統的 Kernel 處理 Docker 不用像虛擬環境``佔用硬碟的容量較大`` 想要更了解細節可以閱讀上方文章操作或觀看老師分享的影片 *** ### 中文解說影片概要 (使用reccap生成影片重點概要) Docker Tutorial for Beginners(50:38)影片總長 Summary 一個全面的 Docker 教程,涵蓋安裝、容器與映像檔、連接埠對應、環境變數、持久性、建立自訂映像檔、多階段建置、Docker Compose、部署到 Docker Hub 以及部署技巧。由 Docker 贊助,適合學生和專業人士。 *** ### Takeaways(外帶) Docker 教程涵蓋安裝、容器與映像檔、連接埠對應、環境變數、持久性、建立自訂映像檔、多階段建置、Docker Compose、部署到 Docker Hub 以及部署技巧。 Docker 解決了代碼傳輸、依賴衝突、系統升級和應用程式相容性等問題。 Docker 容器是具有自己的檔案系統的隔離進程群組。 Docker 映像檔是指定內容、應用程式和預設命令的容器範本。 在 Windows、Mac 和 Linux 上使用 Docker Desktop 或 Docker Engine 安裝 Docker。 Docker 容器和映像檔的差異。 在 Docker 容器中使用環境變數和引數。 在 Docker 中使用卷、綁定掛載和不同類型的掛載實現持久性。 使用 Dockerfile 和多階段構建來建立自訂的 Docker 映像檔。 使用 Docker Compose 編排多個容器並部署到 Docker Hub。 部署技巧和在 Docker Hub 等映像檔登錄庫上分享 Docker 映像檔的注意事項。 *** ### 主要標題(mainTopic) Docker 基礎入門 Docker 透過部署和執行容器化應用程式來解決依賴關係衝突的問題。 [02:41] 容器是與主機系統分離的所有必要依賴項的隔離進程組。 [03:14] Docker 容器相比虛擬機提供更好的效能和效率。 [04:03] Docker 容器和映像檔 影像是容器的藍圖,而容器則是正在運行應用程式的影像實例。 [07:23] Docker 容器可以被管理、啟動、停止和刪除。 [08:26] 安裝 Docker 在 Windows、Mac 或 Linux 上安裝 Docker Desktop 以存取 Docker 的命令列和圖形使用者介面。 [04:26] 按照您系統的官方安裝說明進行操作,並確保系統兼容性。 [05:08] 建立 Docker 映像檔 使用 Docker build 命令基於現有的 Docker 映像建立自訂的 Docker 映像。 [22:54] 透過使用多階段構建來優化 Docker 映像檔,以減小映像檔大小並提高安全性。 [34:32] 使用 Docker Compose Docker Compose 透過在 docker-compose.yml 檔案中定義服務,簡化了多個容器的編排。 [37:21] Compose 允許服務之間相互通信,並管理容器通信的網絡。 [39:43] 優化 Docker 映像檔 考慮使用精簡或 Alpine 映像檔進行生產,以減少映像檔大小和資源消耗。 [14:30] 了解 slim、Alpine 和 Debian 映像在特定用例中的差異。 [15:50] 在雲端部署容器 探索雲端服務提供商以部署容器,考慮便利性和成本因素。 [49:45] 根據特定需求和要求,研究部署 Docker 容器的各種雲端選項。 [50:15] *** ### Full Timeline 00:00 ### 簡介 Docker 簡介及其優點 在 Windows、Mac 和 Linux 上的安裝和設定 容器、映像檔和 Docker Compose 用於建構和部署應用程式 *** 01:24 ### 什麼是 Docker 以及為什麼? Docker 解決了衝突依賴和系統升級可能破壞應用程式的問題。 Docker 使用容器來隔離應用程式及其相依性,確保在各種環境中都能一致地部署。 容器提供了一種打包和分發應用程式及其所有必需組件的方式,消除了相容性問題。 *** 03:21 ### Docker 容器 vs 虛擬機器 Docker 比虛擬機提供更好的效能和效率。 Docker 映像檔比虛擬機器映像檔更輕量化,啟動速度也更快。 Docker 利用主機現有的內核、硬體和網路,減少開銷。 *** 04:17 ### 安裝 Docker、Docker Desktop 在 Windows、Mac 或 Linux 上安裝 Docker Desktop。 安裝 Docker Engine 以供命令列使用。 在 Ubuntu 20.04 上設置 Docker 套件庫並安裝 Docker。 *** 06:21 ### Docker 你好世界 執行 Hello World 容器 已拉取最新的 Hello World 映像 Docker 預設以 root 權限運行 *** 07:17 ### Docker 容器 vs 映像檔 Docker 容器和映像之間的差異 映像檔是容器的模板,指定內容和預設命令 容器是根據映像指令實際運行的進程 *** 08:35 ### Docker 容器的埠口對應 使用 Docker 運行 Nginx 網頁伺服器。 將容器的連接埠發佈到主機的連接埠,以存取網頁伺服器。 根據需要將容器的埠重新映射到不同的主機埠。 *** 10:00 ### 在背景中執行 Docker 容器 使用 -d(分離)標誌在背景中運行容器。 參考容器的 ID 或名稱,可以指定或隨機生成。 使用 Docker 命令如 logs、stop 和 prune 來管理容器。 *** 11:29 ### Docker 標籤和摘要 使用標籤或摘要指定 Docker 映像版本以確保穩定性。 使用像「nginx:1.27.0」這樣的特定標籤比使用最新標籤更好。 透過雜湊值固定圖像是確保不會引入任何變更的最可靠方式。 *** 13:33 ### 使用環境變數和參數運行 環境變數和參數可以在運行時傳遞給容器。 在此示例中使用的 Python 容器大小超過 1 GB。 演講者建議討論較小的容器映像,如 Slim 和 Alpine。 *** 14:28 ### 纖細映像和阿爾卑斯映像 Docker 映像檔有不同大小,Slim 和 Alpine 版本比預設的基於 Debian 的映像檔小得多。 Alpine Linux 是比 Slim 更輕量的選擇,但它的套件管理器和相依性與基於 Debian 的映像檔不同。 在 Slim 和 Alpine 映像之間進行選擇取決於具體要求以及映像大小和兼容性之間的權衡。 *** 16:04 ### 調試正在運行的 Docker 容器 使用 Docker GUI 或 Docker Exec 命令調試容器 Docker Exec 允許進行互動式和 TTY 會話以進行調試 為了除錯目的,存取容器內的 root shell *** 17:16 ### 使用 Docker 卷和綁定掛載的持久性 Docker 容器以全新的文件系統啟動,之前運行時寫入的任何文件都會消失。 持久性儲存可以使用掛載來實現,包括綁定掛載或卷宗。 掛載綁定對於開發很有用,而卷宗更適合生產環境,因為它們具有額外的功能。 *** 22:25 ### 自訂 Docker 映像檔、Dockerfiles、前端 NGINX 自訂 Docker 映像檔超越環境變數、引數和檔案/目錄掛載。 基於 Nginx 映像檔建立自訂的 Docker 映像檔,並包含一個靜態資料夾,其中包含一個簡單的待辦事項網頁應用程式。 有效地建構 Docker 映像檔,利用 Docker 建構過程的基本原則。 *** 26:06 ### Docker 層 Docker 層就像是影像差異,其中 Dockerfile 中的每個指令都會根據前一個指令創建一個新的層。 Docker 會快取層以加快建置速度,但某些指令可能會使快取失效。 敏感資訊不應包含在 Docker 映像檔中,因為它仍可透過圖層歷史記錄存取。 *** 29:01 ### 自訂 Docker 映像檔, 後端 Python FastAPI 使用 FastAPI 創建了一個簡單的 Python 後端以存儲待辦事項清單。 實現了建立、列出和刪除待辦事項的端點。 透過建立 Dockerfile 將後端應用程式 Dockerize。 *** 33:40 ### Docker 多階段建構 在 Docker 中使用多階段構建可以透過將建構依賴與執行時依賴分離,來提升安全性並減少映像檔大小。 建置階段會建立可安裝的套件(輪子),可以複製到執行階段,只需要安裝這些預先建置的套件。 將命令分組在單一 RUN 語句中可以減少層數並可能優化構建過程。 *** 36:39 ### Docker 編排 Docker Compose 是一個用於協調多個 Docker 容器的工具。 它允許您在單個 YAML 檔案中定義和管理應用程式服務的配置。 Docker Compose 簡化了同時建立、啟動和停止多個容器的過程。 *** 39:53 ### 更多撰寫,添加 MongoDB 資料庫 將 MongoDB 資料庫服務新增至 Docker Compose 檔案。 使用卷持續資料庫資料。 設定後端使用環境變數連接到 MongoDB 資料庫。 *** 45:09 ### 更多組合,添加 Mongo Express 以探索資料庫 建議使用 Express 在開發期間探索資料庫。 討論管理容器啟動順序和依賴關係的重要性。 建議編寫可以無論啟動順序而運作的程式碼,使用超時、重試或 ping 依賴項。 *** 46:58 ### 如何將 Docker 映像檔發佈到 Docker Hub 將 Docker 映像檔發佈到 DockerHub 等登錄中心。 標記具有特定版本的圖像以保持一致性。 設置密碼管理器並在推送映像之前登錄到註冊表。 *** 49:34 ### 在雲端部署 Docker 容器 Docker 可用於本地開發或運行特定工具。 部署 Docker 容器通常需要使用付費的雲端服務提供商。 有許多雲端服務選項可用於容器部署,需要進一步研究。 *** 50:23 ### 謝謝 Docker 贊助 對贊助人和捐助者的感謝 鼓勵您喜歡、訂閱和留言