新聞中心
Golang項目部署3,容器部署
容器部署即使用 docker 化部署 golang 應(yīng)用程序,這是在云服務(wù)時代最流行的部署方式,也是最推薦的部署方式。
創(chuàng)新互聯(lián)長期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為通遼企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,通遼網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
跨平臺交叉編譯是 golang 的特點(diǎn)之一,可以非常方便地編譯出我們需要的目標(biāo)服務(wù)器平臺的版本,而且是靜態(tài)編譯,非常容易地解決了運(yùn)行依賴問題。
使用以下指令可以靜態(tài)編譯 Linux 平臺 amd64 架構(gòu)的可執(zhí)行文件:
生成的 main 便是我們靜態(tài)編譯的,可部署于 Linux amd64 上的可執(zhí)行文件。
我們需要將該可執(zhí)行文件 main 編譯生成 docker 鏡像,以便于分發(fā)及部署。 Golang 的運(yùn)行環(huán)境推薦使用 alpine 基礎(chǔ)系統(tǒng)鏡像,編譯出的容器鏡像約為 20MB 左右。
一個參考的 Dockerfile 文件如下:
其中,我們的基礎(chǔ)鏡像使用了 loads/alpine:3.8 ,中國國內(nèi)的用戶推薦使用該基礎(chǔ)鏡像,基礎(chǔ)鏡像的 Dockerfile 地址: ,倉庫地址:
隨后使用 " docker build -t main . " 指令編譯生成名為 main 的 docker 鏡像。
需要注意的是,在某些項目的架構(gòu)設(shè)計中, 靜態(tài)文件 和 配置文件 可能不會隨著鏡像進(jìn)行編譯發(fā)布,而是分開進(jìn)行管理和發(fā)布。
例如,使用 MVVM 模式的項目中(例如使用 vue 框架),往往是前后端非常獨(dú)立的,因此在鏡像中往往并不會包含 public 目錄。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的項目中,也往往并不需要 config 目錄。
因此對于以上示例的 Dockerfile 的使用,僅作參考,根據(jù)實(shí)際情況請進(jìn)行必要的調(diào)整。
使用以下指令可直接運(yùn)行剛才編譯成的鏡像:
容器的分發(fā)可以使用 docker 官方的平臺: ,國內(nèi)也可以考慮使用阿里云: 。
在企業(yè)級生產(chǎn)環(huán)境中, docker 容器往往需要結(jié)合 kubernetes 或者 docker swarm 容器編排工具一起使用。
容器編排涉及到的內(nèi)容比較多,感興趣的同學(xué)可以參考以下資料:
Go語言的開源項目
1.Docker項目
網(wǎng)址為 。
介紹:Docker是一種操作系統(tǒng)層面的虛擬化技術(shù),可以在操作系統(tǒng)和應(yīng)用程序之間進(jìn)行隔離,也可以稱之為容器。Docker可以在一臺物理服務(wù)器上快速運(yùn)行一個或多個實(shí)例。例如,啟動一個Cent OS操作系統(tǒng),并在其內(nèi)部命令行執(zhí)行指令后結(jié)束,整個過程就像自己在操作系統(tǒng)一樣高效。
2.golang項目
網(wǎng)址為 。
介紹:Go語言的早期源碼使用C語言和匯編語言寫成。從Go 1.5版本自舉后,完全使用Go語言自身進(jìn)行編寫。Go語言的源碼對了解Go語言的底層調(diào)度有極大的參考意義,建議希望對Go語言有深入了解的讀者讀一讀。
3.Kubernetes項目
網(wǎng)址為 。
介紹:Google公司開發(fā)的構(gòu)建于Docker之上的容器調(diào)度服務(wù),用戶可以通過Kubernetes集群進(jìn)行云端容器集群管理。
4.etcd項目
網(wǎng)址為 。
介紹:一款分布式、可靠的KV存儲系統(tǒng),可以快速進(jìn)行云配置。
5.beego項目
網(wǎng)址為 。
介紹:beego是一個類似Python的Tornado框架,采用了RESTFul的設(shè)計思路,使用Go語言編寫的一個極輕量級、高可伸縮性和高性能的Web應(yīng)用框架。
6.martini項目
網(wǎng)址為 。
介紹:一款快速構(gòu)建模塊化的Web應(yīng)用的Web框架。
7.codis項目
網(wǎng)址為 Labs/codis。
介紹:國產(chǎn)的優(yōu)秀分布式Redis解決方案。
8.delve項目
網(wǎng)址為 。
介紹:Go語言強(qiáng)大的調(diào)試器,被很多集成環(huán)境和編輯器整合。
golang有沒有好的開源游戲框架
Go作為近兩年迅速流行起來的編程語言始終致力于使事情簡單化。它并未引入很多新概念,而是聚焦于打造一門簡單的語言,讓開發(fā)者使用起來感覺異??焖偾液唵?。相信有意向深入學(xué)習(xí)Go語言的小伙伴都在研究Go的開源項目,今天我就把自己覺得不錯的6個Go開源項目推薦給大家,希望大家能獲得收獲和成長。
推薦一:kubernetes 【Star:44418】
Kubernetes基于Docker,其目的是讓用戶通過Kubernetes集群來進(jìn)行云端容器集群的管理,而無需用戶進(jìn)行復(fù)雜的設(shè)置工作。系統(tǒng)會自動選取合適的工作節(jié)點(diǎn)來執(zhí)行具體的容器集群調(diào)度處理工作。
推薦二:etcd 【Star:21408】
etcd是由CoreOS開發(fā)并維護(hù)鍵值存儲系統(tǒng),它使用Go語言編寫,并通過Raft一致性算法處理日志復(fù)制以保證強(qiáng)一致性。目前,Google的容器集群管理系統(tǒng)Kubernetes、開源PaaS平臺Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。
推薦三:deis 【Star:6093】
Deis是一個基于Docker和CoreOS的開源PaaS平臺,旨在讓部屬和管理服務(wù)器上的應(yīng)用變得輕松容易。它可以運(yùn)行在AWS、GCE以及Openstack平臺下。
推薦四:flynn 【Star:6936】
Flynn是一個使用Go語言編寫的開源PaaS平臺,可自動構(gòu)建部署任何應(yīng)用到Docker容器集群上運(yùn)行。Flynn項目受到Y(jié) Combinator的支持,目前仍在開發(fā)中,被稱為是下一代的開源PaaS平臺。
推薦五:lime 【Star:13775】
相對上面的幾款Go語言在云端和服務(wù)器端之外,Lime則顯得比較特殊。Lime,則是一款用Go語言寫的桌面編輯器程序,被看做是著名編輯器Sublime Text的開源實(shí)現(xiàn)。
六:revel 【Star:10508】
Revel是一個高生產(chǎn)力的Go語言Web框架。Revel框架支持熱編譯,當(dāng)編輯、保存和刷新源碼時,Revel會自動編譯代碼和模板;全棧特性,支持路由、參數(shù)解析、緩存、測試、國際化等功能。
如何使用Go語言是操作Docker
Docker 提供了一個與 Docker 守護(hù)進(jìn)程交互的 API (稱為Docker Engine API),我們可以使用官方提供的 Go 語言的 SDK 進(jìn)行構(gòu)建和擴(kuò)展 Docker 應(yīng)用程序和解決方案。
轉(zhuǎn)自:
整理:地鼠文檔
通過下面的命令就可以安裝 SDK 了:
該部分會介紹如何使用 Golang + Docker API 進(jìn)行管理本地的 Docker。
第一個例子將展示如何運(yùn)行容器,相當(dāng)于 docker run docker.io/library/alpine echo "hello world" :
還可以在后臺運(yùn)行容器,相當(dāng)于 docker run -d bfirsh/reticulate-splines :
列出正在運(yùn)行的容器,就像使用 docker ps 一樣:
如果是 docker ps -a ,我們可以通過修改 types.ContainerListOptions 中的 All 屬性達(dá)到這個目的:
通過上面的例子,我們可以獲取容器的列表,所以在這個案例中,我們可以去停止所有正在運(yùn)行的容器。
通過指定容器的 ID,我們可以獲取對應(yīng) ID 的容器的日志:
獲取本地所有的鏡像,相當(dāng)于 docker image ls 或 docker images :
拉取指定鏡像,相當(dāng)于 docker pull alpine :
除了公開的鏡像,我們平時還會用到一些私有鏡像,可以是 DockerHub 上私有鏡像,也可以是自托管的鏡像倉庫,比如 harbor 。這個時候,我們需要提供對應(yīng)的憑證才可以拉取鏡像。
值得注意的是:在使用 Docker API 的 Go SDK 時,憑證是以明文的方式進(jìn)行傳輸?shù)?,所以如果是自建的鏡像倉庫,請務(wù)必使用 HTTPS !
我們可以將一個已有的容器通過 commit 保存成一個鏡像:
當(dāng)然,除了可以管理本地的 Docker , 我們同樣也可以通過使用 Golang + Docker API 管理遠(yuǎn)程的 Docker 。
默認(rèn) Docker 是通過非網(wǎng)絡(luò)的 Unix 套接字運(yùn)行的,只能夠進(jìn)行本地通信( /var/run/docker.sock ),是不能夠直接遠(yuǎn)程連接 Docker 的。
我們需要編輯配置文件 /etc/docker/daemon.json ,并修改以下內(nèi)容(把 192.168.59.3 改成你自己的 IP 地址),然后重啟 Docker :
創(chuàng)建 client 的時候需要指定遠(yuǎn)程 Docker 的地址,這樣就可以像管理本地 Docker 一樣管理遠(yuǎn)程的 Docker 了:
現(xiàn)在已經(jīng)有很多可以管理 Docker 的產(chǎn)品,它們便是這樣進(jìn)行實(shí)現(xiàn)的,比如: portainer 。
什么是 docker 容器技術(shù)
Docker是什么?
簡單得來說,Docker是一個由GO語言寫的程序運(yùn)行的“容器”(Linux containers, LXCs); 目前云服務(wù)的基石是操作系統(tǒng)級別的隔離,在同一臺物理服務(wù)器上虛擬出多個主機(jī)。Docker則實(shí)現(xiàn)了一種應(yīng)用程序級別的隔離; 它改變我們基本的開發(fā)、操作單元,由直接操作虛擬主機(jī)(VM),轉(zhuǎn)換到操作程序運(yùn)行的“容器”上來。
Docker是為開發(fā)者和系統(tǒng)管理員設(shè)計的,用來發(fā)布和運(yùn)行分布式應(yīng)用程序的一個開放性平臺。由兩部分組成:
Docker Engine: 一個便攜式、輕量級的運(yùn)行環(huán)境和包管理器。(注* 單OS vs 單線程,是不是跟NodeJS特別像?)
Docker Hub: 為創(chuàng)建自動化工作流和分享應(yīng)用創(chuàng)建的云服務(wù)組成。(注* 云端鏡像/包管理 vs npm包管理,是不是跟npm特別像?)
從2013年3月20日,第一個版本的Docker正式發(fā)布到 2014年6月Docker 1.0 正式發(fā)布,經(jīng)歷了15個月。 雖然發(fā)展歷程很短,但Docker正在有越來越流行的趨勢。
其實(shí)Container技術(shù)并非Docker的創(chuàng)新,HeroKu, NodeJitsu 等云服務(wù)商都采用了類似這種輕量級的虛擬化技術(shù),但Docker是第一個將這這種Container技術(shù)大規(guī)模開源并被社區(qū)廣泛接受的。
好的部分
Docker相對于VM虛擬機(jī)的優(yōu)勢十分明顯,那就是輕量和高性能和便捷性, 以下部分摘自:KVM and Docker LXC Benchmarking with OpenStack
快
運(yùn)行時的性能可以獲取極大提升(經(jīng)典的案例是提升97%)
管理操作(啟動,停止,開始,重啟等等) 都是以秒或毫秒為單位的。
敏捷
像虛擬機(jī)一樣敏捷,而且會更便宜,在bare metal(裸機(jī))上布署像點(diǎn)個按鈕一樣簡單。
靈活
將應(yīng)用和系統(tǒng)“容器化”,不添加額外的操作系統(tǒng),
輕量
你會擁有足夠的“操作系統(tǒng)”,僅需添加或減小鏡像即可。在一臺服務(wù)器上可以布署100~1000個Containers容器。
便宜
開源的,免費(fèi)的,低成本的。由現(xiàn)代Linux內(nèi)核支持并驅(qū)動。注* 輕量的Container必定可以在一個物理機(jī)上開啟更多“容器”,注定比VMs要便宜。
生態(tài)系統(tǒng)
正在越來越受歡迎,只需要看一看Google的趨勢就知道了,docker or LXC.
還有不計其數(shù)的社區(qū)和第三方應(yīng)用。
云支持
不計其數(shù)的云服務(wù)提供創(chuàng)建和管理Linux容器框架。
文章標(biāo)題:運(yùn)行g(shù)o語言的免費(fèi)容器,go語言運(yùn)行環(huán)境
地址分享:http://www.dlmjj.cn/article/hsojcs.html