-
使用官方和经过验证的Docker镜像作为基础镜像。
-
使用特定的Docker镜像版本。
FROM node ===> FROM node:17.0.1 -
使用小尺寸的官方镜像。
- 迷你镜像有更小的攻击面。
- 如果不需要什么特定的系统程序和库,一般选择
alpine版本镜像。
-
优化缓存图像层。
- 一旦中间某个docker layer发生改变,其下游也需要重建。
- 以最小变动的layer向下排序。
-
使用.dockerignore文件。
- 参考链接 : dockerignore
-
利用多阶段构建。
FROM maven AS build ===> 用于构建阶段 build是--from=<name>的命名 COPY --from=build/--from=0/1/2[...] ===> 用于生产阶段 -
使用低权限用户
RUN groupadd -r someuser && useradd -g someuser someuser RUN chown -R someuser:someuser /app USER someuser -
对镜像做漏洞扫描。
- docker scan <IMAGE NAME>:<TAG>
- 背后调用了
synk服务。 - 推送到Docker Hub的Image会自动进行扫描。