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

GTD*_*Dev 8 deployment ssh-keys docker dokku

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

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

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

谢谢

ked*_*eda 2

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

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

serverB上,创建一个目录Dockerfile。另外,创建一个 shell 脚本(我们称之为 )build_image.sh,使用 运行 docker build 命令sudo

另外,在serverB上,创建一个从源代码构建代码的 shell 脚本(如果需要)。

最后,在serverB上,创建一个 shell 脚本,该脚本调用您的代码构建脚本、docker 构建脚本,并最后运行新的 docker 映像。让我们调用这个脚本do_it_all.sh

确保chmod 755所有 shell 脚本都已安装。

现在,在serverA上,您有一个包含源代码的目录。 scp将该目录复制到serverB 的目录中Dockerfile

接下来,从serverA使用sshdo_it_all.sh调用serverB。这将构建您的代码、构建您的映像并部署容器,而无需额外的软件、软件包、git、DNS 记录等。

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

示例脚本/命令:

在服务器B上

构建_image.sh:

#!/bin/bash
sudo docker build -t my_image
Run Code Online (Sandbox Code Playgroud)

build_code.sh(可选,根据您的代码进行调整):

#!/bin/bash
cd /path/to/my/code
./configure
make
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

在服务器A上

scp -r /path/to/my/code serverB:/path/to/my/dockerfile
ssh serverB '/path/to/my/dockerfile/do_it_all.sh'
Run Code Online (Sandbox Code Playgroud)

应该是这样。根据您的系统进行调整。

要部署到全新的系统,只需在serverA上编写一个脚本,用于在serverBssh上复制创建必要的目录。接下来,使用.conf 将您的构建脚本和代码从serverA复制到serverB。然后使用从serverA在serverB上运行。 ssh serverB 'mkdir /path/to/dockerfile'Dockerfilescpdo_it_all.shssh