Go語言由Google公司開發(fā),并于2009年開源,相比Java/Python/C等語言,Go尤其擅長并發(fā)編程,性能堪比C語言,開發(fā)效率肩比Python,被譽(yù)為“21世紀(jì)的C語言”。
成都創(chuàng)新互聯(lián)公司主打移動(dòng)網(wǎng)站、網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、網(wǎng)站改版、網(wǎng)絡(luò)推廣、網(wǎng)站維護(hù)、域名與空間、等互聯(lián)網(wǎng)信息服務(wù),為各行業(yè)提供服務(wù)。在技術(shù)實(shí)力的保障下,我們?yōu)榭蛻舫兄Z穩(wěn)定,放心的服務(wù),根據(jù)網(wǎng)站的內(nèi)容與功能再?zèng)Q定采用什么樣的設(shè)計(jì)。最后,要實(shí)現(xiàn)符合網(wǎng)站需求的內(nèi)容、功能與設(shè)計(jì),我們還會(huì)規(guī)劃穩(wěn)定安全的技術(shù)方案做保障。
Go語言在云計(jì)算、大數(shù)據(jù)、微服務(wù)、高并發(fā)領(lǐng)域應(yīng)用應(yīng)用非常廣泛。BAT大廠正在把Go作為新項(xiàng)目開發(fā)的首選語言。
Go語言應(yīng)用范圍:
1、服務(wù)端開發(fā):以前你使用C或者C++做的那些事情,用Go來做很合適,例如日志處理、文件系統(tǒng)、監(jiān)控系統(tǒng)等;
2、DevOps:運(yùn)維生態(tài)中的Docker、K8s、prometheus、grafana、open-falcon等都是使用Go語言開發(fā);
3、網(wǎng)絡(luò)編程:大量優(yōu)秀的Web框架如Echo、Gin、Iris、beego等,而且Go內(nèi)置的 net/http包十分的優(yōu)秀;
4、Paas云平臺(tái)領(lǐng)域:Kubernetes和Docker Swarm等;
5、分布式存儲(chǔ)領(lǐng)域:etcd、Groupcache、TiDB、Cockroachdb、Influxdb等;
6、區(qū)塊鏈領(lǐng)域:區(qū)塊鏈里面有兩個(gè)明星項(xiàng)目以太坊和fabric都使用Go語言;
7、容器虛擬化:大名鼎鼎的Docker就是使用Go語言實(shí)現(xiàn)的;
8、爬蟲及大數(shù)據(jù):Go語言天生支持并發(fā),所以十分適合編寫分布式爬蟲及大數(shù)據(jù)處理。
docker容器技術(shù)指Docker是一個(gè)由GO語言寫的程序運(yùn)行的“容器”(Linux containers, LXCs)
Docker則實(shí)現(xiàn)了一種應(yīng)用程序級(jí)別的隔離,它改變我們基本的開發(fā)、操作單元,由直接操作虛擬主機(jī)(VM),轉(zhuǎn)換到操作程序運(yùn)行的“容器”上來。
Docker是為開發(fā)者和系統(tǒng)管理員設(shè)計(jì)的,用來發(fā)布和運(yùn)行分布式應(yīng)用程序的一個(gè)開放性平臺(tái)。由兩部分組成:
Docker Engine: 一個(gè)便攜式、輕量級(jí)的運(yùn)行環(huán)境和包管理器。(注* 單OS vs 單線程)
Docker Hub: 為創(chuàng)建自動(dòng)化工作流和分享應(yīng)用創(chuàng)建的云服務(wù)組成。(注* 云端鏡像/包管理 vs npm包管理,是不是跟npm特別像?)
從2013年3月20日,第一個(gè)版本的Docker正式發(fā)布到 2014年6月Docker 1.0 正式發(fā)布,經(jīng)歷了15個(gè)月。 雖然發(fā)展歷程很短,但Docker正在有越來越流行的趨勢。
其實(shí)Container技術(shù)并非Docker的創(chuàng)新,HeroKu, NodeJitsu 等云服務(wù)商都采用了類似這種輕量級(jí)的虛擬化技術(shù),但Docker是第一個(gè)將這這種Container技術(shù)大規(guī)模開源并被社區(qū)廣泛接受的。
Go作為近兩年迅速流行起來的編程語言始終致力于使事情簡單化。它并未引入很多新概念,而是聚焦于打造一門簡單的語言,讓開發(fā)者使用起來感覺異??焖偾液唵?。相信有意向深入學(xué)習(xí)Go語言的小伙伴都在研究Go的開源項(xiàng)目,今天我就把自己覺得不錯(cuò)的6個(gè)Go開源項(xiàng)目推薦給大家,希望大家能獲得收獲和成長。
推薦一:kubernetes 【Star:44418】
Kubernetes基于Docker,其目的是讓用戶通過Kubernetes集群來進(jìn)行云端容器集群的管理,而無需用戶進(jìn)行復(fù)雜的設(shè)置工作。系統(tǒng)會(huì)自動(dòng)選取合適的工作節(jié)點(diǎn)來執(zhí)行具體的容器集群調(diào)度處理工作。
推薦二:etcd 【Star:21408】
etcd是由CoreOS開發(fā)并維護(hù)鍵值存儲(chǔ)系統(tǒng),它使用Go語言編寫,并通過Raft一致性算法處理日志復(fù)制以保證強(qiáng)一致性。目前,Google的容器集群管理系統(tǒng)Kubernetes、開源PaaS平臺(tái)Cloud Foundry和CoreOS的Fleet都廣泛使用了etcd。
推薦三:deis 【Star:6093】
Deis是一個(gè)基于Docker和CoreOS的開源PaaS平臺(tái),旨在讓部屬和管理服務(wù)器上的應(yīng)用變得輕松容易。它可以運(yùn)行在AWS、GCE以及Openstack平臺(tái)下。
推薦四:flynn 【Star:6936】
Flynn是一個(gè)使用Go語言編寫的開源PaaS平臺(tái),可自動(dòng)構(gòu)建部署任何應(yīng)用到Docker容器集群上運(yùn)行。Flynn項(xiàng)目受到Y(jié) Combinator的支持,目前仍在開發(fā)中,被稱為是下一代的開源PaaS平臺(tái)。
推薦五:lime 【Star:13775】
相對(duì)上面的幾款Go語言在云端和服務(wù)器端之外,Lime則顯得比較特殊。Lime,則是一款用Go語言寫的桌面編輯器程序,被看做是著名編輯器Sublime Text的開源實(shí)現(xiàn)。
六:revel 【Star:10508】
Revel是一個(gè)高生產(chǎn)力的Go語言Web框架。Revel框架支持熱編譯,當(dāng)編輯、保存和刷新源碼時(shí),Revel會(huì)自動(dòng)編譯代碼和模板;全棧特性,支持路由、參數(shù)解析、緩存、測試、國際化等功能。
首選,如果之前使用過redis容器,我們需要先remove掉之前的容器
然后創(chuàng)建redis容器,并運(yùn)行
進(jìn)入redis容器中
接著我們通過 redis-cli 連接測試使用 redis 服務(wù)
setex指令 可以設(shè)置數(shù)據(jù)存在的時(shí)間, setex key second value
MSET 一次設(shè)置多個(gè)key-value
MGET一次獲取多個(gè)key-value
HGET
HGETALL
Hlen和hexist
Lpush 和 Lrange
Lpop和Rpop 從鏈表取出并移走數(shù)據(jù)
刪除鏈表所有數(shù)據(jù) DEL
字符串無序 不能重復(fù)
從連接池中Get出一個(gè)conn連接
Docker 提供了一個(gè)與 Docker 守護(hù)進(jìn)程交互的 API (稱為Docker Engine API),我們可以使用官方提供的 Go 語言的 SDK 進(jìn)行構(gòu)建和擴(kuò)展 Docker 應(yīng)用程序和解決方案。
轉(zhuǎn)自:
整理:地鼠文檔
通過下面的命令就可以安裝 SDK 了:
該部分會(huì)介紹如何使用 Golang + Docker API 進(jìn)行管理本地的 Docker。
第一個(gè)例子將展示如何運(yùn)行容器,相當(dāng)于 docker run docker.io/library/alpine echo "hello world" :
還可以在后臺(tái)運(yùn)行容器,相當(dāng)于 docker run -d bfirsh/reticulate-splines :
列出正在運(yùn)行的容器,就像使用 docker ps 一樣:
如果是 docker ps -a ,我們可以通過修改 types.ContainerListOptions 中的 All 屬性達(dá)到這個(gè)目的:
通過上面的例子,我們可以獲取容器的列表,所以在這個(gè)案例中,我們可以去停止所有正在運(yùn)行的容器。
通過指定容器的 ID,我們可以獲取對(duì)應(yīng) ID 的容器的日志:
獲取本地所有的鏡像,相當(dāng)于 docker image ls 或 docker images :
拉取指定鏡像,相當(dāng)于 docker pull alpine :
除了公開的鏡像,我們平時(shí)還會(huì)用到一些私有鏡像,可以是 DockerHub 上私有鏡像,也可以是自托管的鏡像倉庫,比如 harbor 。這個(gè)時(shí)候,我們需要提供對(duì)應(yīng)的憑證才可以拉取鏡像。
值得注意的是:在使用 Docker API 的 Go SDK 時(shí),憑證是以明文的方式進(jìn)行傳輸?shù)模匀绻亲越ǖ溺R像倉庫,請(qǐng)務(wù)必使用 HTTPS !
我們可以將一個(gè)已有的容器通過 commit 保存成一個(gè)鏡像:
當(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 的時(shí)候需要指定遠(yuǎn)程 Docker 的地址,這樣就可以像管理本地 Docker 一樣管理遠(yuǎn)程的 Docker 了:
現(xiàn)在已經(jīng)有很多可以管理 Docker 的產(chǎn)品,它們便是這樣進(jìn)行實(shí)現(xiàn)的,比如: portainer 。