如何使用远程Docker服务器加速您的工作流程

来自菜鸟教程
跳转至:导航、​搜索

介绍

构建 CPU 密集型图像和二进制文件是一个非常缓慢且耗时的过程,有时可能会将您的笔记本电脑变成空间加热器。 在慢速连接上推送 Docker 镜像也需要很长时间。 幸运的是,这些问题有一个简单的解决方法。 Docker 允许您将所有这些任务卸载到远程服务器上,这样您的本地机器就不必做那些艰苦的工作。

此功能是在 Docker 18.09 中引入的。 它支持通过 SSH 远程连接到 Docker 主机。 它只需要在客户端上进行很少的配置,并且只需要一个常规的 Docker 服务器,而无需在远程机器上运行任何特殊配置。 在 Docker 18.09 之前,您必须使用 Docker Machine 创建远程 Docker 服务器,然后配置本地 Docker 环境来使用它。 这种新方法消除了额外的复杂性。

在本教程中,您将创建一个 Droplet 来托管远程 Docker 服务器并在本地计算机上配置 docker 命令以使用它。

先决条件

要学习本教程,您需要:

  • 一个 DigitalOcean 帐户。 如果您还没有帐户,您可以创建一个帐户
  • Docker 安装在本地机器或开发服务器上。 如果您使用的是 Ubuntu 18.04,请按照 如何在 Ubuntu 18.04 上安装和使用 Docker 的步骤 1 和 2; 否则,请按照 官方文档 了解有关在其他操作系统上安装的信息。 确保将您的非 root 用户添加到 docker 组,如链接教程的第 2 步所述。

第 1 步 – 创建 Docker 主机

首先,启动一个具有相当大处理能力的 Droplet。 CPU 优化计划非常适合此目的,但标准计划也同样适用。 如果您要编译资源密集型程序,CPU 优化计划提供专用 CPU 内核,可以加快构建速度。 否则,标准计划提供更平衡的 CPU 与 RAM 比率。

Docker 一键式镜像 为我们完成所有设置。 点击此链接 从控制面板创建一个 16GB/8vCPU CPU-Optimized Droplet 与 Docker。

或者,您可以使用 doctl 从本地命令行创建 Droplet。 要安装它,请按照 GitHub 上的 doctl README 文件中的说明进行操作。

以下命令基于 Docker One-click 镜像在 FRA1 区域创建一个新的 16GB/8vCPU CPU-Optimized Droplet:

doctl compute droplet create docker-host \
    --image docker-18-04 \
    --region fra1 \
    --size c-8 \
    --wait \
    --ssh-keys $(doctl compute ssh-key list --format ID --no-header | sed 's/$/,/' | tr -d '\n' | sed 's/,$//')

doctl 命令使用 ssh-keys 值来指定应该将哪些 SSH 密钥应用于新的 Droplet。 我们使用 subshell 调用 doctl compute ssh-key-list 来检索与您的 DigitalOcean 帐户关联的 SSH 密钥,然后使用 sedtr 命令解析结果以格式化数据正确的格式。 此命令包括您帐户的所有 SSH 密钥,但您可以将突出显示的子命令替换为您帐户中任何密钥的指纹。

创建 Droplet 后,您将看到其 IP 地址以及其他详细信息:

OutputID           Name           Public IPv4        Private IPv4    Public IPv6    Memory    VCPUs    Disk    Region    Image                                 Status    Tags    Features    Volumes
148681562    docker-host    your_server_ip                                    16384     8        100     fra1      Ubuntu Docker 5:18.09.6~3 on 18.04    active

您可以在教程如何使用doctl,官方DigitalOcean命令行客户端中了解有关使用doctl命令的更多信息。

创建 Droplet 后,您将拥有一个可以使用的 Docker 服务器。 出于安全考虑,请创建一个 Linux 用户来代替 root 使用。

首先,以 root 用户身份使用 SSH 连接到 Droplet:

ssh root@your_server_ip

连接后,添加一个新用户。 此命令添加一个名为 sammy 的命令:

adduser sammy

然后将用户添加到 docker 组,以授予其在 Docker 主机上运行命令的权限。

sudo usermod -aG docker sammy

最后,通过键入 exit 退出远程服务器。

现在服务器已经准备好了,让我们配置本地的 docker 命令来使用它。

第 2 步 – 配置 Docker 以使用远程主机

要将远程主机用作 Docker 主机而不是本地计算机,请将 DOCKER_HOST 环境变量设置为指向远程主机。 此变量将指示 Docker CLI 客户端连接到远程服务器。

export DOCKER_HOST=ssh://sammy@your_server_ip

现在,您运行的任何 Docker 命令都将在 Droplet 上运行。 例如,如果您启动一个 Web 服务器容器并公开一个端口,它将在 Droplet 上运行,并且可以通过您在 Droplet 的 IP 地址上公开的端口进行访问。

要验证您是否以 Docker 主机身份访问 Droplet,请运行 docker info

docker info

您将在 Name 字段中看到您的 Droplet 的主机名,如下所示:

Output…
Name: docker-host
…

要记住的一件事是,当您运行 docker build 命令时,构建上下文(可从 Dockerfile 访问的所有文件和文件夹)将被发送到主机,然后构建过程将跑。 根据构建上下文的大小和文件的数量,与在本地计算机上构建映像相比,它可能需要更长的时间。 一种解决方案是创建一个专用于 Docker 映像的新目录,并仅复制或链接将在映像中使用的文件,这样就不会无意中上传不需要的文件。

一旦使用 export 设置了 DOCKER_HOST 变量,它的值将在 shell 会话期间保持不变。 如果您需要再次使用本地 Docker 服务器,可以使用以下命令清除该变量:

unset DOCKER_HOST

结论

您已经创建了一个远程 Docker 主机并在本地连接到它。 下次当您的笔记本电脑电池电量不足或您需要构建繁重的 Docker 映像时,请使用闪亮的远程 Docker 服务器而不是本地计算机。

您可能也有兴趣了解 如何优化 Docker 镜像以用于生产 ,或 如何专门针对 Kubernetes 优化它们。