乐虎游戏|乐虎国际登录|欢迎你

计算机Mac OS X 安装 Docker

日期:2019-10-30编辑作者:计算机资讯

笔者在《Docker Machine 简介》一文中简单介绍了 Docker Machine 及其基本用法,但是忽略的细节实在是太多了。比如 Docker 与 Docker Machine 的区别?又如当我们执行 docker-machine create 命令时,Docker Machine 都做了哪些重要的事情使得我们可以远程操作 Docker daemon?这样的远程操作安全吗?本文将试图解读这些问题。注:本文的演示环境为 Ubuntu16.04。

注意: 该 Docker 版本为了支持 Docker 机,于是不再支持 Boot2Docker 命令行。使用 Docker Toolbox 和其它 Docker 工具来安装 Docker 机。

Docker 与 Docker Machine 的区别

Docker 是一个 Client-Server 架构的应用,人家是有官称的:Docker Engine。Docker 只是大家对 Docker Engine 的昵称,当然 Docker 还有其他的意思,比如一家公司的名称。简单起见,本文中的 Docker 等同于 Docker Engine。

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

  1. Docker daemon
  2. 一套与 Docker daemon 交互的 REST API
  3. 一个命令行客户端

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

计算机 1

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

您可以利用 Docker Toolbox 来安装 Docker。Docker Toolbox 提供了以下工具:
用于运行 docker-machine 二进制文件的 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:

计算机 2

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

计算机 3

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

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

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

计算机 4

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

用于运行 docker 二进行文件的 Docker Engine

DOCKER_HOST 环境变量

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

计算机 5

原来我们在前文中执行的 $ eval $(docker-machine env krdevdb) 命令就是在设置 DOCKER_HOST 环境变量。

用于运行 docker-compose 二进行文件的 Docker Compose (Mac 特有)

解决安全问题

我们的 Docker daemon 监听了 tcp 端口,糟糕的是此时我们没有做任何的保护措施。因此任何 Docker 客户端都可以通过 tcp 端口与我们的 Docker daemon 交互,这显然是无法接受的。解决方案是同时启用 Docker daemon 和 Docker 客户端的 TLS 证书认证机制。这样 Docker daemon 和 Docker 客户端之间的通信会被加密,并且只有安装了特定证书的客户端才能够与对应的 Docker daemon 交互。

至此本文的铺垫部分终于结束了,接下来我们将讨论 Docker Machine 相关的内容。

Kitematic,Docker 的图形用户界面
用于 Docker 命令行环且预先配置好的 shell
Oracle VM VirtualBox

Docker Machine create 命令

根据 Docker Machine 驱动的不同,create 命令执行的操作也不太一样,但其中有两步是我们在这里比较关心的:

docker-machine 会在您指定的主机上执行下面的操作:

  1. 安装 Docker,并进行配置。
  2. 生成证书保护 Docker 服务的安全。

由于 Docker 的后台程序使用了 Linux 特有的内核特性,所以您不能直接在 OS X 上运行 Docker。相反,您必须使用 docker-machine
来创建并附加一台虚拟机(VM)。该虚拟机需要安装 Linux 操作系统以便在您 Mac 机上运行 Docker。
前提条件
您 Mac 机的 OS X 版本必须大于等于 10.8 "Snow Leopard" 才可以安装 Docker Toolbox。
在安装之前先来了解一些关键概念
当我们在一台 Linux 主机上安装完 Docker 之后,我们的机器中就包含了本地主机和 Docker 主机。如果从网络层来划分,本地主机就代表你的电脑,而 Docker 主机就是运行 container 的那台机器。
在 Linux 机器上的一种典型安装 Docker 方法:Docker 客户端,Docker 后台程序和 container 会直接运行在您的机器上。这就意味着您可以使用标准的本地主机寻址(例如 localhost:8000
或者 0.0.0.0:8376
)来为 Docker container 分配一个地址。

配置 Docker daemon

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

计算机 6

好吧,-H tcp://0.0.0.0:2376 出现在这里并没有让我们太吃惊。在我们做了巨多的铺垫之后,你应该觉得这是理所当然才是。--tls 开头的几个参数主要和证书相关,我们会在后面的安全设置中详细的介绍它们。让人多少有些疑惑的地方是上图中的 /usr/bin/docker。当前最新版本的 Docker Machine 还在使用旧的方式设置 Docker daemon,希望在接下来的版本中会有所更新。

这个配置文件至关重要,因为它会覆盖 Docker 默认安装时的配置文件,从而以 Docker Machine 指定的方式启动 Docker daemon。至此我们有了一个可以被远程访问的 Docker daemon。

计算机 7

生成证书

我们在 Docker daemon 的配置文件中看到四个以 --tls 开头的参数,分别是 --tlsverify、--tlscacert、--tlscert和 –tlskey。其中的 --tlsverify 告诉 Docker daemon 需要通过 TLS 来验证远程客户端。其它三个参数分别指定了一个 pem 格式文件的路径,按照它们指定的文件路径去查看一下:

计算机 8

对比一下手动安装的 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 上的文件对比一下,发现它们是一样的!

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

计算机 9

除了我们关注过的 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 验证的标记,依此实现安全的通信。

linux_docker_host

总��

从本文的前一部分可以看到,Docker 其实把该提供的都提供了,只是配置起来比较麻烦!但是对用户来说,需要的总是更简单,更容易的配置。因此从使用者的角度来看,Docker Machine 确实很酷,一个命令下去不仅能够安装虚机和 Docker,还完成了很多手动搞起来令人生畏的配置。然后带来几个清晰、简单的命令。再然后,同学们就可以开心愉快的玩耍了!

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/145233.htm

计算机 10

在 OS X 上安装的 Docker ,其 Docker 后台程序是运行在一个名为 default
的 Linux 虚拟机上的。default
是 Linux 上的一个轻量级的虚拟机,是专门用于在 Mac OS X 机器上运行 Docker 的。

计算机 11

mac_docker_host

在 OS X 中,Docker 主机地址就是 Linux 虚拟机的地址。当你使用 docker-machine
启动虚拟机的时候,该虚拟机会自动获取到 IP 地址。当您开启一个 container 的时候,container 上的端口会映射到虚拟机的端口上。本页面上的实践操作会一一印证上述内容。
安装
如果您有一个正在运行着的 VirtualBox,那么请您在运行安装器(Docker Toolbox)之前务必关闭它。
进入 Docker Toolbox 页面。

点击 Docker Toolbox 下载链接,进行下载。

双击安装包或者通过右击并在快捷菜单中选择“打开”的方式安装 Docker Toolbox。
此时会弹出“Install Docker Toolbox”(安装 Docker 工具箱)窗口。

计算机 12

mac-welcome-page

点击“继续”(Continue),安装 toolbox。
此时,toolbox 会展现给你一些选项,供您自定义标准安装。

计算机 13

mac-page-two

默认情况下,标准的 Docker Toolbox 安装是这样的:
向 /usr/local/bin
目录中添加 Docker 工具的二进制文件。
修改权限使得这些二进制文件可供任何用户使用。
更新现有的 VirtualBox 安装。

通过点击“自定义”或“更改安装目录”修改这些默认安装值。

点击“安装”,执行标准安装。
系统提示您输入密码。

计算机 14

mac-password-prompt

输入密码,继续安装
安装完成后,Docker Toolbox 会为您提供一些信息,通过这些信息您可以完成一些常见的任务。

本文由乐虎游戏发布于计算机资讯,转载请注明出处:计算机Mac OS X 安装 Docker

关键词:

Java高级软件工程师面试考纲,java考纲

【java技术栈】总序,java 技术栈(technologystack)常被用来指代某项工作或某个职位需要掌握的一系列技能的总和。一...

详细>>

基于Linux下网络聊天室的设计与实现 PDF

本系统采用C/S结合的结构,客户端与客户端以及客户端与服务器端之间通过基于TCP/IP协议Socket套接口传送消息。服务...

详细>>

使用ab压力命令测试网站性能

网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露...

详细>>

生育条件too man open files难题的消除

一、问题发现 讯奇消息网关服务器从北京迁移到无锡机房后,出现短信下发后,短信状态报告只接收到60%左右。 实现...

详细>>