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