在上篇文章 8 個你可能不知道的 Docker 知識 中介紹了 Docker 在生產環境中的用例,有些開發者可能仍是不明白 Docker 對本身到底有多大的用處,所以翻譯 Docker 我的用例 這篇文章中來介紹 Docker 在普通開發者開發過程當中的用例。前端
Docker 現在贏得了許多關注,不少人以爲盛名之下其實難副,由於他們仍然搞不清 Docker 和普通開發者到底有什麼關係。許多開發者以爲 Docker 離本身很遠,Docker 是生產環境中的工具,和本身無關。我也是花了很長時間纔想清楚做爲普通開發人員如何在本身的開發中使用 Docker。坦率地說,我仍處在學習的過程當中。mysql
這篇文章提供了一個 Docker 用例列表,我但願它能更好地幫助你理解 Docker 並引起你的思考。本文只是描述 Docker 在普通開發者平常的應用,並不提供完整的解決方案。git
在介紹用例以前,我但願你能先記住這句話:「Docker 是一個便攜的應用容器」。你能夠不知道 Docker 所說的的「便攜式容器」究竟是什麼意思,可是你必須清楚 Docker 在平常中能帶來很是大的效率提高。github
當你須要在容器內運行本身的應用(固然能夠是任何應用),Docker 都提供了一個基礎系統鏡像做爲運行應用時的基礎系統。也就是說,只要是 Linux 系統上的應用均可以運行在 Docker 中。sql
能夠在 Docker 裏面運行數據庫嗎?固然能夠。
能夠在 Docker 裏面運行 Node.js 網站服務器嗎?固然能夠。
能夠在 Docker 裏面運行 API 服務器嗎?固然能夠。docker
Docker 並不在意你的應用程序是什麼、作什麼,Docker 提供了一組應用打包、傳輸和部署的方法,以便你能更好地在容器內運行任何應用。數據庫
下面的例子我本身常用,固然你有更好的案例也能夠分享給我。json
對開發者而言,天天會催生出的各式各樣的新技術都須要嘗試,然而開發者卻不太可能爲他們一一搭建好環境並進行測試。時間很是寶貴,正是得益於 Docker,讓咱們有可能在一條或者幾條命令內就搭建完環境。Docker 有一個傻瓜化的獲取軟件的方法,Docker 後臺會自動得到環境鏡像而且運行環境。segmentfault
並不只僅是新技術環境搭建用獲得 Docker。若是你想快速在你的筆記本上運行一個 MySQL 數據庫,或者一個 Redis 消息隊列,那麼使用 Docker 即可以很是容易地作到。例如 Docker 只須要一條命令即可以運行 MySQL 數據庫:docker run -d -p 3306:3306 tutum/mysql
。後端
譯者注:雖然使用命令也能很是快地安裝 MySQL 數據庫,可是當用到最新的技術或者很是複雜的技術時,使用 Docker 便會是個很是好的選擇,例如 Gitlab,普通用戶大概須要一天的時間去搭建 Gitlab 平臺,而 Docker 則只須要一條命令。
如今我常常須要在週末用本身開發的成果對客戶活着別人作一兩個演示。搭建演示環境的過程很是麻煩。如今我發現 Docker 已經成爲我演示這些工具的最合理的方式。同時,對於客戶來講,我能夠直接將 Docker 鏡像提供給他們,而沒必要去作任何環境配置的工做,工做的效果也會和在他們演示中所看到的如出一轍,同時沒必要擔憂他們的環境配置會致使咱們的產品沒法運行。
不管是上一篇介紹的企業部署 Docker 仍是本文的我的 Docker 用例,都提到了這個狀況。由於環境配置不一樣,不少人在開發中也會遇到這個狀況,甚至開發的軟件到了測試人員的機器上便不能運行。但這都不是重點。重點是,若是咱們有一個可靠的、可分發的標準開發環境,那麼咱們的開發將不會像如今這麼痛苦。Docker 即可以解決這個問題。Docker 鏡像並不會由於環境的變化而不能運行,也不會在不一樣的電腦上有不一樣的運行結果。能夠給測試人員提交含有應用的 Docker 鏡像,這樣便再也不會發生「在我機器上是能夠運行的」這種事情,很大程度上減輕了開發人員測試人員互相檢查機器環境設置帶來的時間成本。
另外一個 Docker 能夠發揮用處的地方是培訓班。除了 Docker 容器的隔離性以外,更能體會到 Docker 優點的地方在於環境搭建。培訓班的新手每一個人都要在環境搭建上花費不少時間,可是若是在這裏應用到 Docker 的話,那麼咱們只須要把標準的運行環境鏡像分發下去,而後就能夠開始上課了。使用 Docker 和使用虛擬機同樣簡單,可是 Docker 要更方便、更輕量級。同時,咱們也能夠告訴學員:「在培訓的同時,咱們還將學到當下最流行的技術——Docker」,這種共贏的結局,何樂而不爲呢。
固然這個緣由看起來可能很奇怪,可是對不不熟悉 Linux 操做系統和 Shell 腳本的人來講,確實是一個好機會。即使本文並非在講 Linux,Linux 的重要度仍然不言而喻。若是你用的是 Windows,那麼我給你一個建議:從雲主機提供商那兒租用一臺雲主機:我推薦使用 CoreOS 系統的雲主機。雖然這樣並不會讓你成爲專業的 Linux 運維,可是可讓你快速地學到 Linux 基礎知識,愛上命令行操做,而且慢慢開始熟悉和欣賞 Linux。
虛擬機的粒度是「虛擬出的機器」,而 Docker 的粒度則是「被限制的應用」,相比較而言 Docker 的內存佔用更少,更加輕量級。
對我來講這是 Docker 的一個優點:由於我常常在本身電腦中運行多個 Docker 應用,使用 Docker 比使用虛擬機更加簡單,方便,粒度更細,也能持續地跟蹤容器狀態。
若是你一直在關注科技新聞的話,那麼你應該據說過「微服務(Microservices)」的概念。Docker 能夠很好地和微服務結合起來。從概念上來講,一個微服務即是一個提供一整套應用程序的部分功能,Docker 即可以在開發、測試和部署過程當中一直充當微服務的容器。甚至生產環境也能夠在 Docker 中部署微服務。
大多數的雲主機提供商已經全面支持 Docker。對於開發人員來講,這表示你能夠很方便地切換雲服務提供商,固然也能夠很方便地將你本地的開發環境移動到雲主機上,不須要本地上配置一次運行環境、在雲主機上還配置一次運行環境。全面部署 Docker (Docker here and Docker there) 做爲標準運行環境能夠極大地減輕應用上線時的工做量和產生 BUG。
API 是應用之間的粘合劑,一個合格開發者確定使用過別人提供的 REST API,或者本身開發過 REST API。須要指出的是,不管是客戶端仍是 API 提供端,在開發以前都須要先定義一組公共的 API 接口,寫成文檔,而後才能進行編碼。若是服務端和客戶端是共同開發的話,那麼服務端一般會先實現能返回固定字符串的 API 接口,在之後的開發中再慢慢去實現 API 的功能。
雖然有人會認爲在這裏 Docker 被濫用了,徹底能夠用 sample.json
這種文件去實現虛擬 API,可是下面有個實例能夠更好地解決先後端分離開發時的 API 問題。
爲了更好地解釋個人意思,給你們提供一個實例:JSON Server,一個用於提供 JSON 數據的 REST API。使用過這個容器的人就會知道,既然有這麼好用的 Docker JSON Server,咱們沒有理由不用 Docker。
譯者注:
curl http://127.0.0.1:80/posts
便可獲取示例文件中的 posts 段,這樣在後端沒有開發完 API 的時候,前端同樣能夠進行協同開發。這點應該算不上是用例,可是我仍是來寫一下。Docker 正在快速發展,工具也在不斷更新,沒有人能預見到將來 Docker 會是什麼樣子的。你在複雜的系統中 Docker 使用的越多,越是可能會發現技術上的空白和將來技術發展的方向。如今還處在 Docker 的發展期,任何你使用 Docker 建立的工具都有可能成爲社區關注的熱點。這是 Docker 的機會,也是成就你本身的機會。
最後一條便再也不是個人用例了,而是 Docker 在你手中能發揮多大的做用。我也很但願看到你能提供更多使用 Docker 的方式,歡迎留言。
還有兩個技巧能夠分享給大家。在學習 Docker 的過程當中由於有了這兩個的幫助,我才得意不斷地提高本身。
一:Docker Hub Registry。這是 Docker 的官方鏡像倉庫,除了託管着 Docker 官方的鏡像外,和 Github 同樣,你能夠在上面上傳本身的鏡像,也能夠在上面搜尋其餘有用的鏡像,極大地節省本身的時間。例如 Oracle-XE-11g 鏡像,全部的一切都是現成的,徹底不須要本身去下載 Oracle XE 11g 安裝。這樣爲你和團隊節約了大量的時間成本。
若是你不太肯定的話,能夠去 Docker Hub 上搜有一下有沒有本身用獲得的鏡像。大部分狀況下你所須要的鏡像在 Docker Hub 上都已經有人構建了。
二:多參考 IaaS 供應商的新聞,雖然咱們不能像在他們會議室裏那樣徹底瞭解他們的公司動態,可是仍然能夠重新聞中能夠了解到 Docker 最新的發展方向和技術趨勢。能夠確定的是,容器化技術是將來的熱點,咱們不只能夠在本機運行 Docker,不只僅在一家雲服務提供商的主機上運行 Docker,將來全部的雲服務提供商都會支持 Docker。
Docker 前景很明確,採用 Docker 只會讓開發變得更方便。
本專欄正在翻譯 Docker 系列文章,接下來是 Flux Docker 系列教程,Docker 實例和 Docker 進階內容將在之後慢慢推出。歡迎關注。