如何使用远程 Docker 服务器加快工作流程

介绍

构建 CPU 密集型图像和二进制图像是一个非常缓慢和耗时的过程,有时可以将您的笔记本电脑变成空间加热器。在缓慢的连接上推送 Docker 图像也需要很长时间。

此功能在 Docker 18.09 中引入,它提供了通过 SSH 远程连接到 Docker 主机的支持,需要非常少的客户端配置,并且只需要一个正常的 Docker 服务器,无需在远程机器上运行任何特殊配置。

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

前提条件

要遵循这个教程,你需要:

您可以 创建一个帐户如果您还没有一个

步骤 1 – 创建 Docker 主机

要开始,用一个体面的处理功率旋转一个Dropplet。CPU优化计划是为此目的完美的,但标准计划也同样有效。如果你要编译资源密集的程序,CPU优化计划提供专用的CPU核心,允许更快的构建。

Docker One-click image为我们负责所有设置。 Follow this link从控制面板创建一个16GB/8vCPU CPU-Optimized Droplet with Docker。

或者,您可以使用doctl创建从本地命令行的Droplet。 要安装它,请遵循 doctl README文件在GitHub中的说明。

以下命令会根据 Docker One-click 图像在 FRA1 区域中创建一个新的 16GB/8vCPU CPU-Optimized Droplet:

1[environment local]
2doctl compute droplet create docker-host \
3    --image docker-18-04 \
4    --region fra1 \
5    --size c-8 \
6    --wait \
7    --ssh-keys $(doctl compute ssh-key list --format ID --no-header | sed 's/$/,/' | tr -d '\n' | sed 's/,$//')

doctl命令使用ssh-keys值来指定它应该应用于您的新Droplet的SSH密钥。我们使用子壳调用doctl compute ssh-key-list来检索与您的DigitalOcean帐户相关的SSH密钥,然后通过sedtr命令对结果进行分析,以在正确的格式中格式化数据。该命令包括您的帐户的所有SSH密钥,但您可以用您帐户中的任何密钥的指纹代替突出的子命令。

一旦 Droplet 创建,您将看到其 IP 地址,包括其他细节:

1[secondary_label Output]
2ID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags Features Volumes
3148681562 docker-host your_server_ip 16384 8 100 fra1 Ubuntu Docker 5:18.09.6~3 on 18.04 active

您可以在教程中了解有关使用doctl命令的更多信息 How To Use doctl, the Official DigitalOcean Command-Line Client

创建 Droplet 后,您将有一个可使用的 Docker 服务器. 为了安全,请创建一个 Linux 用户,而不是 root

首先,以 SSH 连接到 Droplet 作为 root 用户:

1[environment local]
2ssh root@your_server_ip

一旦连接,添加一个新用户. 此命令添加一个名为 sammy:

1[environment second]
2adduser sammy

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

1[environment second]
2sudo usermod -aG docker sammy

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

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

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

若要将远程主机用作 Docker 主机,而不是本地机器,请设置DOCKER_HOST环境变量以指向远程主机。

1[environment local]
2export DOCKER_HOST=ssh://sammy@your_server_ip

例如,如果您启动一个 Web 服务器容器并暴露一个端口,它将在 Droplet 上运行,并通过您在 Droplet 的 IP 地址上暴露的端口可访问。

若要验证您是作为 Docker 主机访问 Droplet,请运行docker 信息

1[environment local]
2docker info

您将看到您的 Droplet 主机名称列在名称字段中,如下:

1[secondary_label Output]
23Name: docker-host
4

要记住的一件事是,当你运行一个docker build命令时,构建背景(从Dockerfile访问的所有文件和文件夹)将发送到主机,然后构建过程将运行. 根据构建背景的大小和文件数量,这可能需要比在本地机器上构建图像更长的时间。

一旦您使用出口设置了DOCKER_HOST变量,其值将持续到壳会话的持续时间. 如果您需要再次使用本地 Docker 服务器,则可以使用以下命令清除变量:

1unset DOCKER_HOST

结论

您已经创建了一个远程 Docker 主机,并在本地连接到它。下一次笔记本电脑的电池运行较低或您需要构建一个沉重的 Docker 图像,请使用闪亮的远程 Docker 服务器而不是本地机器。

您也可能对学习 如何优化 Docker 图像用于生产,或 如何优化它们专为 Kubernetes感兴趣。

Published At
Categories with 技术
comments powered by Disqus