我有点难以理解如何利用 Docker 来利用我现有的基础设施代码。
我有一个使用 capistrano 推送部署的 Ruby on Rails 应用程序。我想使用这个 capistrano 脚本创建一个新的 docker 镜像。我可以推送部署,然后使用部署到目录在现有镜像之上进行部署,比如说精确部署(因为这与我的目标操作系统相匹配)。
这是正确的方法吗?或者我遗漏了什么?
答案1
@EightyEight
我们使用 docker 和 Jenkins 进行部署。我们将代码始终保留在 docker 之外,直到我们想要发布和运行它为止。
您应该在想要部署应用程序的所有服务器/实例上都拥有 Docker 映像。
您应该分两步完成整个部署。
1)在Capistrano中为您要部署的应用程序的标签/分支构建一个包(tar或gz)。
2)另外还要按照以下步骤进行实际部署:
i) 将包推送到您想要部署应用程序的所有服务器并解压该包。
ii) 如果任何容器已经在为同一应用程序运行,则停止,并使用安装有适当容器和代码的容器运行该容器。
例如 docker run -d -p 8000:8000 -v /path/to/the/tag:/deployment/path/inside/docker --name (NameOfContainer) --env TERM=xterm accountid/imagename:version
答案2
通常在 Docker 中,在容器中部署应用程序的首选方式是通过docker文件,可以替代capistrano脚本的作用,主要是在容器上运行命令(安装包,执行git clone,启动服务和应用程序等)。
您定义一个带有基本映像容器和要执行的命令列表的 dockerfile,然后通过以下方式构建容器:
docker build {{your_repository_containing_dockerfile}}
因此,您可以将 capistrano 脚本转换为 dockerfile,并用 Docker deploy 替换 Capistrano deploy。