kubernetes1.3:操作Docker
Kubernetes对Docker的管理是通过一个第三方组件实现的。在Kubernetes1.2中这个第三方组件就是go-dockerclient,这是一个GO语言写的docker客户端,支持Docker remote API,这个项目在https://github.com/fsouza/go-dockerclient中;在Kubernetes1.3中直接使用docker公司提供的client来实现,通过这个client可以实现同Docker Deamon之间的通讯,这个客户端项目在https://github.com/docker/engine-api/中,感兴趣的话可以去看看。
下面是Docker版本同API版本对应关系:
|
Docker版本 |
API版本 |
|
1.12x |
1.24 |
|
1.11.x |
1.23 |
|
1.10.x |
|
|
1.9.x |
|
|
1.8.x |
|
|
1.7.x |
|
|
1.6.x |
|
|
1.5.x |
|
|
1.4.x |
|
|
1.3.x |
|
|
1.2.x |
下面表格第一列是Docker官网上API 1.24版本,第二列是API使用方式,第三列是Kubernetes1.2中使用到的Docker API,第四列是Kubernetes1.3中使用到的Docker API,从这个列表就可以看到kuberneters13都调用了哪些Docker API接口,以及可以实现Docker哪些功能。
|
Docker API 1.24 |
使用方式 |
Kubernetes1.2 |
Kubernetes1.3 |
|
Get container stats based on resource usage |
GET /containers/(id)/stats |
|
|
|
Update a container |
POST /containers/(id)/update |
|
|
|
Rename a container |
POST /containers/(id)/rename |
|
|
|
Retrieving information about files and folders in a container |
HEAD /containers/(id)/archive |
|
|
|
List containers |
GET /containers/json |
√ |
√ |
|
Inspect a container |
GET /containers/(id)/json |
√ |
√ |
|
Inspect changes on a container’s filesystem |
GET /containers/(id)/changes |
√ |
√ |
|
Create a container |
POST /containers/create |
√ |
√ |
|
Start a container |
POST /containers/(id)/start |
√ |
√ |
|
Stop a container |
POST /containers/(id)/stop |
√ |
√ |
|
Restart a container |
POST /containers/(id)/restart |
|
|
|
Pause a container |
POST /containers/(id)/pause |
|
|
|
Unpause a container |
POST /containers/(id)/unpause |
|
|
|
List processes running inside a container |
GET /containers/(id)/top |
|
|
|
Kill a container |
POST /containers/(id)/kill |
√ |
√ |
|
Remove a container |
DELETE /containers/(id) |
√ |
√ |
|
Get an archive of a filesystem resource in a container |
GET /containers/(id)/archive |
|
|
|
Extract an archive of files or folders to a directory in a container |
PUT /containers/(id)/archive |
|
|
|
Copy files or folders from a container |
POST /containers/(id)/copy,以后会被删除掉,使用archive代替 |
|
|
|
Wait a container |
POST /containers/(id)/wait |
|
|
|
Create a new image from a container’s changes |
POST /commit |
|
|
|
Attach to a container |
POST /containers/(id)/attach |
√ |
√ |
|
Attach to a container (websocket) |
GET /containers/(id or name)/attach/ws |
|
|
|
Get container logs |
GET /containers/(id)/logs |
√ |
√ |
|
Resize a container TTY |
POST /containers/(id)/resize |
|
|
|
Export a container |
GET /containers/(id)/export |
|
|
|
List Images |
GET /images/json |
√ |
√ |
|
Inspect an image |
GET /images/(name)/json |
√ |
√ |
|
Get the history of an image |
GET /images/(name)/history |
|
√ |
|
Push an image on the registry |
POST /images/(name)/push |
|
|
|
Build image from a Dockerfile |
POST /build |
|
|
|
Create an image |
POST /images/create |
√ |
√ |
|
Load a tarball with a set of images and tags into docker |
POST /images/load |
|
|
|
Get a tarball containing all images in a repository |
GET /images/(name)/get |
|
|
|
Get a tarball containing all images |
GET /images/get |
|
|
|
Tag an image into a repository |
POST /images/(name)/tag |
|
|
|
Remove an image |
DELETE /images/(name) |
√ |
√ |
|
Search images |
GET /images/search |
|
|
|
Monitor Docker’s events |
GET /events |
|
|
|
Show the docker version information |
GET /version |
√ |
√ |
|
Display system-wide information |
GET /info |
√ |
√ |
|
Ping the docker server |
GET /_ping |
|
|
|
List volumes |
GET /volumes |
|
|
|
Create a volume |
POST /volumes/create |
|
|
|
Inspect a volume |
GET /volumes/(name) |
|
|
|
Remove a volume |
DELETE /volumes/(name) |
|
|
|
List networks |
GET /networks |
|
|
|
Inspect network |
GET /networks/<network-id> |
|
|
|
Create a network |
POST /networks/create |
|
|
|
Remove a network |
DELETE /networks/(id) |
|
|
|
Connect a container to a network |
POST /networks/(id)/connect |
|
|
|
Disconnect a container from a network |
POST /networks/(id)/disconnect |
|
|
|
Check auth configuration |
POST /auth |
|
|
|
Exec Create |
POST /containers/(id)/exec |
√ |
√ |
|
Exec Start |
POST /exec/(id)/start |
√ |
√ |
|
Exec Resize |
POST /exec/(id)/resize |
|
|
|
Exec Inspect |
GET /exec/(id)/json |
√ |
√ |
|
List plugins |
GET /plugins |
|
|
|
Install a plugin |
POST /plugins/pull?name=<plugin name> |
|
|
|
Inspect a plugin |
GET /plugins/(plugin name) |
|
|
|
Enable a plugin |
POST /plugins/(plugin name)/enable |
|
|
|
Disable a plugin |
POST /plugins/(plugin name)/disable |
|
|
|
Remove a plugin |
DELETE /plugins/(plugin name) |
|
|
|
List nodes |
GET /nodes |
|
|
|
Inspect a node |
GET /nodes/<id> |
|
|
|
Remove a node |
DELETE /nodes/<id> |
|
|
|
Update a node |
POST /nodes/<id>/update |
|
|
|
Inspect swarm |
GET /swarm |
|
|
|
Initialize a new swarm |
POST /swarm/init |
|
|
|
Join an existing swarm |
POST /swarm/join |
|
|
|
Leave a swarm |
POST /swarm/leave |
|
|
|
Update a swarm |
POST /swarm/update |
|
|
|
List services |
GET /services |
|
|
|
Create a service |
POST /services/create |
|
|
|
Remove a service |
DELETE /services/(id or name) |
|
|
|
Inspect one or more services |
GET /services/(id or name) |
|
|
|
Update a service |
POST /services/(id or name)/update |
|
|
|
List tasks |
GET /tasks |
|
|
|
Inspect a task |
GET /tasks/(task id) |
|
|
从表格中可以看到,Kubernetes1.3中调用了Docker的Get the history of an image接口,调用这个接口的目的是获取镜像的详细历史信息。
另外从表格中可以看到,Kubernetes没有使用到Docker的网络接口,也没有使用到Docker的卷接口,原因是Kubernetes自己定义了Service和POD,自己实现了POD之间的网络和挂载到POD上的卷。
从表格中也可以看到,Kubernetes对Docker容器的管理只有很少的功能,甚至都没有使用到Docker的重启接口,还是因为Kubernetes自己定义的POD,Kubernetes以POD为基本操作单元,而且是Kubernetes从容器集群管理角度设计的,所以不存在对POD里面单个Docker容器的重启操作。
那么我们可以用下面这张图来把POD和容器之间的关系形象化,此图仅供说明问题时的参考,并无实际意义。
我们可以把POD看作是机器里面的操作系统,把容器看作是里面的进程,在操作系统内部进程间是可以通过IPC(Inter-Process Communication)进行通讯的,不同操作系统之间的进程是通过操作系统IP和端口进行通讯的,那么对应到POD和容器,就变成了POD内部容器间事可以通过IPC(Inter-Process Communication)进行通讯的,不同POD之间的容器是通过POD IP和端口进行通讯的。从集群的角度来考虑问题,Kubernetes基本操作单元是POD,不需要关注到POD中的容器,那么我们可以想象一下,如果我们要按照虚拟机的使用方式来使用容器,那样的话应该如何使用Kubernetes呢?可以看下面的图:
这样我们就实现了像虚拟机那样使用容器,我们可以认为POD就是一个虚拟机,只不过在这个虚拟机中只有一个容器。但是如果要对这个虚拟机进行操作的时候我们发现问题来了,从前面的表格中可以看到,Kubernetes对Docker容器的管理只有很少的功能,没有使用到Docker的重启接口,但是如果把容器当作虚拟机用,必然要使用重启功能,抛开Kubernetes的设计理念,我们自己可以扩展Kubernetes对POD重启的实现,实现把容器当作虚拟机来使用的需求。
kubernetes1.3:操作Docker的更多相关文章
- 操作docker容器
Docker容器时镜像的一个运行实例,而镜像是静态的只读文件,容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统(包括内核.应用运行的环境和其他系统环境)和跑在上面的应用,那么D ...
- java操作docker示例(docker-java)
1.首先要修改docker服务器的 /usr/lib/systemd/system/docker.service,加入紫色框的配置 2.下载docker-java 的github源码 git clon ...
- C#.Net Core 操作Docker中的redis数据库
做软件开发的人,会在本机安装很多开发时要用到的软件,比如数据库,有MS SQL Server,MySQL,等,如果每种数据库都按照在本机确实有点乱,这个时候我们就想用虚拟机来隔离,这样就不会扰乱本机一 ...
- Docker实战(二)之操作Docker容器
容器是Docker的另外一个核心概念.简单来说,容器是镜像的一个运行实例.所不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层.如果认为虚拟机是模拟运行的一整套操作系统系统(包括内核,应 ...
- Docker 容器高级操作[Docker 系列-3]
关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料. 上篇文章向读者介绍了一个 Nginx 的例子,对于 Nginx 这样一个容器而言,当它启动成功后,我们 ...
- 使用EF操作Docker中的Mysql实例
为啥我会选择mysql呢?因为我的服务器配置较低,而SqlServer在docker中的实例,服务器的运行内存应当保持在2G+,我没有这个条件,它会爆出这样的错误 sqlservr: This pro ...
- Docker SDK api操作Docker
下载包 go get "github.com/docker/docker/api/types" go get "github.com/docker/docker/clie ...
- kubernetes1.4新特性:支持Docker新特性
(一)背景资料 在Kubernetes1.2中这个第三方组件就是go-dockerclient,这是一个GO语言写的docker客户端,支持Dockerremote API,这个项目在https:// ...
- Docker - 从零开始到操作
从零开始 介绍Docker的基本概念和命令,并给出简单使用示例和参考信息. Docker - 基础讲义 http://www.cnblogs.com/anliven/p/6281373.html Do ...
随机推荐
- chrome屏蔽https广告
“设置” -> “高级” -> 系统/“打开代理设置” -> “安全” -> “受限站点” -> “添加” 好了
- poj1160 动态规划
#include<stdio.h> #include<string.h> #define INF 999999999 #define Min(x,y) (x<y?x:y) ...
- Http中GET和POST请求的区别
https://mp.weixin.qq.com/s/_oLnkDQn3TE7XdFWCT5Img GET请求 GET /books/?sex=man&name=Professional HT ...
- _mysql_exceptions.IntegrityError: (1062, "Duplicate entry, Python操作MySQL数据库,插入重复数据
[python] view plain copy sql = "INSERT INTO test_c(id,name,sex)values(%s,%s,%s)" param = ...
- 面试Nginx的几个常见问题(
1.Nginx 服务器上的 Master 和 Worker 进程分别是什么 Master 进程:读取及评估配置和维持 Worker 进程:处理请求 2.怎么添加模块? Firstly, you h ...
- applyMiddleware源码中的闭包
闭包都是个老掉牙的话题了,这次又提起,是因为重看Redux源码时发现了applyMiddleware里的用法很巧妙.我们先看一个简单的例子. var a = (num) => num + 1 v ...
- 使用session实现一次性验证码
在登录页面和各种页面,会看到有验证码输入,这样做的目的是为了防止密码猜测工具破解密码,保护了用户密码安全,验证码只能使用一次,这样就给密码猜测工具带来了很大的困难,基本上阻断了密码猜测工具的使用. 可 ...
- Vue. 之 Element table 单元格内容隐藏
Vue. 之 Element table 单元格内容隐藏 在table显示数据时,若某个单元格的内容过多,需要进行隐层,在这一列的单元格属性添加::show-overflow-tooltip=&quo ...
- 查漏补缺·补丁计划
趁着神志清醒赶紧写一下. 多次考试暴露出各种问题.新的知识点先不去搞了,最近多做一些不擅长的类型的题查漏补缺一下吧. 唔,首先是比较考验思维的类型,我智商太低又刷题少不会什么套路,只能最近赶紧赶一下进 ...
- iostat统计信息
用途:报告中央处理器(CPU)统计信息和整个系统.适配器.tty 设备.磁盘和 CD-ROM 的输入/输出统计信息. 语法:iostat [ -c | -d ] [ -k ] [ -t | -m ] ...