测验:Dockerfile 语法
我在 RUN 中将收到的值写为ARG TOKEN,并在同一 RUN 中删除了该文件。安全吗?
- 安全——因为我们从同一层删除了它
- 安全 — ARG 不存储在图像中
- 不安全——痕迹可能会保留在构建历史和较低层中
- 无论建筑商类型如何,均安全
不使用 USER app 而推荐 USER 10001:10001 的实际原因是什么?
- 用数字书写时搜索速度更快。
- 如果写了名称,则需要/etc/passwd,并且图像会变大。
- 因为 USER 仅支持数字
- Kubernetes runAsNonRoot 拒绝该 pod,因为它无法根据名称确定它是否为 root。
在 COPY . /app 的下一行使用 RUN chown -R app:app /app 会怎样?
- 没有效果
- 仅权限发生变化,大小保持不变。
- 缓存变得更好
- 整个文件被重写在一个新层上,几乎使图像增加了一倍。
我在镜像中添加了HEALTHCHECK,但是在Kubernetes中没有效果。为什么?
- HEALTHCHECK 因为语法写错了
- Kubernetes 忽略镜像的 HEALTHCHECK 并分别查看活跃度/就绪度探测。
- 这是因为探测器看到的端口不同。
- 这是因为 HEALTHCHECK 仅在构建时运行,并在执行期间关闭。
为什么ADD release.tar.gz /opt/app/会很危险?
- 传输速度总是比COPY慢
- 所有提取的文件权限都被重置
- 由于它是自动解压缩的,因此文件可能会写入到非预期位置,具体取决于存档中的路径。
- 一个 ADD 命令总是创建两层。
EXPOSE 8080实际上是做什么的?
- 在主机上打开8080端口
- 设置容器的防火墙
- 文档 - 告诉该图像使用什么端口
- 自动创建端口映射