gpt4 book ai didi

docker - 用于生产网站的最简单的 Docker 部署工具

转载 作者:行者123 更新时间:2023-12-01 11:16:49 24 4
gpt4 key购买 nike

我对 Docker Hub、Cloud、Swarm、Swarm Mode、docker deploy、docker-compose Deploy、......感到非常困惑

对于适合单个物理服务器功能的生产网站,最简单的 docker 部署实践是什么?

该网站有一个全面的 docker-compose.yml,它启动了大约 12 个服务,涵盖各种 Web 服务器、webpack 构建器和数据库。环境变量用于控制开发或生产。

命令行工具用于将 Webpack 包上传到 S3 存储桶,并将源映射上传到 Sentry。 bundle hash 用作发布 ID,存储在环境变量中(即 HTML 是用 <script src="https://s3.site.com/c578f7cbbf76c117ca56/bundle.js"> 编写的,其中 hash c57... 被写入 docker-compose.yml 中每个服务指向的环境变量文件中)。

我不需要一台以上的服务器,也不需要全面的故障转移策略。我只是想在部署代码更新时避免停机。我是一个单例开发者,所以我不需要 CI 或 CD。

我知道 docker-machine 已被弃用。 Docker Hub 单独处理图像,所以我知道我需要处理“堆栈”或一组相关服务概念的东西。我知道 Docker Cloud 的 stack.yml 文件不支持 buildenv_file键,所以我的 docker-compose.yml 不能直接使用

(在我的 docker-compose.yml 中多次出现以下模式:

build:
context: .
dockerfile: platforms/frontend/server/Dockerfile

在 Dockerfile 中,例如:

COPY platforms/frontend/server /app/platforms/frontend/server

如果不分离构建上下文和 Dockerfile 位置,组合文件似乎无法转换为堆栈文件)。

此外,我认为 Docker Cloud/Swarm 用于管理多个故障转移服务器和循环路由等?我认为我不需要这些。

最后我开始意识到docker-compose deploy存在...这是我想要的工具/策略吗?

最佳答案

让我先纠正一些事情,然后我会进入预期的 Docker 策略,在这种情况下你说你“不需要 CI/CD”,我认为这意味着你将手动部署更新到服务器自己。此工作流不是我建议的团队工作流,但对于“独立开发者”来说它非常好而且简单。

"I understand docker-machine is deprecated."

不是真的。它得到 constant updates ,包括上个月的一个版本。它不是为部署/管理许多服务器而设计的,但如果您真的只需要一个服务器供一个管理员使用,它可以完美地用于远程创建实例、安装 docker 以及设置 TLS 证书以通过 docker CLI 进行远程访问:docker-machine env <nodename>

Finally I started to realise docker-compose deploy exists

那不是命令。也许您正在考虑 Swarm 中的 docker stack deploy?我也不建议将 docker-compose 用于服务器。它没有生产工具和功能。看我的 AMA post on all the reasons to use a single node Swarm

请注意,用于 dev 和 CI/CD 的 docker-compose CLI 工具与 docker-compose.yml 文件不同,我将稍后讨论。

Furthermore, I think that Docker Cloud / Swarm are for managing multiple fail-over servers and round-robin routing and so on? I don't think I need any of this.

Docker Cloud is shutting down in May 2018 ,所以我不会用它来部署堆栈,但如果您不需要节点高可用性,Swarm 在单个节点中非常有用。

好的,对于从本地开发人员到此生产服务器的工作流程:

  1. 在本地手动构建您的镜像并推送到 Docker Hub(或其他注册中心)或我的首选,将代码存储在 GitHub/Bitbucket 中,并让 Docker Hub 在每次提交到特定分支时构建镜像(假设master)。

  2. 您的 docker-compose 文件也是一个堆栈文件。 compose documentation has specific sections 用于“构建”(用于 CI/CD 服务器或本地机器工作流程)和“部署”(Swarm 上的功能)。您应该在本地或通过 Docker Hub 或自定义 CI 服务器构建,而不是在 Swarm 本身中构建。生产工具通常不适用于图像构建。

  3. 一旦您的服务器构建完成(使用 docker-machine),您就可以使用本地 docker CLI 通过 docker-machine env <name> 管理远程 docker 引擎。您将使用 docker swarm init 创建一个单节点 Swarm,瞧,它会接受组合文件(又名堆栈文件)。这些文件与旧的 Docker Cloud 堆栈类似但格式不同。

  4. 现在您可以输入 docker stack deploy -c compose.yml <stackname>,它将使用您设置的环境变量、数据量等启动您的服务。

  5. 对于更新,如果您使用 17.12 或更高版本的 docker(最新的 18.03 甚至更好),您可以设置 update-order: start-first 并确保所有服务都定义了健康检查,这样 docker 才能真正知道它们何时准备就绪用于连接。

  6. 您可以使用覆盖 yaml 文件和 docker-compose config 将许多组合文件分层到单个堆栈部署中。

  7. 对于服务更新,您只需更新撰写文件并重新执行 docker stack deploy,它就会检测到更改。

  8. 请确保您每次都使用唯一的图像标签,以便 Docker 知道要部署哪个特定的 SHA。不要一直使用 <imagename>:latest 期望它确切地知道那是哪个图像。

我希望这对您有所帮助,并在评论中提出更多问题,我可以根据需要更新此答案。

关于docker - 用于生产网站的最简单的 Docker 部署工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com