?
在我國古代亮蛔,傳說天庭中有種種天兵天將,有看守四大天門的(docker0網(wǎng)橋)浴讯,有負責傳話的門將(REST API)朵夏,有負責人間和天界聯(lián)絡的,如財神爺榆纽,土地公等(NAT侍郭,DNS)询吴,而且還有綁定在每個神仙身上的坐騎(EVS,NFS亮元,BS,? EFS)猛计,還有關(guān)于各個管轄的奏折(Log)。由于每個上仙的職責不同(Controller爆捞,Scheduler)奉瘤,被管轄范圍的人數(shù)或者項目不同(Container,Host),還有吃了可以長命百歲的仙桃(image)等等等等煮甥;但是呢盗温,天庭有個規(guī),不許神仙與凡人相愛成肘,而處于修道或者成魔成妖的人或者動物卖局,則屬于被監(jiān)控和被調(diào)度的資源。
? ? 原來古代的管理模式也屬于云計算的范疇双霍,即通過一個請求可以將計算資源砚偶,存儲資源,網(wǎng)絡資源進行調(diào)度洒闸、分配與整合染坯。
牛郎:
? ? 牛郎是一個很聰明,很樸實丘逸,很簡單的語言单鹿,他所處的世代(runtime)是一個多帝王(CPU),多耕地(Disk)深纲,嚴制度(Gc)仲锄,快通訊(Goutinue)的朝代。也正是就這樣湃鹊,天時地利人和儒喊,樣樣是牛郎的優(yōu)勢,于是乎牛郎(Go)就誕生在世人的眼簾涛舍。由于k8s的組件多數(shù)是基于go開發(fā)的澄惊,再加上牛郎自的優(yōu)勢唆途,而他的貢獻很快被世人所應用富雅,大致有這幾個特點:
? ? 1、部署簡單肛搬;相比Python没佑,Python官方 PyPI 源又經(jīng)常出問題,需要搭建私有鏡像温赔,而維護這個鏡像又要花費不少時間和精力蛤奢,而go語言可編譯可執(zhí)行的靜態(tài)文件,除了 glibc 外沒有其他外部依賴。
? ? 2啤贩、效率之快待秃;相比Java,它完善的基礎(chǔ)庫和的和高效gc痹屹,相比C語言章郁,雖然C和C++有超快的處理速度和強大的性能,但是這兩個者對字符串處理能力較弱志衍,也沒有g(shù)c暖庄,導致開發(fā)周期提升。
? ? 3楼肪、并發(fā)性好培廓;Goroutine和channel 使得編寫高并發(fā)的服務端軟件變得相當容易,很多情況下完全不需要考慮鎖機制以及由此帶來的各種問題春叫。單個 Go 應用也能有效的利用多個 CPU 核肩钠,并行執(zhí)行的性能好。
? ? 4象缀、良好的語言設計蔬将;定義變量自由,切片和接口的設計大大提高了代碼的通用性和移植能力央星。比如 gofmt 自動排版 Go 代碼霞怀,很大程度上杜絕了不同人寫的代碼排版風格不一致的問題。
? ? 而民間傳說有一件法寶名叫beego框架莉给,它正是借助牛郎的優(yōu)勢所發(fā)明出來的一件器皿毙石。而它的出現(xiàn)大大簡化耕地(程序)和農(nóng)場(web項目)的開發(fā)的周期和流程設計,起初只需要按照生成模板進行增刪改颓遏,就可以快速創(chuàng)建和部署一個小型農(nóng)場徐矩。
? ? 要先獲取此件寶器,必須先去github官網(wǎng)下載源碼叁幢,進行編譯滤灯,然后搭建好bee和beego的環(huán)境,搭建好之后通過如下寶器的咒語創(chuàng)建beego項目曼玩,比如下面命令就可以創(chuàng)建項目:
bee new hello
? ? 創(chuàng)建好項目之后鳞骤,便可以給耕地種植不同種類的農(nóng)作物,就可以讓其生長黍判,如下圖所示的目錄結(jié)構(gòu)是我這個窮屌絲的農(nóng)場結(jié)構(gòu)豫尽,簡單的國際化處理,特別簡陋顷帖,希望大家熟練去應用牛郎的貢獻美旧。
織女(Docker):
? ? 在云計算中渤滞,也就是在天界中,織女Docker就好比集裝箱榴嗅,天界就好比大貨輪妄呕。Mac上的Docker好比煙熏妝的織女,深沉而又優(yōu)雅嗽测。
? ? “在集裝箱之前趴腋,貨物運輸沒有統(tǒng)一的標準方式進行搬運,于是鐵路论咏、公路优炬、海洋等各種運輸之間,需要大量的人力作為貨物中轉(zhuǎn)厅贪,效率極低蠢护,而且成本很高。集裝箱出現(xiàn)之后养涮,世界上絕大多數(shù)的貨物運輸都可以放到這個神奇的箱子里葵硕,然后在公路、鐵路贯吓、海洋等所有運輸場景下懈凹,這個箱子都可以不用變化形態(tài)直接可以承運,而且中間的中轉(zhuǎn)工作悄谐,都可以通過大型機械搞定介评,效率大大提升”。引自騰訊高級工程師鄒立巍在《什么是 Docker爬舰?》這篇文章的上半部分對Docker的通俗解釋们陆;
? ? 正是由于標準貨輪的出現(xiàn),大大推動了云概念的進階和天庭的改革情屹。隨著docker對天界的應想呈遞增式增長坪仇,而且關(guān)于它的奏章目前也不少,每個上仙團隊對docker的關(guān)注點也并不相同垃你,這個得結(jié)合自己的應用去使用“集裝箱”椅文。
? ? 織女Docker常見有三重性格:即MacOS、Linux/Unbutu惜颇、Windows皆刺,它們的安裝步驟分別在下篇文章中可進行閱覽,包括內(nèi)容有織女Docker的命令官还、存儲和網(wǎng)絡等芹橡。
鵲橋(Dockerfile):
? ? 每當牛郎(Go)和織女(Docker)相遇毒坛,一見鐘情望伦。而最后被王母(OS)經(jīng)常阻攔或者拆散林说。但是他們十分相愛以至于感動了世間萬物,即鏡像的出現(xiàn)拉近了彼此之間的距離屯伞,推動了故事的進一步發(fā)展腿箩;都說過Docker是集裝箱的容器,容器里面放的是應用劣摇,應用可以是web項目珠移、也可以是程序還可以是農(nóng)場。
有這么一句話:“Any problem in computer science can be solved by another layer of indirection”末融。意思是說钧惧,在計算機科學領(lǐng)域的任何問題都可以增加一個間接的中間層來解決。
? ? 所以鵲橋的出現(xiàn)就相當于一個中間層勾习∨ǖ桑織女Docker通過Dockerfile構(gòu)建出來鵲橋,來加載啟動鏡像和牛郎Go相遇巧婶,而鏡像包的制作離不開牛郎家的牛皮即壓縮好的tar包乾颁。鵲橋制作的模板如下:
FROM centos:latest
MAINTAINER nanzehua nanzehua@163.com
EXPOSE 8080
#RUN passwd paas < paas_pwd.txt
#RUN rm paas_pwd.txt
ADD hello.tgz /var/paas/project-hello/
#COPY tar -zxvf /var/paas/project-hello/hello.tgz
RUN mkdir -p /var/paas/log/
RUN touch /var/paas/log/project-hello.log
RUN chown paas:paas -R /var/paas/
RUN chmod -R 750 /var/paas/
#ENTRYPOINT ["/var/paas/project-hello"]
CMD ["/var/paas/project-hello/hello"]
? ? ADD和COPY的區(qū)別是,ADD命令會將壓縮好的tar包直接解壓到指定目錄中艺栈,然后通過docker build -t hello:1.1.1來編譯鏡像英岭,為了提高工作效率,可以通過編寫shell腳本來構(gòu)建自動化出包湿右,直接用jenkins鏡像搭建CI環(huán)境诅妹,再將Go項目編譯二進制文件的時候值得注意一點是,由于編譯環(huán)境不同毅人,通過交叉編譯后漾唉,二進制文件才能在指定環(huán)境中運行,大致這三種場景:
# Mac下進行交叉編譯至Linux64
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
#bee pack -be=GOOS=linux -exs=.md:.go:.DS_Store:.tmp:.zip:.exe.exe~ -exp=.:swagger:static:runtime
# Mac下進行交叉編譯至Windows64
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
# Linux下編譯
go build
? ? 這些問題注意之后堰塌,咱們就生成了一個名為的hello的Image赵刑,然后通過
docker run -p 8080:8080 hello:1.1.1
就成功啟動了一個容器,瀏覽器中在通過
http://127.0.0.1:8080
就可以看到beego的主界面和已經(jīng)國際化的個別字樣了场刑,詳細的自動化shell腳本和go代碼般此,我已經(jīng)上傳至github庫Docker+beego,歡迎大家的指點和補充牵现。
? ? 下一節(jié)铐懊,講解Docker網(wǎng)絡、CLI和日志瞎疼。