|
Docker 团队正在探索 AI 的应用[1],本期介绍的主要内容是 AI 生成 Dockerfile 的探讨,文中示例是基于 Node.js 项目。 当我们让 ChatGPT 为你的项目写一个 Dockerfile 时,它会与你进行对话,要求你提供项目的某些详细信息。 如下图所示,因为我这个近期问 ChatGPT Node.js 相关问题多些,因此 ChatGPT 也推断出了是 Node.js 类项目,但如果是需要为一个其它语言的项目写 Dockerfile 呢?  Docker 团队提出,我们也可以为助手配备一个工具,直接从项目中提取这些信息,而不是询问用户。 一种替代方案为:每当助手被要求创建 Dockerfile 时,给它两个高层次的指示: - 分析完成后,创建一个 Dockerfile 来构建该项目。
此外,还为 LLM 提供了两个函数定义[2]: - analyze_project:分析项目以确定其构建方式。
[ { "name":"analyze_project", "description":"Analyzeaprojecttodeterminehowitshouldbebuilt" }, { "name":"write_files", "description":"writeasetoffilestomyproject", "parameters":{ "...":"..." } } ]
通过这两个功能,助手可以直接在用户的项目中写入 Dockerfile。然而,如果没有最佳实践,实际生成的 Dockerfile 内容可能不会很理想。 为了改善生成的 Dockerfile 内容,Docker 团队提取了一些为 Node.js 项目编写 Dockerfile 的最佳实践。例如,使用 3 个阶段 "deps"、"build"、Scout。 以下为 Docker 团队助手生成的 Dockerfile 内容 #Stage1-Downloadingdependencies FROMnode:22-slimASdeps#选择基础镜像时,获取推荐的标签 WORKDIR/usr/src/app COPYpackage*.json./ RUN--mount=type=cache,target=/root/.npmnpmci--omit=dev
#Stage2-Buildingapplication FROMdepsASbuild RUN--mount=type=cache,target=/root/.npmnpmci&&npmbuild
#Stage3-UsingarecommendedbaseimagefromScout FROMnode:22-slim WORKDIR/usr/src/app COPY--from=deps/usr/src/app/node_modules./node_modules COPY--from=build/usr/src/app/dist./dist CMD["npm","start"]
AI 时代,大家都在探索相关的应用场景。Docker 团队也在探索让生成式 AI 助手提高生成 Dockerfile 内容的能力,期待这个小助手能早日来临,实现根据项目自动分析来生成一份最佳实践的 Dockerfile。 |