Docker遇见golang https://www.jianshu.com/p/37693eb8f646
在我国古代,传说天庭中有种种天兵天将,有看守四大天门的(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和日志。
作者:取个帅气的昵称华华
链接:https://www.jianshu.com/p/37693eb8f646
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
Docker遇见golang https://www.jianshu.com/p/37693eb8f646的更多相关文章
- 如何利用docker 构建golang线上部署环境
		公司最近开发了一个项目是用golang 写的,现在要部署到线上环境去,又不想在服务器上装单独的golang,决定用docker 封装下,直接打到镜像里面,然后就直接在hub.docker.com上面搜 ... 
- [转]https://www.jianshu.com/p/06443248f4d8
		eos是什么? 原文 https://www.jianshu.com/p/06443248f4d8 简介 用一句话来定义eos,即:区块链操作系统,支持在它之上构建dapp,支持智能合约.帐户.身份验 ... 
- Zabbix调优不完全指南(https://www.jianshu.com/p/2d911d55448f)
		从学习搭建zabbix到完成各类监控.调优.二次开发已经过去了两年,期间通过QQ学习群.zabbix官方社区.各个技术博客整理学习了不少关于各种报错的处理方法,现在将常见的一些报错处理方法整理出来分享 ... 
- 接口测试之——Charles抓包及常见问题解决(转载自https://www.jianshu.com/p/831c0114179f)
		简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在Windows,Mac,Linux上使用,安装Charl ... 
- jar与war包区别,转自https://www.jianshu.com/p/3b5c45e8e5bd
		https://www.jianshu.com/p/3b5c45e8e5bd 
- fastdfs(https://www.jianshu.com/p/1c71ae024e5e)
		参考 官方网站:https://github.com/happyfish100/ 配置文档:https://github.com/happyfish100/fastdfs/wiki/ 参考资料:htt ... 
- Docker部署Golang
		1. 安装docker 2. mkdir myDocker 3. cd myDocker && touch Dockerfile 4. Dockerfile写入 # 将golang ... 
- docker registry的https错误解决
		从docker1.3.2版本开始默认docker registry使用的是https,当你用docker pull 非https的docker regsitry的时候会报下面错误: Error: In ... 
- 利用Docker搭建本地https环境的完整步骤
		利用Docker搭建本地https环境的完整步骤 这篇文章主要给大家介绍了关于如何利用Docker搭建本地https环境的完整步骤,文中通过示例代码将实现的步骤介绍的非常详细,对大家的学习或者工作具有 ... 
- https://www.jianshu.com/p/1038c6170775
		import os # 方法一: os.walk实现 def items_dir(rootname): l = [] for main_dir, dirs, file_name_list in os. ... 
随机推荐
- KingbaseES 创建只读(read_only)用户
			数据库版本: prod=> select version(); version --------------------------------------------------------- ... 
- Mysql 实现 向上递归查找父节点并返回树结构
			需求:通过mysql 8.0以下版本实现,一个人多角色id,一个角色对应某个节点menu_id,根节点的父节点存储为NULL, 向上递归查找父节点并返回树结构. 如果只有叶子,剔除掉; 如果只有根,只 ... 
- 新建Github仓库并上传本地代码
			按照Github的教程 Adding a local repository to GitHub using Git 1. 创建空的Github仓库 创建远程仓库 ,注意不要勾选Add a README ... 
- typora收费了,最后一个免费版提供下载
			typora收费了,在这里,博主提供最后一个免费版下载,地址如下,顺便把typora导入和导出word时需要的工具也一同提供.最看不惯免费用着别人的软件,还搞引流的垃圾网站和公众号.地址如下 http ... 
- 萌新码农的第一篇:MarkDown的使用方法
			MarkDown的使用方法 使用的编辑软件Typora 1.标题的使用方法 输入''#''然后空格,输入标题名字即可生成标题. 随着''#''的增多,标题的大小会依次减小,最多到六级标题 2.排字 字 ... 
- 阿里云SLB的http强制转https
			公司的要求:要求强制http转https 我的环境是: 域名<--->slb的ip<-->源服务器nginx 具体做法是: 第一步:证书放到slb的https上,通过443端口 ... 
- vscode展示子文件夹
			取消勾选设置-功能-compact Folders 
- 「Tubian」Tubian0.4!完全开源!
			Tubian是我自己维护的Linux发行版.Tubian基于Debian,提供了开箱既用的Wine和Waydroid,装好就有对Android应用和Windows程序的兼容. Sourceforge. ... 
- 学习ASP.NET Core Blazor编程系列四——迁移
			学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ... 
- aws-cli命令-S3相关的操作及管理
			在工作中,我们可能经常会将本地数据上传S3进行备份,或者将S3数据下载到本地 本文主要讲解下,工作中可能经常会用到的与S3相关的操作 1.将本地目录的数据同步到指定的S3位置,及s3资源管理 # 同步 ... 
