请原谅我的开发天真,但我认为你需要部署到一台机器上的是一个正确的SSH密钥,一个暴露的端口,一个登录的机器的IP地址和要部署的代码。
那么有没有简单的解决方案将代码部署到远程服务器,唯一的输入是SSH密钥,Dockerfile和代码本身?我认为它可以以确定性(几乎功能性)的方式设置,其中输入是服务器IP地址,登录,输出是正在运行的服务器。
我尝试在数字海洋(https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-dokku-application)上设置Dokku,这需要DNS记录和git。我不需要那些作为依赖。
由于
答案 0 :(得分:1)
如果我正确理解了您的问题,那么除了scp
,ssh
和一些shell脚本之外,您不需要任何其他内容。
假设您要将代码从 serverA 部署到 serverB 。
在 serverB 上,创建一个包含Dockerfile
的目录。另外,创建一个shell脚本,让我们称之为build_image.sh
,使用sudo
运行docker build命令。
此外,在 serverB 上,创建一个shell脚本,从源代码构建代码(如有必要)。
最后,在 serverB 上,创建一个shell脚本,调用代码构建脚本,docker构建脚本,最后运行新的docker镜像。我们调用此脚本do_it_all.sh
。
确保chmod 755
所有shell脚本。
现在,在 serverA 上,您有一个包含源代码的目录。将 serverB 的目录scp
放入包含Dockerfile
的目录。
接下来,从 serverA 使用ssh
在 serverB 上致电do_it_all.sh
。这将构建您的代码,构建您的映像并部署容器,而无需额外的软件,软件包,git,DNS记录等。
如果您愿意,您甚至可以使用cron或其他方式自动执行此过程以进行夜间部署,或者在其他条件下进行部署。
示例脚本/命令:
在 serverB:
上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'
上的必要目录。接下来,使用Dockerfile
将您的scp
和您的构建脚本以及您的代码从 serverA 复制到 serverB 。然后使用do_it_all.sh
从 serverA 在 serverB 上运行ssh
。