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

閱讀時間約 5 分鐘
圖片來自 Shine With Sapphire
(本文譯自〈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
15會員
64內容數
Where I go and what I get.
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Leon的沙龍 的其他內容
圖片來自 Docker (本文譯自〈Docker for PHP Developers〉) 哈囉!Docker Docker 是一個包含許多技術的概括性詞彙,它提供的工具可以幫助你把某個應用(application)的基礎架構(infrastructure)分離成數個邏輯模塊(容器),你可以只組合某
圖片來自 Vincent PONTIER (本文譯自〈Docker for PHP Developers〉) 數年以來我都用 Vagarant  管理本地的開發伺服器,根據 Vagrant 網站所述,Vagrant  是用於創建、組態輕量的(light-weight)、可重製的(reproducib
圖片來自 josemdelaa 本文試圖從眾多電腦廠商的電力方案中,找出最佳解。 首先,我們必須先思考,消費者要的是什麼,我們當然可以天馬行空的想著超大範圍的無線供電方案之類的夢想,不過從務實考量,在現有的科技水平下,以筆電這樣的行動應用,除了續航力,重量這檔事顯然也必須被納入考量,任何人都可以理解
本文已搬家,請點此前往最新版本。 不過,Linux 的疊床架屋式架構又再度表露,Preferred Applications、gnome-www-browser、x-www-browser 這三者根本就同樣目的的東西,不知道弄成三個設定是怎樣?!
圖片來自 timwesterhoff 今日在朋友分享給我的 buzz 中有一則〈如何將 NB 的無線網路變成可分享 Wi-Fi 的 AP 模式 (Ad-Hoc)〉,不過,其實這世界上還有更平易近人的做法,並且不限於透過單一界面,每一台 Mac 上的基本配備—WiFi、乙太網路 、藍牙,只要其中一種界
圖片來自 William Warby 一般來說,資料的備份策略從規模的小到大,我們可以有幾種選擇,如果只是小規模的、輕量的,通常是燒成備份光碟,操作方式也多是手動的,然而隨著年紀的增長  Orz,資料也跟著增長,當資料量大到某種規模,手動備份就變得沒效率且不實際,這時我們就需要專門的備份軟體來自動的
圖片來自 Docker (本文譯自〈Docker for PHP Developers〉) 哈囉!Docker Docker 是一個包含許多技術的概括性詞彙,它提供的工具可以幫助你把某個應用(application)的基礎架構(infrastructure)分離成數個邏輯模塊(容器),你可以只組合某
圖片來自 Vincent PONTIER (本文譯自〈Docker for PHP Developers〉) 數年以來我都用 Vagarant  管理本地的開發伺服器,根據 Vagrant 網站所述,Vagrant  是用於創建、組態輕量的(light-weight)、可重製的(reproducib
圖片來自 josemdelaa 本文試圖從眾多電腦廠商的電力方案中,找出最佳解。 首先,我們必須先思考,消費者要的是什麼,我們當然可以天馬行空的想著超大範圍的無線供電方案之類的夢想,不過從務實考量,在現有的科技水平下,以筆電這樣的行動應用,除了續航力,重量這檔事顯然也必須被納入考量,任何人都可以理解
本文已搬家,請點此前往最新版本。 不過,Linux 的疊床架屋式架構又再度表露,Preferred Applications、gnome-www-browser、x-www-browser 這三者根本就同樣目的的東西,不知道弄成三個設定是怎樣?!
圖片來自 timwesterhoff 今日在朋友分享給我的 buzz 中有一則〈如何將 NB 的無線網路變成可分享 Wi-Fi 的 AP 模式 (Ad-Hoc)〉,不過,其實這世界上還有更平易近人的做法,並且不限於透過單一界面,每一台 Mac 上的基本配備—WiFi、乙太網路 、藍牙,只要其中一種界
圖片來自 William Warby 一般來說,資料的備份策略從規模的小到大,我們可以有幾種選擇,如果只是小規模的、輕量的,通常是燒成備份光碟,操作方式也多是手動的,然而隨著年紀的增長  Orz,資料也跟著增長,當資料量大到某種規模,手動備份就變得沒效率且不實際,這時我們就需要專門的備份軟體來自動的
你可能也想看
Google News 追蹤
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
默默覺得,要解釋 docker 與 VM 在執行方式上的差異,可以用水族箱來說明。
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇
Thumbnail
為什麼要用Docker安裝? Docker是一個容器化平台, 就類似於我們早期虛擬機的VMWare、Virtual Box…等, 虛擬機平台一般, 只是面向的是伺服端, 供企業快速、簡單、輕量的佈署開發完成的程式軟體, 並將相關的環境依賴皆封裝成一包所謂的映像檔(image), 透過這樣的方式減少
Thumbnail
本文介紹了 Docker 的基礎概念,以及在軟體工程環境中的運用。藉由 Docker 的容器化技術和映像檔技術,能夠實現開發和生產環境的一致性,並且支持負載平衡和無縫更新。此外,也提到了 Kubernetes 和 Docker Swarm 這兩個重要工具的用途和適用對象。
Docker是一種容器化技術,可以將應用程式及相關依賴項目打包到一個容器中。這篇文章介紹了安裝Docker的步驟,以及幾個比較偏向使用者的應用程式。
默默覺得,要解釋 docker 與 VM 在執行方式上的差異,可以用水族箱來說明。
Thumbnail
前言 上次我們初步體驗 Docker 快速佈署能力,今天我們要來講解 Dockerfile、Docker Image 與 Docker Container 這些常見的名詞,我們來了解在我們佈署的時候做哪些事情 Docker 佈署流程 首先看到如下圖上半部,在我們一個完整的佈署流程,我們會先將我
Thumbnail
前言 大家好在先前我們講了什麼是 Docker,Docker 好處有什麼以及怎麼安裝 Docker,今天我們要來開始初體驗 Docker 容器,使用後您會發現 Docker 非常的方便快速 Docker Hub 介紹 首先在開始學怎麼抓取 Docker Image 之前,我們要先來介紹 Doc
Thumbnail
前言 上次我們講到 Docker 的功用與好處,今天我們要在講解,如何安裝 Docker 這個容器,讓我們在之後的教學應用更好的實作與練習,現在讓我們開始吧 Docker Engine 與 Docker Desktop 首先在講解怎麼安裝 Docker 時,我們先講解 Docker Engin
Thumbnail
前言 上次我們對 Docker 架構進行了講解,今天我們來講解 Docker 的好處,他到底可以幫助我們什麼事情 ? 為什麼 Docker 如此受人喜歡 ? 現在就來講述 Docker 有什麼好處 跨平台 Docker 可以確保在不同的作業系統是可運作的,可減少機器運作的問題 版本控制 打
Thumbnail
前言 上次我們針對 Docker 這樣容器化技術做了一點介紹,今天我們要來講解 Docker 架構,你是否發現在每次程式上伺服器的流程很麻煩呢 ? 是否發現你寫的程式在別的作業系統不能用呢 ? 如果你遇到這些問題,Docker 都可以幫助你解決這些問題 Docker 架構 在 Docker 這
Thumbnail
前言 大家好我們今天要來教 Docker 這項技術,什麼是 Docker ? Docker 可以幫助我們做什麼事情 ? Docker 是一項容器化技術,他可以降低我們在佈署 App 時,讓我們可以有效的分配作業系統資源,降低佈署作業成本,現在讓我們來了解 Docker 要解決的問題 傳統佈署遇