Add Best practices for writing Dockerfiles

This commit is contained in:
khs1994
2017-12-06 19:29:09 +08:00
parent 79adc251a6
commit 299013f4f7
5 changed files with 349 additions and 6 deletions

View File

@@ -16,7 +16,7 @@ ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
但在某些情况下,如果我们真的是希望复制个压缩文件进去,而不解压缩,这时就不可以使用 `ADD` 命令了。
在 Docker 官方的 [最佳实践文档](https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/) 中要求,尽可能的使用 `COPY`,因为 `COPY` 的语义很明确,就是复制文件而已,而 `ADD` 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 `ADD` 的场合,就是所提及的需要自动解压缩的场合。
在 Docker 官方的 [Dockerfile 最佳实践文档](../../appendix/best_practices.md) 中要求,尽可能的使用 `COPY`,因为 `COPY` 的语义很明确,就是复制文件而已,而 `ADD` 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 `ADD` 的场合,就是所提及的需要自动解压缩的场合。
另外需要注意的是,`ADD` 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。

View File

@@ -12,7 +12,7 @@ USER redis
RUN [ "redis-server" ]
```
如果以 `root` 执行的脚本,在执行期间希望改变身份,比如希望以某个已经建立好的用户来运行某个服务进程,不要使用 `su` 或者 `sudo`,这些都需要比较麻烦的配置,而且在 TTY 缺失的环境下经常出错。建议使用 `gosu`,可以从其项目网站看到进一步的信息:<https://github.com/tianon/gosu>
如果以 `root` 执行的脚本,在执行期间希望改变身份,比如希望以某个已经建立好的用户来运行某个服务进程,不要使用 `su` 或者 `sudo`,这些都需要比较麻烦的配置,而且在 TTY 缺失的环境下经常出错。建议使用 [`gosu`](https://github.com/tianon/gosu)。
```Dockerfile
# 建立 redis 用户,并使用 gosu 换另一个用户执行命令