一句話總結:
Docker就是貨櫃原理:例如隔離:Docker 提供了一組應用打包、傳輸和部署的方法,以便你能更好地在容器內運行任何應用程式。 Docker 是一個可攜帶的應用程式容器
Docker快速整出各種環境:例如Node.js 網站伺服器,API 伺服器,資料庫等
1、docker的好處?
1-1、快速建立隔離環境:不同的應用程式可能會有不同的應用程式環境,例如.net開發的網站和php開發的網站依賴的軟體就不一樣,如果把他們依賴的軟體都安裝在一個伺服器上就要調試很久,而且很麻煩,還會造成一些衝突。例如IIS和Apache存取埠衝突。這時候你就要隔離.net開發的網站和php開發的網站。常規來講,我們可以在伺服器上建立不同的虛擬機器在不同的虛擬機器上放置不同的應用,但是虛擬機器開銷比較高。 docker可以實現虛擬機器隔離應用環境的功能,而且開銷比虛擬機器小,小就意味著省錢了。
1-2、封裝開發環境,解決環境版本問題:你開發軟體的時候用的是Ubuntu,但是維運管理的都是centos,維運在把你的軟體從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,例如:有個特殊版本的資料庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運維就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發環境直接封裝轉移給運維,維運直接部署你給他的docker就可以了。而且部署速度快。
1-3、記憶體利用:在伺服器負載方面,如果你單獨開一個虛擬機,那麼虛擬機會佔用空閒記憶體的,docker部署的話,這些記憶體就會利用起來。
2、docker是什麼? docker可以做什麼?
Docker的想法來自於貨櫃,貨櫃解決了什麼問題?在一艘大船上,可以把貨物規整的擺放起來。並且各種各樣的貨物被貨櫃標準化了,貨櫃和貨櫃之間不會互相影響。那麼我就不需要專門運送水果的船和專門運送化學品的船了。只要這些貨物在貨櫃裡封裝的好好的,那我就可以用一艘大船把他們都運走。
docker就是類似的理念。現在都流行雲端運算了,雲端運算就好比大貨輪。 docker就是貨櫃。
2-1.不同的應用程式可能會有不同的應用程式環境,例如.net開發的網站和php開發的網站依賴的軟體就不一樣,如果把他們依賴的軟體都安裝在一個伺服器上就要調試很久,而且很麻煩,還會造成一些衝突。例如IIS和Apache存取埠衝突。這時候你就要隔離.net開發的網站和php開發的網站。常規來講,我們可以在伺服器上建立不同的虛擬機器在不同的虛擬機器上放置不同的應用,但是虛擬機器開銷比較高。 docker可以實現虛擬機器隔離應用環境的功能,而且開銷比虛擬機器小,小就意味著省錢了。
2-2.你開發軟體的時候用的是Ubuntu,但是維運管理的都是centos,維運在把你的軟體從開發環境轉移到生產環境的時候就會遇到一些Ubuntu轉centos的問題,例如:有個特殊版本的資料庫,只有Ubuntu支持,centos不支持,在轉移的過程當中運作就得想辦法解決這樣的問題。這時候要是有docker你就可以把開發環境直接封裝轉移給運維,維運直接部署你給他的docker就可以了。而且部署速度快。
2-3.在伺服器負載方面,如果你單獨開一個虛擬機,那麼虛擬機會佔用空閒記憶體的,docker部署的話,這些記憶體就會利用起來。
總之docker就是貨櫃原理。
3、開發者可以使用docker做什麼?
Docker 如今贏得了許多關注,很多人覺得盛名之下其實難副,因為他們仍然搞不清 Docker 和普通開發者到底有什麼關係。許多開發者覺得 Docker 離自己很遠,Docker 是生產環境中的工具,跟自己無關。我也是花了很長時間才想清楚身為普通開發人員如何在自己的開發中使用 Docker。坦白說,我仍處在學習的過程中。
這篇文章提供了一個 Docker 用例列表,我希望它能更好地幫助你理解 Docker 並引發你的思考。本文只是描述 Docker 在一般開發者日常的應用,並沒有提供完整的解決方案。
在介紹用例之前,我希望你能先記住這句話:「Docker 是一個可攜帶的應用容器」。你可以不知道 Docker 所說的「便攜式容器」到底是什麼意思,但是你必須清楚 Docker 在日常中能帶來非常大的效率提升。
當你需要在容器內運行自己的應用程式(當然可以是任何應用),Docker 都提供了一個基礎系統映像作為運行應用時的基礎系統。也就是說,只要是 Linux 系統上的應用程式都可以運行在 Docker 中。
可以在 Docker 裡面運行資料庫嗎?當然可以。
可以在 Docker 裡面運行 Node.js 網站伺服器嗎?當然可以。
可以在 Docker 裡面運行 API 伺服器嗎?當然可以。
Docker 並不在乎你的應用程式是什麼、做什麼,Docker 提供了一組應用程式打包、傳輸和部署的方法,以便你能更好地在容器內運行任何應用程式。
4、嘗試新軟體
對開發者而言,每天會催生出的各式各樣的新技術都需要嘗試,然而開發者卻不太可能為他們一一搭建好環境並進行測試。時間非常寶貴,正是得益於 Docker,讓我們有可能在一條或幾條指令內就搭建完環境。 Docker 有一個傻瓜化的獲取軟體的方法,Docker 後台會自動獲得環境映像並且運行環境。
並不僅僅是新技術環境搭建用得到 Docker。如果你想快速在你的筆記本上執行一個 MySQL 資料庫,或是一個 Redis 訊息佇列,那麼使用 Docker 便可以非常容易做到。例如Docker 只需要一條指令便可以執行MySQL 資料庫:
docker run -d -p 3306:3306 tutum/mysql。
譯者註:雖然使用指令也能非常快速地安裝MySQL 資料庫,但當用到最新的技術或是非常複雜的技術時,使用Docker 便會是個非常好的選擇,例如Gitlab,一般使用者大概需要一天的時間來建立Gitlab 平台,而Docker 則只需要一條指令。
5、學習linux腳本
當然這個原因看起來可能很奇怪,但是對不熟悉Linux 作業系統和Shell 腳本的人來說,確實是個好機會。就算這篇文章不是在講 Linux,Linux 的重要性仍然不言而喻。如果你用的是 Windows,那我給你一個建議:從雲端主機供應商那裡租用一台雲端主機:我推薦使用 CoreOS 系統的雲端主機。雖然這樣並不會讓你成為專業的 Linux 運維,但是可以讓你快速地學到 Linux 基礎知識,愛上命令列操作,並且慢慢開始熟悉和欣賞 Linux。
6、更好的利用資源
虛擬機的粒度是“虛擬出的機器”,而Docker 的粒度則是“被限制的應用”,相比較而言Docker 的記憶體佔用更少,更加輕量級。
對我來說這是 Docker 的優點:因為我經常在自己電腦中執行多個 Docker 應用,使用 Docker 比使用虛擬機器更簡單,方便,粒度更細,也能持續地追蹤容器狀態。
7、為微服務客製化
如果你一直在關注科技新聞的話,那麼你應該聽過「微服務(Microservices)」的概念。 Docker 可以很好地和微服務結合。從概念上來說,一個微服務便是一個提供一整套應用程式的部分功能,Docker 便可以在開發、測試和部署過程中一直充當微服務的容器。甚至生產環境也可以在 Docker 部署微服務。
8、在雲端服務提供者之間移植
大多數的雲端主機提供者已經全面支援 Docker。對於開發人員來說,這表示你可以很方便地切換雲端服務供應商,當然也可以很方便地將你本地的開發環境移動到雲端主機上,不需要本地上配置一次運行環境、在雲端主機上也配置一次運行環境。全面部署 Docker (Docker here and Docker there) 作為標準運作環境可以大幅減輕應用上線時的工作量和產生 BUG。
9、API
API 是應用之間的黏合劑,合格開發者肯定使用過別人提供的 REST API,或是自己開發過 REST API。需要指出的是,無論是客戶端還是 API 提供端,在開發之前都需要先定義一組公共的 API 接口,寫成文檔,然後才能進行編碼。如果服務端和客戶端是共同開發的話,那麼服務端通常會先實作能傳回固定字串的 API 接口,在以後的開發中再慢慢去實作 API 的功能。
雖然有人會認為在這裡 Docker 被濫用了,完全可以用 sample.json 這種檔案去實作虛擬 API,但下面有個實例可以更好地解決前後端分離開發時的 API 問題。
為了更好地解釋我的意思,提供一個實例給大家:JSON Server,一個用於提供 JSON 資料的 REST API。使用過這個容器的人就會知道,既然有這麼好用的 Docker JSON Server,我們沒有理由不用 Docker。
更多相關問題請造訪PHP中文網:PHP影片教學
以上是超詳細分析php docker的原理與作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!