容器就是進程,我們從這樣的觀點分析下去,這與虛擬機的虛擬化技術形成了鮮明的對比,虛擬機模擬整個作業系統及硬體來實現隔離,而容器技術通過對進程的控制來實現隔離。這樣架構的差異,導致兩者在實務中遇到問題和應用場景有所不同,而這系列文章也會提到這些問題。
容器技術為每個程式提供獨立的檔案系統、網路和進程空間,這提高了程式運行環境的隔離性,允許多個程式在同一個主機上運行而不會互相干擾。並動態的資源分配,有效利用資源。但是在使用上也面臨架構造成的問題。
首先是運行環境的一致性問題,程式的交付流程中,雖然程式都是用容器技術運行,但是難以確保容器運行環境一致,比如說開發測試與生產的容器運行環境。
其次是可移植性問題,開發者電腦是大多是 Windows/Mac,當時的這兩類作業系統都不支援容器技術,但是生產環境卻是 Linux,雖然當時有 Vagrant 之類的技術統一管理本地開發環境,但是依然需要處理正式環境跟開發環境一致性的問題,因為正式環境通常不是 Vagrant,這樣的開發環境管理方案難以大規模採用。
這兩個問題提高了容器技術的複雜性,在開發的過程中,你得時時受到容器技術的限制,思考程式運行需要什麼相依程式庫,並確保開發、測試及生產環境都有相關的相依,部屬程式碼變動的同時,你也需要部屬相依程式庫的變動,這些增加了使用容器技術的難度。
就在這樣的背景下,Docker 橫空出世,為容器技術的使用帶來了革命性的解決方案。Docker 通過將應用程式與其所有相依項打包成一個統一的容器鏡像,確保了開發、測試和生產環境的一致性。同時,它也讓容器變得更加便攜,無論是在 Windows、Mac 還是 Linux 平台上,都能輕鬆運行,這徹底改變了軟體交付的方式。因此,接下來的文章將深入探討 Docker。