使用Travis CI和Docker进行连续部署

在CI环境中自动部署Docker镜像的最佳方式是什么?

在使用Travis CI构build一个简单的Web项目并使用Dockerfile构build相应的Docker镜像之后,是否有自动将该镜像部署到云提供者的方法?

现在,Dockerfile将基础镜像拖到Travis构build机器上,并根据Dockerfile中的指令构build镜像。 在这一点上,如果构build成功,我可以将其推送到Docker Hub,尽pipe我不需要将此映像保存到Docker中心,但是我认为将成功构build的Docker映像部署到云提供者(IE。DigitalOcean,Linode ,或AWS)并启动/运行映像。

直接推送到主机看似理想,但我认为它忽略了主机可能出现故障或可能需要复制的事实。

如果直接将其推送到产品主机,并且该主机closures,则无需重新启动整个CIpipe道就可以启动另一个主机。

如果您推送到中介(集线器或dockerregistry),则可以根据需要创build任意数量的主机,而无需重新运行构build。 您也可以很容易地恢复一个新的主机(初始化脚本可以拉图像,并开始)。

如果您想,您可以在云提供商上运行自己的registry(而不是使用集线器)。

对于静态网站,您可能需要查看Surge 。

否则,您可能需要结合使用docker和AWS EB来查看AWS Elastic Beanstalk命令行界面(AWS EB CLI)。

有关在AWS EB中使用docker的信息,请阅读AWS博客文章

对于AWS EB CLI,以下是AWS EB仪表板边栏的摘录

如果要使用命令行来创build,pipe理和扩展Elastic Beanstalk应用程序,请使用Elastic Beanstalk命令行界面(EB CLI)。 开始使用

 $ mkdir HelloWorld $ cd HelloWorld $ eb init -p PHP $ echo "Hello World" > index.html $ eb create dev-env $ eb open 

要将更新部署到您的应用程序,请使用“eb deploy”。

进一步阅读

  • 安装AWS EB CLI
  • EB CLI命令参考

我有这个同样的问题。

有一个很酷的Docker镜像,叫做Watchtower ,在Docker集线器上检查具有相同图像标签的容器的运行版本。 如果集线器上有更新,那么Watchtower会拉出新的镜像并重新启动正在运行的容器(保留所有的环境variables等)。 对于需要更新的单个容器工作得非常好。

注意:它的确如同跑步一样简单:

 docker run -d \ --name watchtower \ -e REPO_USER="username" -e REPO_PASS="pass" -e REPO_EMAIL="email" \ -v /var/run/docker.sock:/var/run/docker.sock \ drud/watchtower container_to_watch --debug 

我正在寻找同样的东西,但作为docker群的一部分运行的容器…