給 PHP 開發者的 Docker 文件(三)

更新 發佈閱讀 6 分鐘
vocus|新世代的創作平台

(本文譯自〈Docker for PHP Developers〉)

Docker 和 Vagarant 有什麼不同?

如果在每個專案同時運行多個容器(container)的情況下 Docker 比 Vagrant 好在哪裡?會比用 Vagrant 同時跑多部虛擬機的方式差嗎?No,原因如下述。

Docker 映像是可擴展的(Extendable)

Docker 映像可擴展它的父映像(parent image),這點讓 Docker 映像更加類似於 PHP 類別(class)。例如一個 Nginx Docker 映像可擴展自 phusion/baseimage Docker 映像,並且 phusion/baseimage 也擴展自最父層(top-most)的 ubuntu Docker 映像。每一個子映像只會包含與父映像有差異的部份,也就是說 ubuntu 映像只是一個小型的Ubuntu 作業系統;而 phusion/baseimage 裡面只有一些用於強化 Docker 容器(container)與作業的工具;最後的 Nginx 映像裡面也只有 Nginx 網頁伺服器和它的組態檔案。

互不相關的 Docker 映像也有可能擴展自同一個父輩(ancestor)映像,Docker 也鼓勵這麼做,如此一來那些被重複運用的映像只要下載一次就好。舉例來說,如果一個 Nginx 和另一個 PHP-FPM 映像都擴展自同樣的 ubuntu:14.04 Docker 映像,那麼這個共同的 Ubuntu 映像只要下載一次就好了。

Docker 容器是輕量的(Lightweight)

Docker 容器是輕量的並且僅需求少量的系統資源就可運作,實際上只要需要的 Docker 映像下載好後,把一個 Docker 映像實例化(instantiating)成 Docker 容器跑起來只需要花幾秒鐘的時間,相較之下用 vagrant up –provision 去建構及腳本化實現(provision)一台虛擬機時常常都要花個 15 - 30 分鐘的時間。這樣的高效率基於兩個原因,首先每個 Docker 容器其實就只是個沙盒的系統程序(sandboxed system process),一個程序只做一件事;其次,所有的 Docker 容器都跑在一個共享的 Docker 母機(host machine),母機可以是你自己的 Linux 作業系統也可以只是個小型的 Linux 虛擬機。

Docker 容器同時也是暫存的(ephemeral)與免洗的(expendable),你可以摧毀(destroy)與取代(replace)某個 Docker 容器而不致影響到整個大型應用(application)。

假使容器只是暫存的,那我們要如何保存要留下的(persistent)應用資料?我也有過相同疑問。我們透過 Dockr 容器卷宗(volume)保存(persist)應用資料在 Docker 母機上。在後文中談到實例化 MySQL 容器時我們會再談談 Docker 容器卷宗。

相同母機、不同世界

不像 Vagrant,每個專案都需要完整的虛擬機(virtual machine)、檔案系統(filesystem)、與網路架構(network stack),Docker 容器跑在單一個共用的 Docker母機,怎麼辦到的呢?不同的 Docker 容器如果佔用到同樣的檔案系統或系統資源時不會互相衝突(collide)嗎?不會,而且這正是 Docker 的拿手絕活(pièce de résistance)。

Docker 被建立在它自有的低階的 Linux 函式庫上,稱為 libcontainer,這個工具透過對各種 Unix 與 Linux 的轉接器(adapter)來沙盒化單一的系統程序並限制它們存取系統資源。Docker 的 libcontainer 函式庫可讓不同的系統程序共存於同一個 Docker 母機上並且存取它們各自沙盒化的檔案系統與系統資源。

也就是說,Docker 並不只是 libcontainer 而已,Docker 是封裝(encapsulate)了許多包括 libcontainer 內的工具包,它具有 Docker 映像建立(creation)、移植性(portability)、版次性(versioning)、與分享(sharing)的能力。

Docker 具備多方之長(the best of both worlds)。Vagrant 只是個專注於硬體虛擬化的工具,反觀 Docker 更專注於程序隔離(isolation)。Vagrant 與 Docker 都致力達到的開發者的期望目標,它們創建互相隔離的應用運行環境,然而 Docker 以更好的效率與移植性做到這一點。

(待續…)

留言
avatar-img
Leon的沙龍
15會員
64內容數
Where I go and what I get.
Leon的沙龍的其他內容
2024/04/10
Goolge OR-Tools 是一套以數學模型為基礎的求解器,相較於 OptaPlanner,OR-Tools 有更平緩的學習曲線,本文是 OR-Tools 最基礎的介紹。
Thumbnail
2024/04/10
Goolge OR-Tools 是一套以數學模型為基礎的求解器,相較於 OptaPlanner,OR-Tools 有更平緩的學習曲線,本文是 OR-Tools 最基礎的介紹。
Thumbnail
2024/04/09
這篇開箱另一套權限檢查工具 Vakt,相較於 Oso,Vakt 的規則直接以 Python 語法構成,不用再學 Oso 的特規語法,可以作為 Oso 的替代品。
Thumbnail
2024/04/09
這篇開箱另一套權限檢查工具 Vakt,相較於 Oso,Vakt 的規則直接以 Python 語法構成,不用再學 Oso 的特規語法,可以作為 Oso 的替代品。
Thumbnail
2024/04/09
SpiffWorkflow 是一個專門針對業務流程的流程引擎,它與商業 BPMN 產品有所區別,適合應用在自有專案中,並且需要內含稍微複雜的商業流程。例如,對於需要外部程式與前端配合才能真正讓用戶輸入決斷的場景,SpiffWorkflow 是一個適合的解決方案。
Thumbnail
2024/04/09
SpiffWorkflow 是一個專門針對業務流程的流程引擎,它與商業 BPMN 產品有所區別,適合應用在自有專案中,並且需要內含稍微複雜的商業流程。例如,對於需要外部程式與前端配合才能真正讓用戶輸入決斷的場景,SpiffWorkflow 是一個適合的解決方案。
Thumbnail
看更多
你可能也想看
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
Thumbnail
前言 前篇把 Ubuntu 作業系統的安裝跟準備談完了,有需要可以跳回去看。接下來聊容器服務 Docker 的安裝與使用。 Docker 可以應用的場合很多,這次是會用它來模擬 Android 受測裝置
Thumbnail
📔心得 一直以來都在使用container下去跑測試環境,所以都是使用docker指令下去做除錯,最近因緣際會下找到這一款可以透過UI看全部的container狀態,真的覺得好用到爆炸,所以來介紹一下這款容器化管理神器。 基本上能用docker指令做到的事情,portainer都能做到,像是doc
Thumbnail
📔心得 一直以來都在使用container下去跑測試環境,所以都是使用docker指令下去做除錯,最近因緣際會下找到這一款可以透過UI看全部的container狀態,真的覺得好用到爆炸,所以來介紹一下這款容器化管理神器。 基本上能用docker指令做到的事情,portainer都能做到,像是doc
Thumbnail
講到Docker之前就必須先談談容器化, 容器化是一種軟體開發的方法, 將程式、依賴及組態封裝在映像檔之中, 那映像檔對於大部份的人來說一定非常的熟悉, 尤其是VM這個詞, 虛擬化技術的先行者, 有了這項技術之後, 我們就可以減少一些因為環境產生的問題導致難以排查程式錯誤的狀況, 甚至可以避免因為A
Thumbnail
講到Docker之前就必須先談談容器化, 容器化是一種軟體開發的方法, 將程式、依賴及組態封裝在映像檔之中, 那映像檔對於大部份的人來說一定非常的熟悉, 尤其是VM這個詞, 虛擬化技術的先行者, 有了這項技術之後, 我們就可以減少一些因為環境產生的問題導致難以排查程式錯誤的狀況, 甚至可以避免因為A
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
圖片來自 Docker (本文譯自〈Docker for PHP Developers〉) 哈囉!Docker Docker 是一個包含許多技術的概括性詞彙,它提供的工具可以幫助你把某個應用(application)的基礎架構(infrastructure)分離成數個邏輯模塊(容器),你可以只組合某
Thumbnail
圖片來自 Docker (本文譯自〈Docker for PHP Developers〉) 哈囉!Docker Docker 是一個包含許多技術的概括性詞彙,它提供的工具可以幫助你把某個應用(application)的基礎架構(infrastructure)分離成數個邏輯模塊(容器),你可以只組合某
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
圖片來自 Shine With Sapphire (本文譯自〈Docker for PHP Developers〉) Docker 和 Vagarant 有什麼不同? 如果在每個專案同時運行多個容器(container)的情況下 Docker 比 Vagrant 好在哪裡?會比用 Vagrant 同
Thumbnail
圖片來自 Shine With Sapphire (本文譯自〈Docker for PHP Developers〉) Docker 和 Vagarant 有什麼不同? 如果在每個專案同時運行多個容器(container)的情況下 Docker 比 Vagrant 好在哪裡?會比用 Vagrant 同
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
上篇我們在安裝 VirtualBox 練習使用虛擬化切割出獨立空間做開發,那除了使用 VM 達到虛擬化外,另一個輕量級的虛擬化技術 - 容器化。 要使用容器,那就不能不認識 Docker
Thumbnail
上篇我們在安裝 VirtualBox 練習使用虛擬化切割出獨立空間做開發,那除了使用 VM 達到虛擬化外,另一個輕量級的虛擬化技術 - 容器化。 要使用容器,那就不能不認識 Docker
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
Thumbnail
這篇分享希望能讓你了解 什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些 組件?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News