介绍
构建 CPU 密集型图像和二进制图像是一个非常缓慢和耗时的过程,有时可以将您的笔记本电脑变成空间加热器。在缓慢的连接上推送 Docker 图像也需要很长时间。
此功能在 Docker 18.09 中引入,它提供了通过 SSH 远程连接到 Docker 主机的支持,需要非常少的客户端配置,并且只需要一个正常的 Docker 服务器,无需在远程机器上运行任何特殊配置。
在本教程中,您将创建一个 Droplet 来托管远程 Docker 服务器,并在本地机器上配置docker
命令来使用它。
前提条件
要遵循这个教程,你需要:
您可以 创建一个帐户如果您还没有一个
- Docker安装在您的本地机器或开发服务器上。如果您正在使用Ubuntu 18.04,请遵循 如何在Ubuntu 18.04上安装和使用Docker 的步骤 1 和 2;否则,请遵循 官方文档以获取有关在其他操作系统上安装的信息。 请确保将您的非根用户添加到
docker
组中,如链接教程的步骤2所述。
步骤 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密钥,然后通过sed
和tr
命令对结果进行分析,以在正确的格式中格式化数据。该命令包括您的帐户的所有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]
2…
3Name: docker-host
4…
要记住的一件事是,当你运行一个docker build
命令时,构建背景(从Dockerfile
访问的所有文件和文件夹)将发送到主机,然后构建过程将运行. 根据构建背景的大小和文件数量,这可能需要比在本地机器上构建图像更长的时间。
一旦您使用出口
设置了DOCKER_HOST
变量,其值将持续到壳会话的持续时间. 如果您需要再次使用本地 Docker 服务器,则可以使用以下命令清除变量:
1unset DOCKER_HOST
结论
您已经创建了一个远程 Docker 主机,并在本地连接到它。下一次笔记本电脑的电池运行较低或您需要构建一个沉重的 Docker 图像,请使用闪亮的远程 Docker 服务器而不是本地机器。
您也可能对学习 如何优化 Docker 图像用于生产,或 如何优化它们专为 Kubernetes感兴趣。