如何使用go语言是操作docker

author author     2023-04-18     258

关键词:

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

转自:https://juejin.cn/post/6944730766052065288

整理:地鼠文档 www.topgoer.cn

通过下面的命令就可以安装 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语言系列1.3go语言简介:go语言开发的知名项目

下面列举的是原生使用Go语言进行开发的部分项目。1、DockerDocker是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。Docker可以在一台物理服务器上快速运行一个或多个实例。例如,... 查看详情

使用docker镜像构建go语言环境

1.安装Docker我当前使用的系统环境是CentOS7,安装Docker使用的命令是yuminstalldocker*。至于其它系统,可以到百度查找其对应的安装方式。2.配置Docker镜像仓库的地址目前来说,直接访问Docker官网的DockerHub会比较慢,不过幸好现在国... 查看详情

go语言与docker操作redis

参考技术A首选,如果之前使用过redis容器,我们需要先remove掉之前的容器然后创建redis容器,并运行进入redis容器中接着我们通过redis-cli连接测试使用redis服务setex指令可以设置数据存在的时间,setexkeysecondvalueMSET一次设置多个key-v... 查看详情

docker基本介绍和操作(代码片段)

...2.0授权协议开源,主要项目代码在GitHub上进行维护。Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgrou 查看详情

go语言gdb调试踩坑

整个是一个docker环境docker版本:1.12.1,镜像是我自己做的基于ubuntu:14.04.05.容器操作系统版本:Ubuntu14.04.5LTSgo版本:1.6.3在gdb中执行run命令出错! 错误输出:warning:Errordisablingaddressspacerandomization:Operationnotpermitted环境:docker  查看详情

什么是docker

...友采纳 参考技术BDocker是世界领先的软件容器平台。Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由 查看详情

docker之快速部署gogsgit(代码片段)

...造一个最简单、最快速和最轻松的方式搭建自助Git服务。使用Go语言开发使得Gogs能够通过独立的二进制分发,并且支持Go语言支持的所有平台,包括Linux、MacOSX、Windows以及ARM平台。为什么使用gogsgogs轻量gogs自带gitupdategogs操作简洁... 查看详情

docker基础学习

一、什么是Docker1、什么是DockerDocker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级... 查看详情

docker基础学习

一、什么是Docker1、什么是DockerDocker是一个由GO语言写的程序运行的“容器”(Linux containers, LXCs); 目前云服务的基石是操作系统级别的隔离,在同一台物理服务器上虚拟出多个主机。Docker则实现了一种应用程序级... 查看详情

docker_1

ps:本文仅供自己学习使用,文本来源于docker从入门到实践一书.1、什么是docker??Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚... 查看详情

docker简介:

...介:Docker:Docker是一个运行自己应用程序的封套,他最初使用的是go语言,就相当于是加在LXC上的管道,允许开发者在更高层次的概念上工作.Docker也是一个云计算平台,他利用Linux的LXC、AUFU、Go语言、cgroup实现了自愿的独立,可... 查看详情

docker技术学习(代码片段)

...dotCloud公司内部的一个业余项目,基于Google公司推出的Go语言实现。Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker的基础是Linux容器(LXC)等技术。在LXC的基础上Docker进行了进一步的封装,让用户不需要去关心容... 查看详情

15.go语言“避坑”与技巧(代码片段)

...本身的使用技巧进行总结和归纳。goroutine(Go语言并发)如何使用才更加高效?Go语言原生支持并发是被众人津津乐道的特性。goroutine早期是Inferno操作系统的一个试验性特性,而现在这个特性与操作系统一起,将开发变得越来越... 查看详情

go语言如何读取excel测试数据,简单易学(代码片段)

...多的技术团队用go语言做自动化测试。这篇文章讲go语言如何读取excel当中的测试数据。Excelize是Go语言编写的用于操作Excel文档的库,现在我们用xlsx格式的excel文件,都可以通过excelize库来操作。Excelize除了支持数据操作... 查看详情

docker基础--概念扫盲(代码片段)

学习使用Docker之前,有必要做一下功课,对相应的概念有一个基本、清晰的了解,这样也有助于帮助自己更好的使用。这篇文章主要介绍以下知识:什么是容器?Docker是什么?Docker与传统虚拟机对比Docker基本概念扫盲:镜像(Image)... 查看详情

go语言文件的创建与打开实例分析

...下:文件操作是个很重要的话题,使用也非常频繁,熟悉如何操作文件是必不可少的。Golang对文件的支持是在ospackage里,具体操作都封装在typeFilestruct{}结构体中。一、funcOpen(namestring)(file*File,errerror)再简单不过了,给一个路径给... 查看详情

使用go语言灵活批量ssh登录服务器执行操作

摘要:在工作中时常需要登录服务器做一系列操作,每次输入sshxxx总是很麻烦。这时候为什么不考虑写一个通用的小脚本呢?go语言是一门新兴语言,能够在很多地方发挥总用。初学go语言,做了这么一个小工具,也算是练练手了... 查看详情

docker简单操作

...流行的Linux机器上,也可以实现虚拟化。  容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),更重要的是容器性能开销极低。二、docker的三个基本概念镜像(Image):Docker镜像(Image),就相当于是一个root... 查看详情