如何使用SSH运行远程Docker命令

时间:2020-01-09 10:34:19  来源:igfitidea点击:

总览

在本教程中,我们将学习如何通过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容器部署到生产中。