Docker Machine怎么应用


今天小编给大家分享一下Docker Machine怎么应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。docker 与 docker machine 的区别docker是一个 client-server 架构的应用,人家是有官称的:docker engine。docker 只是大家对 docker engine 的昵称,当然 docker 还有其他的意思,比如一家公司的名称。简单起见,本文中的 docker 等同于 docker engine。提到 docker 我们必须要知道它包含了三部分内容:docker daemon一套与 docker daemon 交互的 rest api一个命令行客户端下图很清晰的展示了它们之间的关系:docker machine则是一个安装和管理 docker 的工具。它有自己的命令行工具:docker-machine。docker daemon socket既然 docker 客户端要和 docker daemon 通过 rest api 通信,那就让我们看看它们可以采用的方法有哪些:unix socketsystemd socket activationtcp我们可以简单的把 1 和 2 理解成一种方式,就是同一台主机上的进程间通信。至于 3 则很好理解:通过 tcp 协议进行跨网络的通信。既然 1 和 2 用于同一台机器上的进程间通信,那么我们可以猜想:安装在同一主机上的 docker 客户端和 docker daemon 就是通过这种方式来通信的。事实也正是如此,我们可以查看安装 docker 时默认添加的 docker daemon 启动配置,打开文件 /etc/systemd/system/multi-user.target.wants/docker.service:图中的 -h 用来指定 docker daemon 监听的 socket,此处指定的类型为 system socket activation。使用类型 1 和 2 进行通信需要进程具有 root 权限。这也是 docker 安装过程中会自动创建一个具有 root 权限的用户和用户组的主要原因。新创建的用户和用户组名称为 docker,建议大家把需要操作 docker 的用户都加入到这个组中,否则当你执行命令时就会碰到下图显示的问题:我们还可以同时指定多个 -h 参数让 docker daemon 同时监听不同的 socket 类型。比如要添加对 tcp 端口 2376 的监听就可以使用下面的命令行参数:运行上面的命令,然后查看本机监听的端口:此时我们就可以从远程主机上的 docker 客户端访问这部主机的 2376 端口了。docker_host 环境变量docker 客户端默认的配置是访问本机的 docker daemon,当你指定了 docker_host 变量后,docker 客户端会访问这个变量中指定的 docker daemon。让我们回顾一下 docker-machine env 命令:原来我们在中执行的 $ eval $(docker-machine env krdevdb) 命令就是在设置 docker_host 环境变量。解决安全问题我们的 docker daemon 监听了 tcp 端口,糟糕的是此时我们没有做任何的保护措施。因此任何 docker 客户端都可以通过 tcp 端口与我们的 docker daemon 交互,这显然是无法接受的。解决方案是同时启用 docker daemon 和 docker 客户端的 tls 证书认证机制。这样 docker daemon 和 docker 客户端之间的通信会被加密,并且只有安装了特定证书的客户端才能够与对应的 docker daemon 交互。至此本文的铺垫部分终于结束了,接下来我们将讨论 docker machine 相关的内容。docker machine create 命令根据 docker machine 驱动的不同,create 命令执行的操作也不太一样,但其中有两步是我们在这里比较关心的:docker-machine 会在您指定的主机上执行下面的操作:安装 docker,并进行配置。生成证书保护 docker 服务的安全。配置 docker daemondocker 的安装过程并没有什么秘密,这里不再赘述。我们重点关注 docker daemon 的配置。仔细观察我们会发现,通过 do 香港云主机cker-machine 安装的 docker 在 /etc/systemd/system 目录下多出了一个 docker 相关的目录:docker.service.d。这个目录中只有一个文件 10-machine.conf:好吧,-h tcp://0.0.0.0:2376 出现在这里并没有让我们太吃惊。在我们做了巨多的铺垫之后,你应该觉得这是理所当然才是。–tls 开头的几个参数主要和证书相关,我们会在后面的安全设置中详细的介绍它们。让人多少有些疑惑的地方是上图中的 /usr/bin/docker。当前最新版本的 docker machine 还在使用旧的方式设置 docker daemon,希望在接下来的版本中会有所更新。这个配置文件至关重要,因为它会覆盖 docker 默认安装时的配置文件,从而以 docker machine 指定的方式启动 docker daemon。至此我们有了一个可以被远程访问的 docker daemon。生成证书我们在 docker daemon 的配置文件中看到四个以 –tls 开头的参数,分别是 –tlsverify、–tlscacert、–tlscert和 –tlskey。其中的 –tlsverify 告诉 docker daemon 需要通过 tls 来验证远程客户端。其它三个参数分别指定了一个 pem 格式文件的路径,按照它们指定的文件路径去查看一下:对比一下手动安装的 docker,会发现 /etc/docker 目录下并没有这三个文件。毫无疑问它们是 docker machine 生成的,主要是为了启用 docker daemon 的 tls 验证功能。关于 tls,笔者在《局域网内部署 docker registry》一文中略有涉及,当时是手动配置的证书,感兴趣的朋友可以参考一下。现在让我们回到安装了 docker machine 的主机上。查看 /home/nick/.docker/machines/krdevdb 目录,发现了一些同名的文件(ca.pem、server-key.pem 和 server.pem),和主机 drdevdb 上的文件对比一下,发现它们是一样的!让我们再来观察一下这幅图:除了我们关注过的 docker_host,还有另外三个环境变量。其中的 docker_tls_verify 告诉 docker 客户端需要启用 tls 验证。docker_cert_path 则指定了 tls 验证所依赖文件的目录,这个目录正是我们前面查看的 /home/nick/.docker/machines/krdevdb 目录。行文至此,困扰我们的安全问题终于得到了解释:docker machine 在执行 create 命令的过程中,生成了一系列保证安全性的秘钥和数字证书(*.pem)文件。这些文件在本地和远程 docker 主机上各存一份,本地的用于配置 docker 客户端,远程主机上的用于配置 docker daemon,让两边都设置 tls 验证的标记,依此实现安全的通信。以上就是“Docker Machine怎么应用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注开发云行业资讯频道。

相关推荐: java中do-while语句怎么用

本文小编为大家详细介绍“java中do-while语句怎么用”,内容详细,步骤清晰,细节处理妥当,希望这篇“java中do-while语句怎么用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。说明do-while语句由关键词do和wh…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 11/12 23:27
Next 11/12 23:27

相关推荐