go 开发容器 docker

总所周知 Docker 和 Kubernetes 等的云计算项目都是用 Go 语言写的。其中 docker 技术的确为实施人员切实地解决了那些头痛的问题。 最近新项目也想用 docker 将开发环境部署到开发人员机器上,节省开发人员搭建繁琐的开发环境的时间。所以花了些业余时间学习了 docker。在学习过程中也也感受到 docker 的 magic。如由于 Docker 直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。

同时都 docker 是怎么写出来的产出兴趣,由此搜集一些资料学习尝试自己写一个简单容器。

当我们运行 docker 时

docker:docker run 命令 参数(docker run hello-world)

实现:go run main.go run 命令 参数

创建一个 go 项目,创建 main.go 文件。

引入所需要包,有关 os 包的具体使用,我会随后的推送给大家分享。

在 main 入口方法中,根据运行时输入第一个参数的值来判断是否运行 run 方法。

在 run 方法中,首先从第二个参数打印到最后参数为止的所有参数。

接下来执行命名,有关 exec 的使用方法,下一次通过具体示例为大家介绍。

must 方法对异常进行处理。

我们现在就可以运行一下程序,输入下图中的命令

哈哈 我们到此为止已经迈出了第一步。

接下来我们再尝试运行 go run main.go run /bin/bash

然后进入命令行,可以输入一些命令,最后通过 exit 退出。

但是现在我们进入的容器还不是隔离的,如下图中,当进入后我们查看 hostname,然后 hostname 修改用户名后退出(exit)容器,我们再次用 hostname 命令查看用户名,发现这时系统的 hostname 也发随着发生改变。这说明我们没有隔离容器与系统。

为了解决这个问题,我们需要调整一下代码。

引入 syscall 这个可以调用底层的包,有关 syscall 的具体的用法,随后为大家分享。

然后用syscall 将 UTS 复制一份以达到隔离目的

再次运行程序,查看结果大家可能已经发现了这次在容器中修改 hostname 不会再影响到系统的 hostname 了

今天就到这里吧

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180225G03OEH00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券