Docker遇见golang

 

golang logo

在我国古代,传说天庭中有种种天兵天将,有看守四大天门的(docker0网桥),有负责传话的门将(REST API),有负责人间和天界联络的,如财神爷,土地公等(NAT,DNS),而且还有绑定在每个神仙身上的坐骑(EVS,NFS,BS,  EFS),还有关于各个管辖的奏折(Log)。由于每个上仙的职责不同(Controller,Scheduler),被管辖范围的人数或者项目不同(Container,Host),还有吃了可以长命百岁的仙桃(image)等等等等;但是呢,天庭有个规,不许神仙与凡人相爱,而处于修道或者成魔成妖的人或者动物,则属于被监控和被调度的资源。

    原来古代的管理模式也属于云计算的范畴,即通过一个请求可以将计算资源,存储资源,网络资源进行调度、分配与整合。

牛郎:

    牛郎是一个很聪明,很朴实,很简单的语言,他所处的世代(runtime)是一个多帝王(CPU),多耕地(Disk),严制度(Gc),快通讯(Goutinue)的朝代。也正是就这样,天时地利人和,样样是牛郎的优势,于是乎牛郎(Go)就诞生在世人的眼帘。由于k8s的组件多数是基于go开发的,再加上牛郎自的优势,而他的贡献很快被世人所应用,大致有这几个特点:

    1、部署简单;相比Python,Python官方 PyPI 源又经常出问题,需要搭建私有镜像,而维护这个镜像又要花费不少时间和精力,而go语言可编译可执行的静态文件,除了 glibc 外没有其他外部依赖。

    2、效率之快;相比Java,它完善的基础库和的和高效gc,相比C语言,虽然C和C++有超快的处理速度和强大的性能,但是这两个者对字符串处理能力较弱,也没有gc,导致开发周期提升。

    3、并发性好;Goroutine和channel 使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个 Go 应用也能有效的利用多个 CPU 核,并行执行的性能好。

    4、良好的语言设计;定义变量自由,切片和接口的设计大大提高了代码的通用性和移植能力。比如 gofmt 自动排版 Go 代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。

    而民间传说有一件法宝名叫beego框架,它正是借助牛郎的优势所发明出来的一件器皿。而它的出现大大简化耕地(程序)和农场(web项目)的开发的周期和流程设计,起初只需要按照生成模板进行增删改,就可以快速创建和部署一个小型农场。

    要先获取此件宝器,必须先去github官网下载源码,进行编译,然后搭建好bee和beego的环境,搭建好之后通过如下宝器的咒语创建beego项目,比如下面命令就可以创建项目:

bee new hello

    创建好项目之后,便可以给耕地种植不同种类的农作物,就可以让其生长,如下图所示的目录结构是我这个穷屌丝的农场结构,简单的国际化处理,特别简陋,希望大家熟练去应用牛郎的贡献。

织女(Docker):

    在云计算中,也就是在天界中,织女Docker就好比集装箱,天界就好比大货轮。Mac上的Docker好比烟熏妆的织女,深沉而又优雅。

    “在集装箱之前,货物运输没有统一的标准方式进行搬运,于是铁路、公路、海洋等各种运输之间,需要大量的人力作为货物中转,效率极低,而且成本很高。集装箱出现之后,世界上绝大多数的货物运输都可以放到这个神奇的箱子里,然后在公路、铁路、海洋等所有运输场景下,这个箱子都可以不用变化形态直接可以承运,而且中间的中转工作,都可以通过大型机械搞定,效率大大提升”。引自腾讯高级工程师邹立巍在《什么是 Docker?》这篇文章的上半部分对Docker的通俗解释;

    正是由于标准货轮的出现,大大推动了云概念的进阶和天庭的改革。随着docker对天界的应想呈递增式增长,而且关于它的奏章目前也不少,每个上仙团队对docker的关注点也并不相同,这个得结合自己的应用去使用“集装箱”。

    织女Docker常见有三重性格:即MacOS、Linux/Unbutu、Windows,它们的安装步骤分别在下篇文章中可进行阅览,包括内容有织女Docker的命令、存储和网络等。

鹊桥(Dockerfile):

    每当牛郎(Go)和织女(Docker)相遇,一见钟情。而最后被王母(OS)经常阻拦或者拆散。但是他们十分相爱以至于感动了世间万物,即镜像的出现拉近了彼此之间的距离,推动了故事的进一步发展;都说过Docker是集装箱的容器,容器里面放的是应用,应用可以是web项目、也可以是程序还可以是农场。

有这么一句话:“Any problem in computer science can be solved by another layer of indirection”。意思是说,在计算机科学领域的任何问题都可以增加一个间接的中间层来解决。

    所以鹊桥的出现就相当于一个中间层。织女Docker通过Dockerfile构建出来鹊桥,来加载启动镜像和牛郎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的区别是,ADD命令会将压缩好的tar包直接解压到指定目录中,然后通过docker build -t hello:1.1.1来编译镜像,为了提高工作效率,可以通过编写shell脚本来构建自动化出包,直接用jenkins镜像搭建CI环境,再将Go项目编译二进制文件的时候值得注意一点是,由于编译环境不同,通过交叉编译后,二进制文件才能在指定环境中运行,大致这三种场景:

# 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的主界面和已经国际化的个别字样了,详细的自动化shell脚本和go代码,我已经上传至github库Docker+beego,欢迎大家的指点和补充。

    下一节,讲解Docker网络、CLI和日志。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容