作者: Ju4t
以下开发模式已被证明有助于人们使用 Docker 构建应用程序。
启动容器或服务时,小图像更快地通过网络拉取并更快地加载到内存中。有一些经验法则可以保持较小的图像尺寸:
使用多阶段构建。例如,您可以使用该maven映像来构建您的 Java 应用程序,然后重置为该tomcat映像并将 Java 工件复制到正确的位置以部署您的应用程序,所有这些都在同一个 Dockerfile 中。这意味着您的最终映像不包含构建中引入的所有库和依赖项,而仅包含运行它们所需的工件和环境。
如果您需要使用不包含多阶段构建的 Docker 版本,请尝试通过最小化RUNDockerfile 中单独命令的数量来减少映像中的层数。您可以通过将多个命令合并到RUN一行并使用 shell 的机制将它们组合在一起来做到这一点。考虑以下两个片段。第一个在图像中创建两个图层,而第二个只创建一个。
RUN apt-get -y update
RUN apt-get install -y python
RUN apt-get -y update && apt-get install -y python
如果您有多个具有很多共同点的图像,请考虑使用共享组件创建您自己的 基础图像,并以此为基础创建您的独特图像。Docker 只需要加载一次公共层,并且将它们缓存起来。这意味着您的衍生镜像更有效地使用 Docker 主机上的内存并更快地加载。
要保持生产映像精简但允许调试,请考虑使用生产映像作为调试映像的基础映像。可以在生产映像之上添加额外的测试或调试工具。
在构建映像时,始终使用有用的标签来标记它们,这些标签会编码版本信息、预期目标(prod
或test
,例如)、稳定性或在不同环境中部署应用程序时有用的其他信息。不要依赖自动创建的latest标签。
当您签入对源代码控制的更改或创建拉取请求时,使用 Docker Hub或其他 CI/CD 管道自动构建和标记 Docker 映像并对其进行测试。
通过要求您的开发、测试和安全团队在将映像 部署到生产环境之前对它们进行签名,可以更进一步。这样,在将映像部署到生产中之前,它已经由例如开发、质量和安全团队进行测试和签署。
https://docs.docker.com/develop/dev-best-practices/