仅使用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。 我不需要那些作为依赖。

谢谢

如果我正确理解你的问题,你不需要任何比scpssh和几个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上写一个脚本,该脚本使用sshserverB ssh serverB 'mkdir /path/to/dockerfile'上复制创build必要的目录。 接下来,使用scpDockerfile和您的构build脚本以及您的代码从serverA复制serverB 。 然后使用sshdo_it_all.sh上运行do_it_all.sh上的do_it_all.sh