iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
Modern Web

Go 快 Go 高效: 從基礎語法到現代Web應用開發系列 第 29

【Day29】將服務推上 Docker Hub I | Docker 介紹

  • 分享至 

  • xImage
  •  

前言

借鑑了去年的鐵人賽,最後我是以分享把專案推上 Github 來做開源貢獻整個社群做收尾,那今年我們就換相似的方式來實踐,那剛好很榮幸我們能透過把我們的服務推上 Docker Hub 來共享我們的資源給別人,我想這兩著之間應該算有異曲同工之妙吧~


Docker 介紹(📎下載連結

https://ithelp.ithome.com.tw/upload/images/20241006/20161850ru1ZdPEPPn.png

Docker 是一個開源的平台,旨在自動化應用程式的部署、擴展和管理。它利用容器化技術,將應用程式及其所有依賴項打包在輕量級、可攜帶的容器中,確保應用程式能在任何環境中一致地運行。無論是在開發、測試還是生產環境,Docker 都提供了高效且可靠的解決方案。


為什麼選擇 Docker?

1. 一致的運行環境

傳統上,不同開發、測試和生產環境之間的差異常常導致「在我機器上可以運行」的問題。Docker 通過容器化技術確保應用程式在任何地方運行時的環境一致性,消除了這類問題。

2. 資源高效利用

與虛擬機相比,Docker 容器更加輕量級,啟動速度更快,並且能更高效地利用系統資源。這使得在同一硬體上可以運行更多的應用程式實例。

3. 簡化部署和擴展

Docker 提供了簡單的命令和工具,使得應用程式的部署和擴展變得快捷方便。配合 Docker Compose 和 Kubernetes 等工具,管理多容器應用程式和大規模部署變得更加簡單。


Docker 與虛擬機器(VM)的比較

https://ithelp.ithome.com.tw/upload/images/20241006/20161850Ypef5XB4P7.png

(圖片來源:https://www.docker.com/resources/what-container/)

比較項目 Docker 虛擬機器(VM)
架構 基於容器技術,容器共享宿主機的操作系統內核(Kernel)。 基於硬體虛擬化技術,每個虛擬機器都有一個完整的操作系統。
隔離性 使用 Linux 的 Namespace 和 Cgroups 技術來提供資源和進程的隔離。 通過完整的操作系統提供強隔離性,虛擬機器之間幾乎沒有資源共享。
資源消耗 容器不需要安裝操作系統,因此資源占用小。 每個虛擬機器都有獨立的操作系統,資源消耗大。
啟動時間 幾秒鐘內即可啟動容器。 啟動完整的操作系統通常需要幾分鐘。
性能 因為容器共用宿主機的內核,所以性能幾乎與宿主機一致。 由於硬體虛擬化會有一定的性能損耗。
文件系統 使用分層文件系統(Layered Filesystem),可以基於現有的層來構建新的應用,節省空間和加快部署速度。 每個虛擬機器都有完整的文件系統,沒有文件層的優勢。
網路管理 使用橋接網路(Bridge Network),容器之間可以通過虛擬網橋通信,也可以通過自定義網路策略來管理網路隔離。 通常通過虛擬交換機或實體網卡與宿主機及其他虛擬機器進行通信。
應用場景 適合微服務架構、快速部署、CI/CD、自動化測試等。 適合需要完整操作系統支持的大型單體應用、需要強隔離性的應用。
擴展性 支持 Docker Swarm 和 Kubernetes 來進行集群管理和自動化擴展。 通過虛擬機器管理軟體(如 VMware、Hyper-V 等)實現擴展,但擴展速度和靈活性不如容器。
資源管理 使用 Cgroups 來管理容器資源,能有效限制 CPU、記憶體、磁碟 I/O 等的使用。 虛擬機器依賴 Hypervisor 進行資源分配,通常需要更高的資源配置來運行。
安全性 容器之間共用宿主機內核,隔離性不如虛擬機器,但可以通過最佳實踐和第三方工具加強安全性。 虛擬機器有更強的安全隔離,因為它們擁有各自獨立的操作系統和內核。

Docker 的核心組件

https://ithelp.ithome.com.tw/upload/images/20241006/201618503uaTSevD4Q.png

1. Docker Engine

Docker Engine 是 Docker 平台的核心,負責創建和運行容器。它由以下幾部分組成:

  • Docker Daemon (dockerd):管理容器生命週期,像是 Docker 容器、映像檔、網路和存儲。
  • Docker CLI:命令行介面,允許用戶與 Docker Daemon 交互,執行各種操作,如構建、運行和管理容器。
  • REST API:提供程序化接口,允許其他應用程式與 Docker 交互。

2. Docker 映像檔(Images)

映像檔是 Docker 容器的靜態模板,包含應用程式及其所有依賴項。映像檔是不可變的,並且可以層疊構建,這使得映像檔管理和版本控制變得簡單高效。

3. Docker 容器(Containers)

容器是映像檔的運行實例,包含應用程式及其運行所需的環境。容器是輕量級的、可移植的,並且可以在不同的環境中快速啟動和停止。

4. Dockerfile

Dockerfile 是一個文本文件,包含了構建 Docker 映像檔的指令。通過編寫 Dockerfile,用戶可以自動化地定義應用程式的環境和配置,從而生成自定義的映像檔。
使用Dockerfile把服務包起來的方式,使的服務變得獨力、可控、且多擴展性為主要目的。

5. Docker Hub

Docker Hub 是一個雲端的 Docker 映像檔註冊中心(Registry),用戶可以在其中存儲和分享映像檔。它提供了大量的官方和社群映像檔,方便用戶快速找到所需的基礎映像檔。


Docker 的主要特性

  • 便攜性:容器內的應用程式可以在任何支援 Docker 的平台上運行,無需修改。
  • 快速部署:容器啟動速度極快,通常在幾秒鐘內即可啟動。
  • 可擴展性:Docker 容器可以輕鬆地擴展和縮減,適應不同的工作負載需求。
  • 版本控制:Docker 映像檔支持版本控制,方便回滾和更新應用程式。
  • 安全性:通過命名空間和控制組等技術,Docker 提供了基本的隔離和安全性。

Docker 的應用場景

1. 微服務架構

Docker 非常適合用於微服務架構,每個微服務可以運行在獨立的容器中,實現高內聚、低耦合的設計。

2. 持續集成與持續部署(CI/CD)

Docker 的一致性和自動化特性,使其成為 CI/CD 流程中的理想選擇,確保代碼從開發到生產環境的一致性和可靠性。

3. 多雲和混合雲部署

Docker 容器的可攜性使其能夠輕鬆部署在不同的雲平台或混合雲環境中,提升靈活性和擴展性。

4. 測試和開發環境

開發者可以使用 Docker 快速搭建測試和開發環境,避免環境配置問題,提高開發效率。


延伸閱讀


上一篇
【Day28】隱私守護專家 II | 環境變數建立 × Inficia
下一篇
【Day30】將服務推上 Docker Hub II | 打包 Docker image + 學習歷程感想
系列文
Go 快 Go 高效: 從基礎語法到現代Web應用開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言