成都网站建设设计

将想法与焦点和您一起共享

运行go语言的免费容器,go语言运行环境

Golang项目部署3,容器部署

容器部署即使用 docker 化部署 golang 应用程序,这是在云服务时代最流行的部署方式,也是最推荐的部署方式。

创新互联长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为通辽企业提供专业的网站建设、网站设计,通辽网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。

跨平台交叉编译是 golang 的特点之一,可以非常方便地编译出我们需要的目标服务器平台的版本,而且是静态编译,非常容易地解决了运行依赖问题。

使用以下指令可以静态编译 Linux 平台 amd64 架构的可执行文件:

生成的 main 便是我们静态编译的,可部署于 Linux amd64 上的可执行文件。

我们需要将该可执行文件 main 编译生成 docker 镜像,以便于分发及部署。 Golang 的运行环境推荐使用 alpine 基础系统镜像,编译出的容器镜像约为 20MB 左右。

一个参考的 Dockerfile 文件如下:

其中,我们的基础镜像使用了 loads/alpine:3.8 ,中国国内的用户推荐使用该基础镜像,基础镜像的 Dockerfile 地址: ,仓库地址:

随后使用 " docker build -t main . " 指令编译生成名为 main 的 docker 镜像。

需要注意的是,在某些项目的架构设计中, 静态文件 和 配置文件 可能不会随着镜像进行编译发布,而是分开进行管理和发布。

例如,使用 MVVM 模式的项目中(例如使用 vue 框架),往往是前后端非常独立的,因此在镜像中往往并不会包含 public 目录。而使用了 配置管理中心 (例如使用 consul / etcd / zookeeper )的项目中,也往往并不需要 config 目录。

因此对于以上示例的 Dockerfile 的使用,仅作参考,根据实际情况请进行必要的调整。

使用以下指令可直接运行刚才编译成的镜像:

容器的分发可以使用 docker 官方的平台: ,国内也可以考虑使用阿里云: 。

在企业级生产环境中, docker 容器往往需要结合 kubernetes 或者 docker swarm 容器编排工具一起使用。

容器编排涉及到的内容比较多,感兴趣的同学可以参考以下资料:

Go语言的开源项目

1.Docker项目

网址为 。

介绍:Docker是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。Docker可以在一台物理服务器上快速运行一个或多个实例。例如,启动一个Cent OS操作系统,并在其内部命令行执行指令后结束,整个过程就像自己在操作系统一样高效。

2.golang项目

网址为 。

介绍:Go语言的早期源码使用C语言和汇编语言写成。从Go 1.5版本自举后,完全使用Go语言自身进行编写。Go语言的源码对了解Go语言的底层调度有极大的参考意义,建议希望对Go语言有深入了解的读者读一读。

3.Kubernetes项目

网址为 。

介绍:Google公司开发的构建于Docker之上的容器调度服务,用户可以通过Kubernetes集群进行云端容器集群管理。

4.etcd项目

网址为 。

介绍:一款分布式、可靠的KV存储系统,可以快速进行云配置。

5.beego项目

网址为 。

介绍:beego是一个类似Python的Tornado框架,采用了RESTFul的设计思路,使用Go语言编写的一个极轻量级、高可伸缩性和高性能的Web应用框架。

6.martini项目

网址为 。

介绍:一款快速构建模块化的Web应用的Web框架。

7.codis项目

网址为 Labs/codis。

介绍:国产的优秀分布式Redis解决方案。

8.delve项目

网址为 。

介绍:Go语言强大的调试器,被很多集成环境和编辑器整合。

golang有没有好的开源游戏框架

Go作为近两年迅速流行起来的编程语言始终致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,让开发者使用起来感觉异常快速且简单。相信有意向深入学习Go语言的小伙伴都在研究Go的开源项目,今天我就把自己觉得不错的6个Go开源项目推荐给大家,希望大家能获得收获和成长。

推荐一:kubernetes 【Star:44418】

Kubernetes基于Docker,其目的是让用户通过Kubernetes集群来进行云端容器集群的管理,而无需用户进行复杂的设置工作。系统会自动选取合适的工作节点来执行具体的容器集群调度处理工作。

推荐二:etcd 【Star:21408】

etcd是由CoreOS开发并维护键值存储系统,它使用Go语言编写,并通过Raft一致性算法处理日志复制以保证强一致性。目前,Google的容器集群管理系统Kubernetes、开源PaaS平台Cloud Foundry和CoreOS的Fleet都广泛使用了etcd。

推荐三:deis 【Star:6093】

Deis是一个基于Docker和CoreOS的开源PaaS平台,旨在让部属和管理服务器上的应用变得轻松容易。它可以运行在AWS、GCE以及Openstack平台下。

推荐四:flynn 【Star:6936】

Flynn是一个使用Go语言编写的开源PaaS平台,可自动构建部署任何应用到Docker容器集群上运行。Flynn项目受到Y Combinator的支持,目前仍在开发中,被称为是下一代的开源PaaS平台。

推荐五:lime 【Star:13775】

相对上面的几款Go语言在云端和服务器端之外,Lime则显得比较特殊。Lime,则是一款用Go语言写的桌面编辑器程序,被看做是著名编辑器Sublime Text的开源实现。

六:revel 【Star:10508】

Revel是一个高生产力的Go语言Web框架。Revel框架支持热编译,当编辑、保存和刷新源码时,Revel会自动编译代码和模板;全栈特性,支持路由、参数解析、缓存、测试、国际化等功能。

如何使用Go语言是操作Docker

Docker 提供了一个与 Docker 守护进程交互的 API (称为Docker Engine API),我们可以使用官方提供的 Go 语言的 SDK 进行构建和扩展 Docker 应用程序和解决方案。

转自:

整理:地鼠文档

通过下面的命令就可以安装 SDK 了:

该部分会介绍如何使用 Golang + Docker API 进行管理本地的 Docker。

第一个例子将展示如何运行容器,相当于 docker run docker.io/library/alpine echo "hello world" :

还可以在后台运行容器,相当于 docker run -d bfirsh/reticulate-splines :

列出正在运行的容器,就像使用 docker ps 一样:

如果是 docker ps -a ,我们可以通过修改 types.ContainerListOptions 中的 All 属性达到这个目的:

通过上面的例子,我们可以获取容器的列表,所以在这个案例中,我们可以去停止所有正在运行的容器。

通过指定容器的 ID,我们可以获取对应 ID 的容器的日志:

获取本地所有的镜像,相当于 docker image ls 或 docker images :

拉取指定镜像,相当于 docker pull alpine :

除了公开的镜像,我们平时还会用到一些私有镜像,可以是 DockerHub 上私有镜像,也可以是自托管的镜像仓库,比如 harbor 。这个时候,我们需要提供对应的凭证才可以拉取镜像。

值得注意的是:在使用 Docker API 的 Go SDK 时,凭证是以明文的方式进行传输的,所以如果是自建的镜像仓库,请务必使用 HTTPS !

我们可以将一个已有的容器通过 commit 保存成一个镜像:

当然,除了可以管理本地的 Docker , 我们同样也可以通过使用 Golang + Docker API 管理远程的 Docker 。

默认 Docker 是通过非网络的 Unix 套接字运行的,只能够进行本地通信( /var/run/docker.sock ),是不能够直接远程连接 Docker 的。

我们需要编辑配置文件 /etc/docker/daemon.json ,并修改以下内容(把 192.168.59.3 改成你自己的 IP 地址),然后重启 Docker :

创建 client 的时候需要指定远程 Docker 的地址,这样就可以像管理本地 Docker 一样管理远程的 Docker 了:

现在已经有很多可以管理 Docker 的产品,它们便是这样进行实现的,比如: portainer 。

什么是 docker 容器技术

 Docker是什么?

简单得来说,Docker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级别的隔离; 它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来。

Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台。由两部分组成:

Docker Engine: 一个便携式、轻量级的运行环境和包管理器。(注* 单OS vs 单线程,是不是跟NodeJS特别像?)

Docker Hub: 为创建自动化工作流和分享应用创建的云服务组成。(注* 云端镜像/包管理 vs npm包管理,是不是跟npm特别像?)

从2013年3月20日,第一个版本的Docker正式发布到 2014年6月Docker 1.0 正式发布,经历了15个月。 虽然发展历程很短,但Docker正在有越来越流行的趋势。

其实Container技术并非Docker的创新,HeroKu, NodeJitsu 等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的。

好的部分

Docker相对于VM虚拟机的优势十分明显,那就是轻量和高性能和便捷性, 以下部分摘自:KVM and Docker LXC Benchmarking with OpenStack

运行时的性能可以获取极大提升(经典的案例是提升97%)

管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。

敏捷

像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。

灵活

将应用和系统“容器化”,不添加额外的操作系统,

轻量

你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。

便宜

开源的,免费的,低成本的。由现代Linux内核支持并驱动。注* 轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。

生态系统

正在越来越受欢迎,只需要看一看Google的趋势就知道了,docker or LXC.

还有不计其数的社区和第三方应用。

云支持

不计其数的云服务提供创建和管理Linux容器框架。


当前文章:运行go语言的免费容器,go语言运行环境
本文路径:http://chengdu.cdxwcx.cn/article/hsojcs.html