我创建了一个 docker 堆栈来部署到一个 swarm。现在我有点困惑如何将它部署到真实服务器上?
当然,我可以
scp
我的docker-stack.yml
文件到我的集群的一个节点ssh
进入节点- 跑
docker stack deploy -c docker-stack.yml stackname
所以有docker-machine
我想的工具。我试过了
docker-machine -d none --url=tcp://<RemoteHostIp>:2375 node1
如果您在没有 TLS 的情况下打开端口,什么似乎才有效?我收到以下信息:
$ docker-machine env node1
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "192.168.178.49:2375": dial tcp 192.168.178.49:2375: connectex: No connection could be made because the target machine actively refused it.
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which might stop running containers.
我已经尝试生成证书并将其复制到主机:
ssh-keygen -t rsa
ssh-copy-id myuser@node1
然后我跑了
docker-machine --tls-ca-cert PathToMyCert --tls-client-cert PathToMyCert create -d none --url=tcp://192.168.178.49:2375 node1
结果如下:
$ docker-machine env node1
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "node1:2375": There was an error reading certificate
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which might stop running containers.
我也用通用驱动程序尝试过
$ docker-machine create -d generic --generic-ssh-port "22" --generic-ssh-user "MyRemoteUser" --generic-ip-address 192.168.178.49 node1
Running pre-create checks...
Creating machine...
(node1) No SSH key specified. Assuming an existing key at the default location.
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Error creating machine: Error detecting OS: OS type not recognized
如何使用 TLS 正确添加带有 docker-machine 的远程 docker 主机?或者有没有更好的方法将堆栈部署到服务器/投入生产?
我经常读到你不应该公开 docker 端口,但不应该公开一次。我不敢相信他们没有提供一种简单的方法来做到这一点。
更新与解决方案
我认为这两个答案都有资格。我发现Deploy to Azure 官方文档(AWS 也是一样)。@Tarun Lalwani 的回答为我指明了正确的方向,这几乎是官方的解决方案。这就是我接受他的回答的原因。
对我来说,以下命令有效:
ssh -fNL localhost:2374:/var/run/docker.sock myuser@node1
然后你可以运行:
docker -H localhost:2374 stack deploy -c stack-compose.yml stackname
或者
DOCKER_HOST=localhost:2374
docker stack deploy -c stack-compose.yml stackname
@BMitch 的回答也是有效的,他提到的安全问题不容忽视。
更新 2
@bretf 的答案是连接到您的 swarm 的绝佳方式。特别是如果你有不止一个。它仍然是测试版,但适用于互联网上可用且没有 ARM 架构的群。