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

时间:2015-09-23 22:22:21

标签: deployment docker ssh-keys dokku

请原谅我的开发天真,但我认为你需要部署到一台机器上的是一个正确的SSH密钥,一个暴露的端口,一个登录的机器的IP地址和要部署的代码。

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

我尝试在数字海洋(https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-dokku-application)上设置Dokku,这需要DNS记录和git。我不需要那些作为依赖。

由于

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,那么除了scpssh和一些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