如何用Docker定製你自己的Beego環境

2021-09-20 02:41:07 字數 4294 閱讀 5029

前言:學習golang幾個月了,一直在論壇和qq群裡潛水,一直都想寫點什麼回報大家積極的知識分享。

前幾日在csdn上看到了一篇文章:如何將nodeclub構建成docker映象.也對docker有所了解,就來分享一下我平時怎麼應用docker來跑我的專案。

先引用beego作者謝大描述虛擬機器的一段話:"平常我們經常會遇到這樣的問題:在開發機上面開發完畢程式,放到正式環境之後會出現各種奇怪的問題:描述符少了、nginx配置不正確、mysql編碼不對、php缺少模組、glibc版本太低等。所以我們就需要虛擬開發環境,我們虛擬和正式環境一樣的虛擬開發環境"

但是虛擬機器真的好重,虛擬機器不僅啟動慢,而且浪費很多的cpu,記憶體資源,於是應運而生了docker,為我們提供了乙個輕量級的虛擬環境。

關於如何使用docker,可以參考上面nodeclub的文章和官方文件

首先來貼上我的dockerfile

from golang:1.4.2

#author

maintainer carl

#add beego and other package

add github.com /go/src/github.com

#build bee tool script

add build.sh /build.sh

run chmod +x /build.sh

run /build.sh

#add bee tool to path

env path $path:$gopath/bin

#add our project

add hello /go/src/hello

#start project script

add run.sh /

run chmod +x /run.sh

expose 8080

cmd ["/run.sh"]

先附上這個專案github位址。但是其中的依賴包需要自己get並且放到github.com目錄下。

我們一句一句分析:

4.構建過程中,可以檢視到整個過程的日誌輸出。

5.構建完成後我們就可以進入 官網-》映象-》我的映象 下找到我們剛剛構建的映象了。然後就可以直接通過這個映象直接建立容器了。

6.在的容器頁下可以直接建立容器,省心省力。直接開啟,看到我們的小 beego。

如果是在我們平時的開發過程中,以上的方法肯定是不可取的。不然每次對**有一點點改動,難道就要重新構建乙個beego的映象麼?

nodocker好處之一就是隨時可以把想要定製化的容器隨時打包成映象

於是我們可以將以上的映象分成兩部分,讓我們的不需要經常改動的package打成乙個映象a,再將我們的經常開發的**用之前構建的映象a為base映象,構建成我們常用的產品映象。

那麼問題又來了

我們在寫程式的過程中,常常會引入了新的**包,是不是還要一併的重新構建beego映象。可是我們猿類都現在趨向於解耦,當然耦合度越低越好了。於是我們可以將此分為三層。

用golang:1.4.2映象構建成的beego映象mybeego

用mybeego映象構建成的包含專案依賴的packages的映象beego-package

用beego-package映象構建成的包含專案**的映象myhello

這樣mybeego 可以提交到dockerhub作為乙個公共的beego基礎映象。 beego-package 是我們不常改動的**依賴環境映象。 myhello 是我們經常改動的**映象。

於是可以將dockerfile分別寫成

mybeego:v1

from golang:1.4.2

maintainer carl

env path $path:$gopath/bin

add github.com /go/src/github.com

add build.sh /build.sh

run chmod +x /build.sh

run /build.sh

beego-package:v1

from mybeego:v1

add github.com /go/src/github.com

add golang.org /go/src/golang.org..

.

myhello:v1

add  beego-blog /go/src/beego-blog

add run.sh /

run chmod +x /run.sh

expose 8080

cmd ["/run.sh"]

附上beego基礎映象的github位址。的也可以在時速雲共有映象找到。

這樣,把模組細化,產品執行環境隔離,只要你構建成功,並且成功跑起來了該專案。那麼以後再也不會出現讓很多人頭疼的環境問題了。並且你也可以將這個映象打包,直接把這個映象在產品環境啟動,都是ok沒問題的,只要你的pc裝了docker就可以。

我就是個懶人,本來windows是安裝不了docker的,但是懶得開虛擬機器,所以用了時速雲這個客戶端。以上做法都已經很簡便開發了,但是每次構建還都需要重新構建乙個映象,雖然步驟簡單,但是也很讓人煩。

有沒有不用每次構建映象就可以開發的方法麼?

當然有!

但是你必須是在linux環境下。我們應用的是docker -v命令, volume對映的方法。

首先要小小改動一下我們**的dockerfile

myhello:v1

add run.sh /

run chmod +x /run.sh

expose 8080

cmd ["/run.sh"]

對比發現,只是把add beego-blog $gopath/src/beego-blog這句話去掉了。

然後用docker命令來啟動容器sudo docker run -p 8006:8080 -v /root/beego-blog:/go/src/beego-blog myhello:v1

-p 命令是埠對映,後面的埠8080是容器暴露出來的埠,前面的8006是對應我們host宿主機的埠。

-v 命令是檔案對映的命令,通過以上的命令,將宿主機的/root/beego-blog資料夾,對映到了$gopath/src/beego-blog資料夾。其中要注意的是-v後引數 前面的是host宿主機路徑,後面是容器路徑,並且路徑都必須是絕對路徑。

啟動容器後,你就可以訪問localhost:8006來訪問我們的myhello程式了。如果你對**有了改動。將會自動同步到容器內部,只需要docker restart container_id 就可以了。(其實如果你run.sh裡的啟動方式是bee run,當然**會自動重新執行的)。

是不是非常酷!這樣來說既沒有了各種環境問題帶來的困擾,又可以輕鬆編寫構建**了。最重要的是你不需要再為了遷移部署到其他地方再搭一遍環境了。

個人來說,學習go語言幾個月了,期間也看了一些docker。docker就是go語言的乙個精良產物,並且圍繞docker的很多任務具也都是用go來寫的,看著心裡就有一種大go要崛起的趕腳。

平時在工作的時候,有時候在測試機上要跑個簡單的go程式,但是發現沒有go環境,裝環境還煩,恰好機器上有docker。隨便寫個dockerfile。用命令 docker run -ti myimage /bin/bash就跑到容器裡去調程式,當時的真的感覺"這東西咋這麼方便呢",如果你要弄個php,ruby這些都不用去弄環境了,直接容器裡就都有了,用著真的很方便。

在說說我在時速雲上一點點發現。在他們的映象區里的公有映象有好多新奇的發現。其中發現乙個的discuz映象,出於好奇,我建了乙個discuz容器和mysql容器。

然後就直接裝上了這個discuz,並且可以直接當做管理員來各種拖拽玩了。還是挺有意思的。通過這些來看,docker確實為我們帶來了很多便利,即使不懂技術,可以根本不會部署各種環境,但是只要會用linux系統就可以從頭到尾維護乙個社群**了,甚至是做更多用處了。

如何定製自己的華為ROM

解析的工具 網上有幾個現成可用的程式 指令碼,如 huaweiupdateextractor 以及 split updata.pl,但是 huaweiupdateextractor 為exe,不方便研究的童鞋,split updata.pl 需要 安裝64位的 perl,不然會報 記憶體不夠 的錯,...

如何用Docker編排容器

歡迎來到後硬體時代。在這個時代我們把容器或者是虛擬機器遷移到我們需要的地方,而不需要考慮容器或者虛擬機器。這裡我們介紹一些新的docker工具來做這份工作。構建下一代應用是一回事,管理和執行它們是另一回事。也許理解上面那句話的最好方式是通過乙個老的模擬 寵物 vs 奶牛。人們採用特別的方法使寵物存活...

如何自己定製iOS框架(framework)

有些公司比較喜歡將自己寫的 封裝起來,一般會封裝成靜態庫,這樣就不會對外暴露源 但是靜態庫的製作有些麻煩,有些文章說需要針對模擬器和真機封裝成兩個版本的靜態庫。最近博主無意間發現了乙個可以自己製作的ios framework的東西,使用之後感覺非常方便,封裝的非常好,就像系統自帶的framework...