有些開發(fā)者可能還是不明白 Docker 對自己到底有多大的用處,因此翻譯 Docker 個人用例 這篇文章中來介紹 Docker 在普通開發(fā)者開發(fā)過程中的用例。
Docker 如今贏得了許多關(guān)注,很多人覺得盛名之下其實難副,因為他們?nèi)匀桓悴磺?Docker 和普通開發(fā)者到底有什么關(guān)系。許多開發(fā)者覺得 Docker 離自己很遠,Docker 是生產(chǎn)環(huán)境中的工具,和自己無關(guān)。我也是花了很長時間才想清楚作為普通開發(fā)人員如何在自己的開發(fā)中使用 Docker。坦率地說,我仍處在學(xué)習(xí)的過程中。
這篇文章提供了一個 Docker 用例列表,我希望它能更好地幫助你理解 Docker 并引發(fā)你的思考。本文只是描述 Docker 在普通開發(fā)者日常的應(yīng)用,并不提供完整的解決方案。
在介紹用例之前,我希望你能先記住這句話:“Docker 是一個便攜的應(yīng)用容器”。你可以不知道 Docker 所說的的“便攜式容器”到底是什么意思,但是你必須清楚 Docker 在日常中能帶來非常大的效率提升。
當(dāng)你需要在容器內(nèi)運行自己的應(yīng)用(當(dāng)然可以是任何應(yīng)用),Docker 都提供了一個基礎(chǔ)系統(tǒng)鏡像作為運行應(yīng)用時的基礎(chǔ)系統(tǒng)。也就是說,只要是 Linux 系統(tǒng)上的應(yīng)用都可以運行在 Docker 中。
可以在 Docker 里面運行數(shù)據(jù)庫嗎?當(dāng)然可以。
可以在 Docker 里面運行 Node.js 網(wǎng)站服務(wù)器嗎?當(dāng)然可以。
可以在 Docker 里面運行 API 服務(wù)器嗎?當(dāng)然可以。
Docker 并不在乎你的應(yīng)用程序是什么、做什么,Docker 提供了一組應(yīng)用打包、傳輸和部署的方法,以便你能更好地在容器內(nèi)運行任何應(yīng)用。
下面的例子我自己經(jīng)常使用,當(dāng)然你有更好的案例也可以分享給我。
嘗試新軟件
對開發(fā)者而言,每天會催生出的各式各樣的新技術(shù)都需要嘗試,然而開發(fā)者卻不太可能為他們一一搭建好環(huán)境并進行測試。時間非常寶貴,正是得益于 Docker,讓我們有可能在一條或者幾條命令內(nèi)就搭建完環(huán)境。Docker 有一個傻瓜化的獲取軟件的方法,Docker 后臺會自動獲得環(huán)境鏡像并且運行環(huán)境。
并不僅僅是新技術(shù)環(huán)境搭建用得到 Docker。如果你想快速在你的筆記本上運行一個 MySQL 數(shù)據(jù)庫,或者一個 Redis 消息隊列,那么使用 Docker 便可以非常容易地做到。例如 Docker 只需要一條命令便可以運行 MySQL 數(shù)據(jù)庫:docker run -d -p 3306:3306 tutum/mysql。
譯者注:雖然使用命令也能非常快地安裝 MySQL 數(shù)據(jù)庫,但是當(dāng)用到最新的技術(shù)或者非常復(fù)雜的技術(shù)時,使用 Docker 便會是個非常好的選擇,例如 Gitlab,普通用戶大概需要一天的時間去搭建 Gitlab 平臺,而 Docker 則只需要一條命令。
進行演示
現(xiàn)在我經(jīng)常需要在周末用自己開發(fā)的成果對客戶活著別人做一兩個演示。搭建演示環(huán)境的過程非常麻煩。現(xiàn)在我發(fā)現(xiàn) Docker 已經(jīng)成為我演示這些工具的最合理的方式。同時,對于客戶來說,我可以直接將 Docker 鏡像提供給他們,而不必去做任何環(huán)境配置的工作,工作的效果也會和在他們演示中所看到的一模一樣,同時不必擔(dān)心他們的環(huán)境配置會導(dǎo)致我們的產(chǎn)品無法運行。
避免“我機器上可以運行”
無論是上一篇介紹的企業(yè)部署 Docker 還是本文的個人 Docker 用例,都提到了這個情況。因為環(huán)境配置不同,很多人在開發(fā)中也會遇到這個情況,甚至開發(fā)的軟件到了測試人員的機器上便不能運行。但這都不是重點。重點是,如果我們有一個可靠的、可分發(fā)的標(biāo)準(zhǔn)開發(fā)環(huán)境,那么我們的開發(fā)將不會像現(xiàn)在這么痛苦。Docker 便可以解決這個問題。Docker 鏡像并不會因為環(huán)境的變化而不能運行,也不會在不同的電腦上有不同的運行結(jié)果。可以給測試人員提交含有應(yīng)用的 Docker 鏡像,這樣便不再會發(fā)生“在我機器上是可以運行的”這種事情,很大程度上減輕了開發(fā)人員測試人員互相檢查機器環(huán)境設(shè)置帶來的時間成本。
另一個 Docker 可以發(fā)揮用處的地方是培訓(xùn)班。除了 Docker 容器的隔離性之外,更能體會到 Docker 優(yōu)勢的地方在于環(huán)境搭建。培訓(xùn)班的新手每個人都要在環(huán)境搭建上花費很多時間,但是如果在這里應(yīng)用到 Docker 的話,那么我們只需要把標(biāo)準(zhǔn)的運行環(huán)境鏡像分發(fā)下去,然后就可以開始上課了。使用 Docker 和使用虛擬機一樣簡單,但是 Docker 要更方便、更輕量級。同時,我們也可以告訴學(xué)員:“在培訓(xùn)的同時,我們還將學(xué)到當(dāng)下最流行的技術(shù)——Docker”,這種雙贏的結(jié)局,何樂而不為呢。
學(xué)習(xí) Linux 腳本
當(dāng)然這個原因看起來可能很奇怪,但是對不不熟悉 Linux 操作系統(tǒng)和 Shell 腳本的人來說,確實是一個好機會。即便本文并不是在講 Linux,Linux 的重要度仍然不言而喻。如果你用的是 Windows,那么我給你一個建議:從云主機提供商那兒租用一臺云主機:我推薦使用 CoreOS 系統(tǒng)的云主機。雖然這樣并不會讓你成為專業(yè)的 Linux 運維,但是可以讓你快速地學(xué)到 Linux 基礎(chǔ)知識,愛上命令行操作,并且慢慢開始熟悉和欣賞 Linux。
[page]更好地利用資源
虛擬機的粒度是“虛擬出的機器”,而 Docker 的粒度則是“被限制的應(yīng)用”,相比較而言 Docker 的內(nèi)存占用更少,更加輕量級。
對我來說這是 Docker 的一個優(yōu)勢:因為我經(jīng)常在自己電腦中運行多個 Docker 應(yīng)用,使用 Docker 比使用虛擬機更加簡單,方便,粒度更細,也能持續(xù)地跟蹤容器狀態(tài)。
為微服務(wù)定制
如果你一直在關(guān)注科技新聞的話,那么你應(yīng)該聽說過“微服務(wù)(Microservices)”的概念。Docker 可以很好地和微服務(wù)結(jié)合起來。從概念上來說,一個微服務(wù)便是一個提供一整套應(yīng)用程序的部分功能,Docker 便可以在開發(fā)、測試和部署過程中一直充當(dāng)微服務(wù)的容器。甚至生產(chǎn)環(huán)境也可以在 Docker 中部署微服務(wù)。
在云服務(wù)提供商之間移植
大多數(shù)的云主機提供商已經(jīng)全面支持 Docker。對于開發(fā)人員來說,這表示你可以很方便地切換云服務(wù)提供商,當(dāng)然也可以很方便地將你本地的開發(fā)環(huán)境移動到云主機上,不需要本地上配置一次運行環(huán)境、在云主機上還配置一次運行環(huán)境。全面部署 Docker (Docker here and Docker there) 作為標(biāo)準(zhǔn)運行環(huán)境可以極大地減輕應(yīng)用上線時的工作量和產(chǎn)生 BUG。
API 端
API 是應(yīng)用之間的粘合劑,一個合格開發(fā)者肯定使用過別人提供的 REST API,或者自己開發(fā)過 REST API。需要指出的是,無論是客戶端還是 API 提供端,在開發(fā)之前都需要先定義一組公共的 API 接口,寫成文檔,然后才能進行編碼。如果服務(wù)端和客戶端是共同開發(fā)的話,那么服務(wù)端通常會先實現(xiàn)能返回固定字符串的 API 接口,在以后的開發(fā)中再慢慢去實現(xiàn) API 的功能。
雖然有人會認為在這里 Docker 被濫用了,完全可以用 sample.json 這種文件去實現(xiàn)虛擬 API,但是下面有個實例可以更好地解決前后端分離開發(fā)時的 API 問題。
為了更好地解釋我的意思,給大家提供一個實例:JSON Server,一個用于提供 JSON 數(shù)據(jù)的 REST API。使用過這個容器的人就會知道,既然有這么好用的 Docker JSON Server,我們沒有理由不用 Docker。
譯者注:
運行示例的 JSON Server,同時使用示例中提供的 JSON 文件,只需執(zhí)行一條命令便可以創(chuàng)建一個服務(wù)端的 API 應(yīng)用。
使用 curl http://127.0.0.1:80/posts 即可獲取示例文件中的 posts 段,這樣在后端沒有開發(fā)完 API 的時候,前端一樣可以進行協(xié)同開發(fā)。
技術(shù)的創(chuàng)新
這點應(yīng)該算不上是用例,但是我還是來寫一下。Docker 正在快速發(fā)展,工具也在不斷更新,沒有人能預(yù)見到未來 Docker 會是什么樣子的。你在復(fù)雜的系統(tǒng)中 Docker 使用的越多,越是可能會發(fā)現(xiàn)技術(shù)上的空白和未來技術(shù)發(fā)展的方向。現(xiàn)在還處在 Docker 的發(fā)展期,任何你使用 Docker 創(chuàng)建的工具都有可能成為社區(qū)關(guān)注的熱點。這是 Docker 的機會,也是成就你自己的機會。
你的用例
最后一條便不再是我的用例了,而是 Docker 在你手中能發(fā)揮多大的作用。我也很希望看到你能提供更多使用 Docker 的方式,歡迎留言。
其他
還有兩個技巧可以分享給你們。在學(xué)習(xí) Docker 的過程中因為有了這兩個的幫助,我才得意不斷地提升自己。
一:Docker Hub Registry。這是 Docker 的官方鏡像倉庫,除了托管著 Docker 官方的鏡像外,和 Github 一樣,你可以在上面上傳自己的鏡像,也可以在上面搜尋其他有用的鏡像,極大地節(jié)省自己的時間。例如 Oracle-XE-11g 鏡像,所有的一切都是現(xiàn)成的,完全不需要自己去下載 Oracle XE 11g 安裝。這樣為你和團隊節(jié)約了大量的時間成本。
如果你不太確定的話,可以去 Docker Hub 上搜有一下有沒有自己用得到的鏡像。大部分情況下你所需要的鏡像在 Docker Hub 上都已經(jīng)有人構(gòu)建了。
二:多參考 IaaS 供應(yīng)商的新聞,雖然我們不能像在他們會議室里那樣完全了解他們的公司動態(tài),但是仍然可以從新聞中可以了解到 Docker 最新的發(fā)展方向和技術(shù)趨勢。可以肯定的是,容器化技術(shù)是未來的熱點,我們不僅可以在本機運行 Docker,不僅僅在一家云服務(wù)提供商的主機上運行 Docker,未來所有的云服務(wù)提供商都會支持 Docker。
Docker 前景很明確,采用 Docker 只會讓開發(fā)變得更方便。