如何在远程主机上运行docker容器?
我想从Jenkins作业的远程主机上运行两个容器。 我有ssh访问,但我不想使用ssh。
它目前的工作如下:
ssh -T <HOST> docker login -u testuser -p testpassword registry:5000 ssh -T <HOST> docker pull registry:5000/db:${VERSION} ssh -T <HOST> docker pull registry:5000/app:${VERSION}
我怎么能没有ssh -T
?
在Jenkins上安装Docker客户端,然后用TLS键设置Docker服务器和客户端。 以下是通过命令快速设置自签名CA +密钥的步骤:
自签名的CA服务器
#在一个安全的文件夹中工作 mkdir docker-ca && chmod 700 docker-ca && cd docker-ca #为CA生成密钥对 openssl genrsa -aes256 -out ca-key.pem 2048 #设置CA证书 openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem #确保设置CN
服务器证书
#生成一个新的主机密钥对 openssl genrsa -out myserver-key.pem 2048 #生成证书签名请求(CSR) openssl req -subj“/ CN = myserver”-new -key myserver-key.pem -out myserver.csr #设置extfile ip允许 echo“subjectAltName = IP:$ myserver_ip,IP:127.0.0.1”> extfile.cnf #由CA签署密钥 openssl x509 -req -days 365 -in myserver.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out myserver-cert.pem -extfile extfile.cnf #通过更新服务testing服务器: / usr / bin / docker守护进程-H fd:// -H tcp://0.0.0.0:2376 --tlsverify \ --tlscacert = / etc / docker / ca.pem --tlscert = / etc / docker / myserver-cert.pem \ --tlskey =的/ etc /搬运工/ MYSERVER-key.pem
您需要使用上面的TLS选项更新服务器启动脚本,每个平台都有所不同,但systemd文件将从/lib/systemd/system/docker.service
复制到/etc/systemd/system/docker.service
,编辑,然后加载sudo systemctl daemon-reload && sudo systemctl restart docker
。
客户证书
#创build一个客户端密钥对 openssl genrsa -out client-key.pem 2048 #为客户端密钥生成csr openssl req -subj'/ CN = client'-new -key client-key.pem -out client.csr #configuration请求以支持客户端 echo extendedKeyUsage = clientAuth> extfile.cnf #用CA签署客户端密钥 openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem \ -CAcreateserial -out client-cert.pem -extfile extfile.cnf #用客户端testing docker工人--tlsverify \ --tlscacert = ca.pem --tlscert = client-cert.pem --tlskey = client-key.pem \ -H = tcp://127.0.0.1:2376 info`
在$HOME/.docker
您可以添加:ca.pem,key.pem和cert.pem。 然后export DOCKER_TLS_VERIFY=1
并export DOCKER_HOST=your_docker_server
作为login脚本(.bashrc)的一部分。
您可以将一个Docker客户端安装到Jenkins Box中并使用它来更新您的容器。
为了这个任务我使用了docker远程API。