首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Docker和Docker-Swarm运行Symfony 5项目的最佳实践

使用Docker和Docker-Swarm运行Symfony 5项目的最佳实践
EN

Stack Overflow用户
提问于 2021-01-22 16:35:23
回答 1查看 236关注 0票数 0

我有一个现有的Symfony 5项目,其中包含一个mysql数据库和一个nginx and服务器。我想对接这个项目,但在网上我发现了不同的意见如何做。

我的计划是编写一个多阶段的Docker文件,至少包含一个开发阶段和一个生产阶段,并使用docker-swarm进行构建。在我看来,在构建过程中安装完整的代码并拥有多个composer.json文件(每个阶段一个)是很有用的。在网络上,我发现并不是每次构建都安装新的应用程序,而是将供应商和var文件夹复制到容器中。另一种意见是在容器的构建过程准备就绪后开始安装。但我认为,当应用程序成功部署时,服务还没有准备好。

您认为这里的最佳实践是什么?

EN

回答 1

Stack Overflow用户

发布于 2021-01-22 16:46:16

为所有环境构建完全相同的映像

请勿为prod和dev构建两个不同的映像。docker的主要好处之一是,您可以为生产和开发提供完全相同的环境。

您应该使用ENV vars控制您的环境。例如,您可以为dev启用Xdebug,为prod禁用它。

Composer可以选择安装开发包和生产包。您应该使用此功能。

如果您决定将一些包安装到dev。尝试在两个环境中使用相同的Dockerfile。不要使用Dockerfile.prodDockerfile.dev,这会在将来带来一些混乱。

多阶段构建

如果您的构建环境需要比运行时多得多的依赖项,则可以执行the official Docker documentation中描述的多阶段构建。

它的例子是程序的编译。在编译过程中,您需要大量的库,并且只生成一个二进制文件。所以你的运行时不需要所有的开发库。

第一个阶段可以在第二个阶段构建,你只需复制二进制文件就可以了。

将所有包构建到docker镜像中

您应该在构建Docker镜像时构建您的应用程序。所有的库和包都应该复制到镜像中,不应该在应用程序启动时安装它们。原因:

  • 应用程序启动速度更快当一切都安装好了
  • 的一些库可以在将来更改或删除。你会遇到麻烦,而且你可能会花很多时间去调试。

实施运行状况检查

你应该实现Health-Check。应用程序需要外部依赖项,如密码、API密钥、一些非敏感数据。通常,我们使用环境变量注入数据。

在启动应用程序之前,您应该检查是否传递了所有必需的变量,并具有良好的格式。您可以实现Health-Check,也可以在入口点中检查它。

在解决方案发布之前对其进行测试

你应该实现测试你的镜像的机制。例如,在配置项中:

  • 在构建镜像之前运行您的单元测试
  • 构建Docker镜像
  • 使用虚拟数据启动新的应用程序镜像。如果您需要PostgreSQL DB,则可以启动另一个容器,仅当所有测试都通过时,
  • 才会运行PostgreSQL

新版本的映像。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65841744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档