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

Continuous Deployment Using Travis CI and Docker

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

在使用 Travis CI 构建一个简单的 Web 项目并使用 Dockerfile 构建相应的 Docker 图像后,有没有办法自动将该图像部署到云提供商?

现在,Docker文件将基础镜像下载到 Travis 构建机器,并根据 Docker 文件中的说明构建镜像。此时如果构建成功,我可以将它推送到 Docker Hub,尽管我不需要将此图像保存到 Docker hub,我设想的是部署成功构建的 Docker 图像到云提供商(IE。DigitalOcean、Linode 或 AWS)和 starting/running 图像。

虽然直接推送到主机看起来很理想,但我认为它忽略了主机可能会失败或可能需要复制的事实。

如果您直接推送到生产主机,而该主机出现故障,您将无法在不重新运行整个 CI 管道的情况下启动另一个主机。

如果您推送到中介(集线器或 docker 注册表),您可以根据需要创建任意数量的主机,而无需重新 运行 构建。您还可以非常轻松地在新主机上恢复(初始化脚本可以直接拉取映像并启动)。

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

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

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

要将 docker 与 AWS EB 结合使用,请阅读此 AWS Blog post

对于 AWS EB CLI,这是 AWS EB 仪表板侧边栏的摘录

If you want to use a command line to create, manage, and scale your Elastic Beanstalk applications, please use the Elastic Beanstalk Command Line Interface (EB CLI). Get Started

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

To deploy updates to your applications, use ‘eb deploy’.

进一步阅读

我也有同样的问题。

有一个非常酷的 docker 镜像,名为 Watchtower,它检查 Docker 集线器上具有相同镜像标签的容器的 运行 版本。如果集线器上有更新,Watchtower 会拉取更新的图像并重新启动 运行 容器(保留所有环境变量等)。对于需要更新的单个容器非常有效。

注意:它真的很简单 运行:

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 集群的一部分...