仅使用SSH密钥和dockerfile进行部署
请原谅我的开发天真,但我认为所有你需要部署到一台机器是一个正确的SSH密钥,一个端口公开,机器的IP地址login和代码部署。
那么是否有任何简单的解决scheme将代码部署到远程服务器,唯一的input是SSH密钥,Dockerfile和代码本身? 我认为它可以build立在确定性(几乎function)的方式,其中input是服务器的IP地址,login,输出是一个正在运行的服务器。
我已经尝试在数字海洋上设置Dokku( https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-dokku-application ),这需要DNSlogging和git。 我不需要那些作为依赖。
谢谢
如果我正确理解你的问题,你不需要任何比scp
, ssh
和几个shell脚本更多的东西。
假设你想从serverA部署你的代码到serverB 。
在serverB上 ,用你的Dockerfile
创build一个目录。 另外,创build一个shell脚本,我们称之为build_image.sh
,它使用sudo
运行build_image.sh
build命令。
另外,在serverB上 ,创build一个从源代码构build代码的shell脚本(如有必要)。
最后,在serverB上 ,创build一个shell脚本,调用你的代码构build脚本,你的docker构build脚本,最后运行你的新docker镜像。 让我们调用这个脚本do_it_all.sh
。
确保你chmod 755
所有的shell脚本。
现在,在serverA上 ,你有一个包含源代码的目录。 scp
该目录到serverB到与Dockerfile
的目录。
接下来,从serverA使用ssh
调用do_it_all.sh
上的do_it_all.sh 。 这将build立你的代码,build立你的形象,并部署一个容器,而不需要额外的软件,包,Git,DNSlogging等。
你甚至可以使用cron或其他东西自动化这个过程,如果你愿意,或者在其他条件下进行部署。
示例脚本/命令:
在服务器B上:
build_image.sh:
#!/bin/bash sudo docker build -t my_image
build_code.sh(可选,调整你的代码):
#!/bin/bash cd /path/to/my/code ./configure make
do_it_all.sh:
#!/bin/bash cd /path/to/my/dockerfile sudo docker stop my_container #stop the old container sudo docker rm my_container #remove the old container sudo docker rmi my_image #remove the old image ./build_code.sh #comment out if not needed ./build_image.sh sudo docker run -d --name my_container my_image
在serverA上:
scp -r /path/to/my/code serverB:/path/to/my/dockerfile ssh serverB '/path/to/my/dockerfile/do_it_all.sh'
应该是这样的。 调整您的系统。
要部署到一个全新的系统,只需在serverA上写一个脚本,该脚本使用ssh
在serverB ssh serverB 'mkdir /path/to/dockerfile'
上复制创build必要的目录。 接下来,使用scp
将Dockerfile
和您的构build脚本以及您的代码从serverA复制到serverB 。 然后使用ssh
在do_it_all.sh
上运行do_it_all.sh
上的do_it_all.sh 。