在CI环境中自动部署Docker镜像的最佳方法是什么?
使用Travis CI构建一个简单的Web项目并使用Dockerfile
构建相应的Docker镜像后,是否有办法自动将该映像部署到云提供程序?
现在,Dockerfile将基本映像下拉到Travis构建机器,并根据Dockerfile中的指令构建映像。此时如果构建成功,我可以将它推送到Docker Hub,虽然我没有必要将此图像保存到Docker中心,我设想将成功构建的Docker镜像部署到云提供商(IE.DigitalOcean,Linode)或AWS)并启动/运行映像。
答案 0 :(得分:2)
虽然直接推送到主机似乎是理想的,但我认为它忽略了主机可能出现故障或可能需要复制的事实。
如果您直接推送到prod主机,并且该主机出现故障,则在没有重新运行整个CI管道的情况下,您无法启动另一个主机。
如果您推送到中介(集线器或docker注册表),您可以根据需要创建任意数量的主机,而无需重新运行构建。您也可以非常轻松地在新主机上恢复(初始化脚本只需拉动图像并启动)。
如果您愿意,可以在云提供商处运行自己的注册表(而不是使用集线器)。
答案 1 :(得分:1)
对于静态网站,您可能需要查看Surge。
否则,您可能希望结合使用带有AWS EB的docker来查看AWS Elastic Beanstalk命令行界面(AWS EB CLI)。
对于在AWS EB中使用docker,请阅读此AWS Blog post
对于AWS EB CLI,此处摘自AWS EB仪表板侧栏
如果您想使用命令行来创建,管理和扩展您的 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”。
进一步阅读
答案 2 :(得分:0)
我有同样的问题。
有一个名为Watchtower的非常酷的泊坞窗图像,用于检查Docker集线器上具有相同图像标签的容器的运行版本。如果集线器上有更新,Watchtower会拉出较新的映像并重新启动正在运行的容器(保留所有env变量等)。适用于需要更新的单个容器。
注意:它真的像跑步一样简单:
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
我正在寻找相同的东西,但对于作为码头工人群的一部分而运行的容器......