Docker部署Django时GNU gettext工具是否仅需在开发环境安装
Django生产环境Docker镜像是否需要安装GNU gettext工具
常规场景下不需要在生产环境的Docker镜像中安装GNU gettext工具,你开发环境添加的如下配置仅保留在dockerfile.dev中即可:
RUN apt update RUN apt install gettext -y
核心原因
Django的i18n国际化流程分为两个完全独立的阶段,仅开发/构建阶段依赖gettext:
- 开发/构建阶段:需要调用
makemessages提取代码中的待翻译字符串、生成.po翻译模板,再调用compilemessages将填写好的.po文件编译为二进制.mo文件,这两个命令依赖GNU gettext工具链,所以开发环境需要安装。 - 生产运行阶段:Django只会直接读取已经编译完成的
.mo文件渲染翻译内容,不需要调用任何gettext的工具,无额外依赖。
如果在生产环境安装不必要的gettext工具,只会无意义增大镜像体积、增加系统依赖攻击面、拉长镜像构建耗时,完全没有必要。
仅有的需要安装的特殊场景
只有当你的生产环境需要动态执行翻译提取、编译操作时,才需要安装gettext,比如你有在运行时动态生成翻译内容的定制需求,这类场景占比极低,常规业务完全不会涉及。
最佳实践
你可以提前在本地开发环境或者CI流程中完成.mo文件的编译,再将编译好的翻译文件和业务代码一起打包到生产镜像中。如果要在镜像构建环节完成编译,推荐使用Docker多阶段构建:在构建阶段安装gettext编译翻译文件,最终的生产运行镜像只拷贝编译产物和业务代码,不需要安装任何额外依赖,进一步精简镜像体积。
内容的提问来源于stack exchange,提问作者CSSer
相关产品推荐
相关产品推荐

