【问题标题】:It's possible to manage MacOS Docker Desktop with Docker Machine?可以用 Docker Machine 管理 MacOS Docker 桌面吗?
【发布时间】:2020-08-31 22:55:16
【问题描述】:

我在我的 Mac(不是 Docker Toolkit)上安装了 Docker Desktop,并且我根据 official documentation 安装了 docker-machine

我正在尝试将我的 localhost Docker 引擎添加为 docker 机器下的 docker 节点,但没有成功。

我做的步骤是:

  1. 在 localhost 中启用 sshd(ssh localhost 有效)

  2. 将本地 Docker 添加到 Docker 机器:

docker-machine create --driver generic --generic-ip-address 127.0.0.1 --generic-ssh-user <"ssh_username"> <node_name>
Running pre-create checks...
Creating machine...
(localhost) No SSH key specified. Assuming an existing key at the default location.
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Password:
Detecting the provisioner...
Password:
Error creating machine: Error detecting OS: Error getting SSH command: ssh command error:
command : cat /etc/os-release
err     : exit status 1
output  : cat: /etc/os-release: No such file or directory

docker-machine ls的输出

docker-machine ls
NAME        ACTIVE   DRIVER    STATE     URL                    SWARM   DOCKER    ERRORS
localhost   -        generic   Running   tcp://127.0.0.1:2376           Unknown   Unable to query docker version: Cannot connect to the docker engine endpoint

对不起我的英语,我不是本地人。

【问题讨论】:

  • 你想做什么,你会需要这个?没有docker-machine,你通常可以很好地使用Docker。
  • 它用于测试目的并了解docker-machine 的工作原理。我在生产环境中有一些远​​程 Docker 引擎分散在不同的服务器中,在使用docker-machine 远程管理它们之前,我想在我的本地主机上建立一个测试实验室。还有最重要的……我很好奇如何完成这项任务。
  • 看来这是不可能的Docker Doc

标签: docker docker-machine docker-engine


【解决方案1】:

docker-machine 很危险。我不建议将它用于管理生产服务器,因为它需要无密码 sudo,并且很容易损坏您的 Docker 安装。我设法从服务器上完全删除了所有容器和图像,但没有意识到我运行的命令不仅仅是连接到服务器,而是从头开始初始化它。

如果您想从单个 CLI 控制多个 Docker 守护程序,请尝试 Docker Contexts

编辑:

docker-machine 的目的是使用 Docker 守护程序配置和管理机器。

它既可以与本地 VM 一起使用,也可以与各种云提供商一起使用。只需一条命令,它就可以创建和启动 VM,然后在该新 VM 上安装和配置 Docker(包括生成 TLS 证书)。

它可以创建一个完整的 Docker Swarm 集群。

它还可以在物理机器上安装 Docker,通过无密码 sudo 进行 SSH 访问(这是您尝试使用的通用驱动程序)。

一旦机器完全配备了 Docker,它还可以设置环境变量来配置 Docker CLI 以将命令发送到安装在该机器上的远程 Docker 守护程序 - 有关详细信息,请参阅 here

最后,也可以通过不使用任何驱动程序手动配置的 Docker 添加机器 - 如 here 所述。这样做的唯一目的是在各种远程机器之间切换时允许统一的工作流程。

但是,正如我之前所说的 docker-machine 是危险的 - 它还可以删除现有的虚拟机,并在物理机重新发布它们的情况下,从而删除所有现有的图像、容器等。一个简单的错误可以清除服务器。更不用说它需要基于密钥的 SSH 和无密码的 sudo,因此,如果未经授权的人获得了生产服务器的 SSH 密钥,那么就是这样 - 他们拥有对所有内容的完全 root 访问权限。

可以安全地将docker-machine 与预先存在的 Docker 安装一起使用 - 您需要在不使用任何驱动程序的情况下添加它们,如here 所述。然而,在这种情况下,大多数docker-machine 命令都不起作用,因此唯一的好处是为我之前提到的 Docker CLI 轻松生成这些环境变量。

Docker Contexts 是一种告诉 Docker CLI 它应该与哪个 Docker 守护进程通信的新方法。它们本质上是为了替换 docker-machine 生成的所有这些环境变量。

由于 Docker CLI 仅与 Docker 守护程序通信,因此不存在意外删除 VM 或重新配置已配置物理机的风险。由于它们是 Docker CLI 的一部分,因此无需安装其他软件。

另一方面,Docker contexts 不能用于创建或配置新机器 - 需要手动执行或使用其他机制或工具(如 Vagrant 或云提供商提供的某种模板)。

因此,如果您真的需要一个可以让您轻松创建、配置和删除启用 docker 的机器的工具,请使用docker-machine。但是,如果您只想在一个地方拥有所有启用 Docker 的机器的列表,以及一种轻松设置本地 Docker CLI 应该与哪一台通信的方法,Docker Contexts 是一个更安全的选择。

【讨论】:

  • 感谢您的回复。 docker contextdocker-machine有什么区别?
猜你喜欢
  • 1970-01-01
  • 2019-10-14
  • 2021-07-25
  • 2021-12-09
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
相关资源
最近更新 更多