cac*_*ico 3 web-deployment docker docker-swarm
我对 Docker Hub、Cloud、Swarm、Swarm 模式、docker 部署、docker-compose 部署、...
对于完全适合单个物理服务器功能的生产网站,最简单的 docker 部署实践是什么?
有问题的站点有一个全面的 docker-compose.yml,它启动了大约 12 个服务,涵盖各种 Web 服务器、webpack 构建器和数据库。环境变量用于控制开发或生产。
命令行工具用于将 Webpack 包上传到 S3 存储桶,并将源映射上传到 Sentry。捆绑散列用作发布 ID,它存储在环境变量中(即 HTML 写入的<script src="https://s3.site.com/c578f7cbbf76c117ca56/bundle.js">位置将散列c57...写入 中的每个服务指向的环境变量文件中docker-compose.yml)。
我不需要多于一台服务器,也不需要全面的故障转移策略。我只想在部署代码更新时避免停机。我是一个单一的开发人员,所以我不需要 CI 或 CD。
我知道 docker-machine 已被弃用。Docker Hub 单独处理图像,所以我知道我需要一些处理“堆栈”或一组相关服务概念的东西。我知道 Docker Cloud 的 stack.yml 文件不支持build或env_file密钥,所以我的 docker-compose.yml 不能直接使用
(在我的docker-compose.yml书中,我多次出现以下模式:
build:
context: .
dockerfile: platforms/frontend/server/Dockerfile
Run Code Online (Sandbox Code Playgroud)
在 Dockerfile 中,例如:
COPY platforms/frontend/server /app/platforms/frontend/server
Run Code Online (Sandbox Code Playgroud)
如果没有分离构建上下文和 Dockerfile 位置,撰写文件似乎不会转换为堆栈文件)。
此外,我认为 Docker Cloud / Swarm 用于管理多个故障转移服务器和循环路由等?我不认为我需要这些。
最后我开始意识到docker-compose deploy存在......这是我所追求的工具/策略吗?
让我先纠正一些事情,然后我将进入预期的 Docker 策略,在这种情况下,您说“不需要 CI/CD”,我假设这意味着您将自己手动将更新部署到服务器。这个工作流程不是我为团队推荐的,但对于“单人开发”来说,它很棒而且很容易。
“我知道 docker-machine 已被弃用。”
不对。它不断更新,包括上个月的一个版本。它不是为部署/管理多台服务器而设计的,但如果您真的只需要一台服务器供单个管理员使用,那么它非常适合远程创建实例、安装 docker 以及通过 docker CLI 设置用于远程访问的 TLS 证书:docker-machine env <nodename>
最后我开始意识到 docker-compose deploy 存在
那不是命令。也许你docker stack deploy在 Swarm 中想到?我也不建议将 docker-compose 用于服务器。它没有生产工具和功能。有关使用单节点 Swarm 的所有原因,请参阅我的AMA 帖子。
请注意,用于开发和 CI/CD 的 docker-compose CLI 工具与 docker-compose.yml 文件不同,我将稍后讨论。
此外,我认为 Docker Cloud / Swarm 用于管理多个故障转移服务器和循环路由等?我不认为我需要这些。
Docker Cloud 将于 2018 年 5 月关闭,因此我不会使用它来部署堆栈,但如果您不需要节点高可用性,Swarm 在单个节点中非常出色。
好的,对于从本地开发人员到此生产服务器的工作流程:
在本地手动构建您的映像并推送到 Docker Hub(或其他注册表)或我的首选,将代码存储在 GitHub/Bitbucket 中,并在每次提交到特定分支时由 Docker Hub 构建映像(假设master)。
您的 docker-compose 文件也是一个堆栈文件。在撰写文档具有特定部分的“构建”(无论是CI / CD服务器或本地计算机的工作流程)和“部署”(对群功能)。您应该在本地或通过 Docker Hub 或自定义 CI 服务器进行构建,而不是在 Swarm 本身中构建。生产工具通常不用于图像构建。
一旦您的服务器构建好(使用 docker-machine),您就可以使用本地 docker CLI 来管理远程 docker 引擎docker-machine env <name>。您将创建一个单节点 Swarm,docker swarm init瞧,它将接受撰写文件(又名堆栈文件)。这些文件与旧的 Docker Cloud 堆栈类似但格式不同。
现在您可以docker stack deploy -c compose.yml <stackname>使用您设置的环境变量、数据卷等来启动您的服务。
对于更新,如果您使用 17.12 或更高版本的 docker(最新的 18.03 甚至更好),您可以获得零停机时间,您设置update-order: start-first,并确保所有服务都定义了健康检查,以便 docker 真正知道它们何时准备好连接。
您可以使用覆盖 yaml 文件,并将docker-compose config许多组合文件分层到单个堆栈部署中。
对于服务更新,您只需更新撰写文件并重新执行docker stack deploy,它就会检测更改。
确保每次都使用唯一的图像标签,以便 Docker 知道要部署哪个特定的 SHA。不要继续使用<imagename>:latest期望它确切地知道那是哪个图像。
我希望这会有所帮助,并在评论中提出更多问题,我可以根据需要更新此答案。
| 归档时间: |
|
| 查看次数: |
901 次 |
| 最近记录: |