返回顶部
首页 > 资讯 > 精选 >如何正确的使用Docker Machine
  • 791
分享到

如何正确的使用Docker Machine

2023-06-06 17:06:03 791人浏览 八月长安
摘要

本篇文章给大家分享的是有关如何正确的使用Docker Machine,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Docker 是一个 Client-Server 架构的应用,

本篇文章给大家分享的是有关如何正确的使用Docker Machine,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

Docker 是一个 Client-Server 架构的应用,人家是有官称的:Docker Engine。Docker 只是大家对 Docker Engine 的昵称,当然 Docker 还有其他的意思,比如一家公司的名称。

提到 Docker 我们必须要知道它包含了三部分内容:

  1. Docker daemon

  2. 一套与 Docker daemon 交互的 REST api

  3. 一个命令行客户端

下图很清晰的展示了它们之间的关系:

如何正确的使用Docker Machine

Docker Machine 则是一个安装和管理 Docker 的工具。它有自己的命令行工具:docker-machine。

Docker daemon Socket

既然 Docker 客户端要和 Docker daemon 通过 REST API 通信,那就让我们看看它们可以采用的方法有哪些:

  1. Unix socket

  2. Systemd socket activation

  3. tcp

我们可以简单的把 1 和 2 理解成一种方式,就是同一台主机上的进程间通信。至于 3 则很好理解:通过 tcp 协议进行跨网络的通信。

既然 1 和 2 用于同一台机器上的进程间通信,那么我们可以猜想:安装在同一主机上的 Docker 客户端和 Docker daemon 就是通过这种方式来通信的。事实也正是如此,我们可以查看安装 Docker 时默认添加的 Docker daemon 启动配置,打开文件 /etc/systemd/system/multi-user.target.wants/docker.service:

如何正确的使用Docker Machine

图中的 -H 用来指定 Docker Daemon 监听的 socket,此处指定的类型为 system socket activation。使用类型 1 和 2 进行通信需要进程具有 root 权限。这也是 Docker 安装过程中会自动创建一个具有 root 权限的用户和用户组的主要原因。新创建的用户和用户组名称为 docker,建议大家把需要操作 Docker 的用户都加入到这个组中,否则当你执行命令时就会碰到下图显示的问题:

如何正确的使用Docker Machine

我们还可以同时指定多个 -H 参数让 Docker daemon 同时监听不同的 socket 类型。比如要添加对 TCP 端口 2376 的监听就可以使用下面的命令行参数:

$ sudo dockerd -H fd:// -H tcp://0.0.0.0:2376

运行上面的命令,然后查看本机监听的端口:

如何正确的使用Docker Machine

此时我们就可以从远程主机上的 Docker 客户端访问这部主机的 2376 端口了。

DOCKER_HOST 环境变量

Docker 客户端默认的配置是访问本机的 Docker daemon,当你指定了 DOCKER_HOST 变量后,Docker 客户端会访问这个变量中指定的 Docker daemon。让我们回顾一下 docker-machine env 命令:

如何正确的使用Docker Machine

执行的 $ 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 会在您指定的主机上执行下面的操作:

  1. 安装 Docker,并进行配置。

  2. 生成证书保护 Docker 服务的安全。

配置 Docker daemon

Docker 的安装过程并没有什么秘密,这里不再赘述。我们重点关注 Docker daemon 的配置。仔细观察我们会发现,通过 docker-machine 安装的 Docker 在 /etc/systemd/system 目录下多出了一个 Docker 相关的目录:docker.service.d。这个目录中只有一个文件 10-machine.conf:

如何正确的使用Docker Machine

好吧,-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 Machine

对比一下手动安装的 Docker,会发现 /etc/docker 目录下并没有这三个文件。毫无疑问它们是 Docker Machine 生成的,主要是为了启用 Docker daemon 的 TLS 验证功能。

现在让我们回到安装了 Docker Machine 的主机上。

查看 /home/nick/.docker/machines/krdevdb 目录,发现了一些同名的文件(ca.pem、server-key.pem 和 server.pem),和主机 drdevdb 上的文件对比一下,发现它们是一样的!

让我们再来观察一下这幅图:

如何正确的使用Docker Machine

除了我们关注过的 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,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注编程网精选频道。

--结束END--

本文标题: 如何正确的使用Docker Machine

本文链接: https://lsjlt.com/news/248124.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何正确的使用Docker Machine
    本篇文章给大家分享的是有关如何正确的使用Docker Machine,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Docker 是一个 Client-Server 架构的应用,...
    99+
    2023-06-06
  • 如何正确的使用Gradle
    本篇文章为大家展示了如何正确的使用Gradle,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、Gradle相比Maven的优势配置简洁Maven是用pom.xml管理,引入一个jar包至少5行代码...
    99+
    2023-06-06
  • 如何正确的使用javascript
    本篇文章为大家展示了如何正确的使用javascript,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。使用javascript的方法:可以用script标签引入<script type...
    99+
    2023-06-14
  • 如何正确的使用springcloud
    这期内容当中小编将会给大家带来有关如何正确的使用springcloud,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、微服务简介 Ⅰ、我对微服务的理解微服务是软件开发的一种架构方式,由单一的应用小程序构...
    99+
    2023-06-14
  • 如何正确的使用Puppet
    今天就跟大家聊聊有关如何正确的使用Puppet,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 概述 puppet是一个开源的软件自动化配置和部署工具,它使用简单且功能强大,正得到...
    99+
    2023-06-12
  • 如何正确的使用pytest
    本篇文章为大家展示了如何正确的使用pytest,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、安装pytest,打开dos窗口输入:pip install pytest2、通过pycharm工具下...
    99+
    2023-06-07
  • 如何正确的使用numpy.sum()
    这篇文章给大家介绍如何正确的使用numpy.sum(),内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。numpy的sum函数可接受的参数是:sum(a, axis=None, dtype=None,&...
    99+
    2023-06-15
  • 如何正确的使用TypeScript
    如何正确的使用TypeScript,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、TypeScript 是什么TypeScript 是一种由微软开发的自由和开源的编程语言...
    99+
    2023-06-17
  • 如何正确的使用WeakHashMap
    这篇文章给大家介绍如何正确的使用WeakHashMap,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 在学习WeakHashMap时了解到,如果map里面的key只有map本身引用时,就会将key对应的Entry清除掉...
    99+
    2023-05-30
    weakhashmap
  • 如何正确的使用ArrayList
    今天就跟大家聊聊有关如何正确的使用ArrayList,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。ArrayList简介ArrayList 是一个数组队列,相当于 动态数组。与Jav...
    99+
    2023-05-31
    arraylist
  • 如何正确的使用JAXB
    这期内容当中小编将会给大家带来有关如何正确的使用JAXB,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、jaxb是什么     JAXB是Java Archite...
    99+
    2023-05-31
    jaxb
  • 如何正确的使用JDBC
    今天就跟大家聊聊有关 如何正确的使用JDBC,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是JDBCJDBC(Java Database Connectivity),即Java数...
    99+
    2023-05-31
    jdbc jdb
  • 如何正确的使用supervisor
    这期内容当中小编将会给大家带来有关如何正确的使用supervisor,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。软硬件环境centos7.6.1810 64bitcat /etc/redhat...
    99+
    2023-06-06
  • 如何正确的使用 jsonpath
    今天就跟大家聊聊有关如何正确的使用 jsonpath,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。java项目demo:注意: 其中他的max,min,avg,stddev函数只能类...
    99+
    2023-06-06
  • 如何正确的使用CMake
    如何正确的使用CMake?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makef...
    99+
    2023-06-08
  • 如何正确使用MVCC
    这篇文章主要讲解了“如何正确使用MVCC”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何正确使用MVCC”吧! 简单理解版以下先引用我之前写过的...
    99+
    2024-04-02
  • 如何正确使用@property
    本篇内容主要讲解“如何正确使用@property”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何正确使用@property”吧!他们是这样说的:class People: ...
    99+
    2023-06-15
  • 如何正确使用WideCharToMultiByte
    要正确使用WideCharToMultiByte函数,需要按照以下步骤操作:1. 确定要转换的宽字符编码方式。WideCharToM...
    99+
    2023-09-26
    使用
  • 如何正确的使用puppeteer库
    如何正确的使用puppeteer库,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.初始化项目注: 这里我们会使用到 es6/7 的新特性...
    99+
    2024-04-02
  • 如何正确的使用Spring WebFlux
    如何正确的使用Spring WebFlux?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Spring-WebFlux框架Spring WebFlux在内部使用Project R...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作