如何使用Go语言是操作Docker

Python020

如何使用Go语言是操作Docker,第1张

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 。

首选,如果之前使用过redis容器,我们需要先remove掉之前的容器

然后创建redis容器,并运行

进入redis容器中

接着我们通过 redis-cli 连接测试使用 redis 服务

setex指令 可以设置数据存在的时间, setex key second value

MSET 一次设置多个key-value

MGET一次获取多个key-value

HGET

HGETALL

Hlen和hexist

Lpush 和 Lrange

Lpop和Rpop 从链表取出并移走数据

删除链表所有数据 DEL

字符串无序 不能重复

从连接池中Get出一个conn连接

Docker是一个使用Go语言开发的开源的应用容器引擎,让开发者可以打包他们的应用以及依赖到一个可移植的容器中,然后发布到任何流行的机器上。Docker的迅猛发展和全新理念,席卷了整个IT界,成为云时代的一颗新星。

Docker相比于传统虚拟化方式具有更多的优势:

我们可以从下面这张表格很清楚地看到容器相比于传统虚拟机的特性的优势所在:

企业使用一项技术是为了解决当前企业环境中存在的某个痛点。目前整个软件行业存在着以下几个痛点。

(1)软件更新发布及部署低效,过程繁琐且需要人工介入。

(2)环境一致性难以保证。

(3)不同环境之间迁移成本太高。

Docker在很大程度上解决了上述问题。

首先, Docker的使用十分简单,从开发的角度来看就是“三步走”:构建、运输、运行。其中,关键步骤是构建环节,即打包镜像文件。但是从测试和运维的角度来看,那就只有两步:复制、运行。有了这个镜像文件,想复制到哪里运行都可以,完全和平台无关。

Docker这种容器技术隔离出了独立的运行空间,不会和其他应用争用系统资源,不需要考虑应用之间的相互影响。

其次, 因为在构建镜像时就处理完了服务程序对于系统的所有依赖,所以在使用时,可以忽略原本程序的依赖以及开发语言。对测试和运维人员而言,可以更专注于自己的业务内容。

最后, Docker为开发者提供了一种开发环境的管理办法,帮助测试人员保证环境的同步,为运维人员提供了可移植的标准化部署流程。

动力节点的 Docker入门教程,将带你一步一步从基础到实践学习Docker,了解什么是Docker,Docker的核心思想、核心组件诸如镜像,仓库,容器等,通过大量的实际操作循序渐进地介绍Docker,带你轻松玩转Docker,Docker技术也是当今IT从业人员的必备技能之一。

在线学习:https://www.bilibili.com/video/BV1QA411L7B5

资料下载:http://www.bjpowernode.com/?toutiao

•001.Docker视频教程:虚拟化技术发展史

•002.Docker视频教程:虚拟化技术是什么

•003.Docker视频教程:虚拟化技术的分类

•004.Docker视频教程:虚拟化技术的优缺点

•005.Docker视频教程:容器技术的发展

•006.Docker视频教程:Docker的发展 历史

•007.Docker视频教程:Docker是什么

•008.Docker视频教程:容器和虚拟机的区别(1)

•009.Docker视频教程:容器和虚拟机的区别(2)

•010.Docker视频教程:为什么要使用Docker视频教程:Docker

•011.Docker视频教程:Docker的版本

•012.Docker视频教程:Docker的安装

•013.Docker视频教程:Docker服务启动

•014.Docker视频教程:Docker服务信息

•015.Docker视频教程:Docker使用初体验-Docker的运行机制

•016.Docker视频教程:Docker使用初体验-Docker官方镜像仓库

•017.Docker视频教程:Docker使用初体验-Docker官方镜像下载

•018.Docker视频教程:Docker使用初体验-Docker镜像启动运行

•019.Docker视频教程:Docker使用初体验-访问容器中的Tomcat服务

•020.Docker视频教程:Docker使用初体验-Docker的网络访问机制

•021.Docker视频教程:Docker使用初体验-进入Docker容器内部

•022.Docker视频教程:Docker使用初体验-补充说明

•023.Docker视频教程:Docker的体系架构(1)

•024.Docker视频教程:Docker的体系架构(2)r

•025.Docker视频教程:Docker核心组件

•026.Docker视频教程:Docker核心组件-镜像的基本概念

•027.Docker视频教程:Docker核心组件-镜像的组成结构

•028.Docker视频教程:Docker核心组件-镜像的日常操作(1)

•029.Docker视频教程:Docker核心组件-镜像的日常操作(2)

•030.Docker视频教程:Docker核心组件-镜像的日常操作(3)

•031.Docker视频教程:Docker核心组件-镜像的日常操作(4)

•032.Docker视频教程:Docker核心组件-容器的基本概念

•033.Docker视频教程:Docker核心组件-容器的日常操作(1)

•034.Docker视频教程:Docker核心组件-容器的日常操作(2)

•035.Docker视频教程:Docker核心组件-仓库的基本概念

•036.Docker视频教程:Docker核心组件-官方仓库与阿里云仓库

•037.Docker视频教程:Docker核心组件-仓库的日常操作(1)

•038.Docker视频教程:Docker使用示例-安装MySQL

•039.Docker视频教程:Docker使用示例-访问与操作MySQL容器

•040.Docker视频教程:Docker使用示例-安装Nginx

•041.Docker视频教程:Docker使用示例-访问Nginx容器

•042.Docker视频教程:Docker使用示例-容器Nginx部署静态网站

•043.Docker视频教程:Docker使用示例-安装Zookeeper

•044.Docker视频教程:Docker使用示例-安装ActiveMQ

•045.Docker视频教程:认识Dockerfile文件

•046.Docker视频教程:Dockerfile的基本结构

•047.Docker视频教程:Dockerfile常用指令

•048.Docker视频教程:自定义JDK镜像Dockerfile文件

•049.Docker视频教程:自定义JDK镜像构建与运行测试

•050.Docker视频教程:自定义Tomcat镜像Dockerfile文件

•051.Docker视频教程:自定义Tomcat镜像构建与运行测试

•052.Docker视频教程:自定义MySQL镜像Dockerfile文件

•053.Docker视频教程:自定义MySQL镜像构建与运行测试

•054.Docker视频教程:自定义Redis镜像Dockerfile文件

•055.Docker视频教程:自定义Redis镜像构建与运行测试(1)

•056.Docker视频教程:自定义Redis镜像构建与运行测试(2)

•057.Docker视频教程:阿里云容器镜像仓库

•058.Docker视频教程:阿里云镜像仓库管理后台

•059.Docker视频教程:发布镜像到阿里云镜像仓库(1)

•060.Docker视频教程:发布镜像到阿里云镜像仓库(2)

•061.Docker视频教程:发布镜像到阿里云镜像仓库(3)

•062.Docker视频教程:Docker Hub官方镜像加速

•063.Docker视频教程:Docker部署SpringBoot项目-介绍

•064.Docker视频教程:Docker部署SpringBoot项目-本地测试

•065.Docker视频教程:Docker部署SpringBoot项目-基本流程

•066.Docker视频教程:Docker部署SpringBoot项目-打Jar包与War包

•067.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像构建

•068.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像运行与测试(1)

•069.Docker视频教程:Docker部署SpringBoot项目-jar项目的镜像运行与测试(2)

•070.Docker视频教程:Docker部署SpringBoot项目-war项目的镜像构建与运行

•071.Docker视频教程:Docker部署SpringBoot项目-war项目的测试

•072.Docker视频教程:Docker保存新镜像

•073.Docker视频教程:Docker保存的新镜像数据验证