什么是docker容器技术?docker容器技术指Docker是一个由GO语言写的程序运行的“容器”(Linux containers,LXCs)
Docker则实现了一种应用程序级别的隔离,它改变我们基本的开发、操作单元,由直接操作虚拟主机(VM),转换到操作程序运行的“容器”上来 。
Docker是为开发者和系统管理员设计的,用来发布和运行分布式应用程序的一个开放性平台 。由两部分组成:
Docker Engine: 一个便携式、轻量级的运行环境和包管理器 。(注* 单OS vs 单线程)
Docker Hub: 为创建自动化工作流和分享应用创建的云服务组成 。(注* 云端镜像/包管理 vs npm包管理,是不是跟npm特别像?)
从2013年3月20日,第一个版本的Docker正式发布到 2014年6月Docker 1.0 正式发布,经历了15个月 。虽然发展历程很短,但Docker正在有越来越流行的趋势 。
其实Container技术并非Docker的创新 , HeroKu, NodeJitsu 等云服务商都采用了类似这种轻量级的虚拟化技术,但Docker是第一个将这这种Container技术大规模开源并被社区广泛接受的 。
如何使用Go语言是操作DockerDocker 提供了一个与 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。
Go语言的应用Go语言由Google公司开发go语言在容器上运行 , 并于2009年开源go语言在容器上运行,相比Java/Python/C等语言 , Go尤其擅长并发编程,性能堪比C语言,开发效率肩比Python,被誉为“21世纪go语言在容器上运行的C语言” 。
Go语言在云计算、大数据、微服务、高并发领域应用应用非常广泛 。BAT大厂正在把Go作为新项目开发的首选语言 。
推荐阅读
- 直播设备买完要多少钱呢,直播买设备需要多少钱
- 拍摄山歌用什么软件,山歌哪里拍的
- 06年pc即时战单机游戏,06年经典游戏
- redis的优点对比缺点,redis优点和缺点
- go语言消息通讯 golang 消息
- 如何营销清漆,如何推销油漆
- 第一个模拟飞行的游戏,第一个模拟飞行的游戏有哪些
- 如何把oracle数据库转移到mysql,将oracle数据导入mysql
- java分页导航条代码 java分页实现原理