5 .dockerignore丢弃一些垃圾文件
当我们构建镜像的时候我们不需要项目的所有内容,来运行我们内部的应用程序,像目标或构建文件夹这样的自动生成的文件夹,我们不需要自述文件,因此,docker ignore文件是非常有必要的,
6. 多阶段构建(Multi-Stage Builds)
在运行容器的时候不需要测试依赖项、临时文件、开发环境工具、构建工具。但我们docker构建的时候却需要它们
我们分成build和stage两个阶段
build阶段是在以maven为base image并且取名为build的镜像构建打包
stage阶段是在以tomcat为base image的镜像拷贝build镜像里生成新的包,并运行应用程序,第一阶段的依赖工具被丢弃。
7. 使用最小权限的用户
有的镜像中已经捆绑了一个默认的专用用户,例如node:10-alpine中有node用户。
8. 构建镜像时要扫描安全漏洞
docker login 登陆仓库
docker scan参数:
Options: --accept-license 接受使用第三方扫描提供商 --dependency-tree 显示带有扫描结果的依赖树 --exclude-base 从漏洞扫描中排除基础镜像 (requires --file) -f, --file string 与image关联的Dockerfile,提供更详细的结果 --group-issues 聚合重复的漏洞并将其分组为1个漏洞 (requires --json) --json 以json格式输出结果 --login 使用可选令牌(带有--token)向扫描提供程序进行身份验证,如果为空则使用web base令牌 --reject-license 拒绝使用第三方扫描提供商 --severity string 只报告提供级别或更高的漏洞(low|medium|high) --token string 登录到第三方扫描提供程序的认证令牌 --version 显示扫描插件版本
#指定Dockerfile $ docker scan -f Dockerfile myapp:1.0 #不扫描该镜像的基础镜像 $ docker scan -f Dockerfile --exclude-base myapp:1.0 #以json显示 docker scan --json myapp:1.0 | jq #聚合分组显示扫描信息 $ docker scan --json --group-issues myapp:1.0 #显示指定级别的漏洞,只有高于此级别的漏洞才会显示出来 $ docker scan --severity=medium myapp:1.0