Deployment 仅使用SSH密钥和dockerfile进行部署

Deployment 仅使用SSH密钥和dockerfile进行部署,deployment,docker,ssh-keys,dokku,Deployment,Docker,Ssh Keys,Dokku,请原谅我的开发人员太天真了,但我假设您需要部署到一台机器上的只是一个正确的SSH密钥、一个要公开的端口、机器的IP地址、一个登录名和要部署的代码 那么,有没有简单的解决方案可以将代码部署到远程服务器,只需输入SSH密钥、Dockerfile和代码本身?我认为它可以以确定性(几乎是功能性的)方式进行设置,其中输入是服务器IP地址、登录名,输出是正在运行的服务器 我尝试在digital ocean()上设置Dokku,这需要DNS记录和git。我不需要这些作为依赖项 谢谢如果我正确理解了你的问题,你

请原谅我的开发人员太天真了,但我假设您需要部署到一台机器上的只是一个正确的SSH密钥、一个要公开的端口、机器的IP地址、一个登录名和要部署的代码

那么,有没有简单的解决方案可以将代码部署到远程服务器,只需输入SSH密钥、Dockerfile和代码本身?我认为它可以以确定性(几乎是功能性的)方式进行设置,其中输入是服务器IP地址、登录名,输出是正在运行的服务器

我尝试在digital ocean()上设置Dokku,这需要DNS记录和git。我不需要这些作为依赖项


谢谢

如果我正确理解了你的问题,你只需要
scp
ssh
和几个shell脚本

假设您希望将代码从serverA部署到serverB

在服务器B上创建一个目录。另外,创建一个shell脚本,我们称之为
build\u image.sh
,它使用
sudo
运行docker build命令

另外,在服务器B上创建一个shell脚本,从源代码构建代码(如果需要)

最后,在服务器B上创建一个shell脚本,该脚本调用代码构建脚本、docker构建脚本,最后运行新的docker映像。让我们调用这个脚本
do\u-it\u-all.sh

确保您
chmod755
所有shell脚本

现在,在服务器a上,您有了一个包含源代码的目录
scp
将该目录转到serverB中,并使用
Dockerfile
将其放入目录中

接下来,从serverA使用
ssh
serverB上调用
do\u all.sh
。这将构建代码、构建映像并部署容器,而不需要额外的软件、包、git、DNS记录等

如果愿意,您甚至可以使用cron或其他工具来实现夜间部署,或在其他条件下进行部署,从而自动化此过程

脚本/命令示例:

scp -r /path/to/my/code serverB:/path/to/my/dockerfile
ssh serverB '/path/to/my/dockerfile/do_it_all.sh'
在服务器B上:

scp -r /path/to/my/code serverB:/path/to/my/dockerfile
ssh serverB '/path/to/my/dockerfile/do_it_all.sh'
build_image.sh:

#!/bin/bash
sudo docker build -t my_image
build_code.sh(可选,根据您的代码进行调整):

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
在服务器A上:

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'
。接下来,使用
scp
Dockerfile
和构建脚本以及代码从serverA复制到serverB。然后使用
ssh

serverB上运行
do\u all.sh
serverA使用
ssh
其他人将如何访问您的服务器?目前,通过ip地址/portI建议评估Docker机器:它有一个通用驱动程序,可以通过ssh工作请参阅:Dokku不需要dns记录-您肯定可以使用ip-关于git的要求,如果你愿意的话,你可以通过stdin把一个柏油球推进去。等等,我错过了docker机器有一个通用驱动程序!谢谢你给出了一个完整的答案,这是悬赏。我一直在研究Docker Machine的解决方案(尽管您的依赖项较少)。随时我非常喜欢尽可能多地使用手头的东西。当你到达那里时,看到你的Docker机器解决方案会很好。谢谢你的赏金。