如何使用SSH运行远程Docker命令
总览
在本教程中,我们将学习如何通过SSH连接运行远程Docker命令。
Docker通常在其运行的主机上本地管理。默认情况下,Docker客户端在与守护程序通信时将连接到Unix套接字。在本教程中,我们将学习如何使用SSH将客户端连接到远程主机。
网络安全
在将Docker主机打开到远程SSH连接之前,强烈建议仅允许可信流量。
防火墙或者网络策略应阻止到Docker主机的所有流量,并将到可信IP或者子网的流量列入白名单。
SSH公用RSA密钥
通过SSH访问系统需要具有Docker守护程序特权的用户。它还需要我们本地用户的公共RSA密钥。密钥不应受密码保护,因为不会提示我们输入密钥。
如果RSA密钥对具有密码,则远程Docker主机连接将失败。
通过运行以下命令来创建新的RSA密钥对。
ssh-keygen
使用密钥对,使用ssh-copy-id
命令将公共密钥复制到远程主机的用户。
ssh-copy-id Hyman@localhost
通过SSH到远程主机,验证公钥已成功添加到user1的配置文件中。如果我们成功登录但未提示输入密码或者密码,则可以执行远程泊坞窗命令了。
远程Docker客户端SSH连接
我们终于可以远程管理Docker主机了。通过列出正在运行的容器来验证对远程的访问。
docker -H ssh://Hyman@localhost ps
如果一切都成功完成,我们将看到一个正在运行的容器表。
每次连接时必须使用-H
标志可能会很麻烦,尤其是当我们发现自己经常与远程主机打交道时。 Docker在执行命令时会寻找一个DOCKER_HOST环境变量。如果已设置并导出,则可以避免指定远程主机。
例如,让我们将DOCKER_HOST
环境变量设置为使用我们的SSH连接。
export DOCKER_HOST=ssh://Hyman@localhost
为了验证我们确实在执行到远程Docker主机的命令,请运行docker info
命令。这将输出有关我们所连接的主机的信息。
docker info
在我们的案例中,我们从MacBook运行命令。但是,当我们执行上面的命令时,我们可以看到它是针对Ubuntu 20.04服务器完成的。
Client: Debug Mode: false Server: Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 19.03.12 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: inactive Runtimes: runc Default Runtime: runc Init Binary: docker-init containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd init version: fec3683 Security Options: apparmor seccomp Profile: default Kernel Version: 5.4.0-42-generic Operating System: Ubuntu 20.04.1 LTS OSType: linux Architecture: x86_64 CPUs: 2 Total Memory: 3.844GiB Name: hackbox ID: BN37:5UCL:2DMY:WO2Z:KJRA:XU3F:VZXW:OKRL:ISIK:24OX:TANH:QDGK Docker Root Dir: /var/lib/docker Debug Mode: false Registry: https://index.docker.io/v1/ Labels: Experimental: false Insecure Registries: 127.0.0.0/8 Live Restore Enabled: false
总结
在本教程中,我们学习了如何使用SSH连接到远程Docker主机。这是一种非常安全且通用的与远程主机连接的方式,它使我们可以远程控制容器。
此设置对于Jenkins CI \ CD管道非常有用,因为Jenkins服务器可以对远程主机执行操作。这可能是用于集成测试的衍生容器,也可能是将新的Docker容器部署到生产中。