From f7f71e507041347916ebb3f4856358fcb712bee3 Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Sat, 1 Oct 2022 21:20:19 +0800 Subject: [PATCH] doc: Update `docker.md` `dockerfile` cheatsheet. --- README.md | 2 +- docs/docker.md | 3 +- docs/dockerfile.md | 78 +++++++++++++++++++++++++++++++++++++++------- 3 files changed, 69 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index c25d577..d9ee6f9 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Quick Reference [JavaScript](./docs/javascript.md) [JSON](./docs/json.md) [TOML](./docs/toml.md) -[Markdown](./docs/markdown.md) +[Markdown](./docs/markdown.md) [TypeScript](./docs/typescript.md) diff --git a/docs/docker.md b/docs/docker.md index 2a59db5..cdca383 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -295,4 +295,5 @@ $ docker volume prune ---- - [Dockerfile 备忘清单](./dockerfile.md) _(github.io)_ -- [Docker 官方入门教程](https://docs.docker.com/get-started/) _(docker.com)_ \ No newline at end of file +- [Docker 官方入门教程](https://docs.docker.com/get-started/) _(docker.com)_ +- [Docker入门学习笔记](https://jaywcjlove.github.io/docker-tutorial) _(github.io)_ \ No newline at end of file diff --git a/docs/dockerfile.md b/docs/dockerfile.md index ed7cb02..b6a2264 100644 --- a/docs/dockerfile.md +++ b/docs/dockerfile.md @@ -32,7 +32,7 @@ FROM ruby:2.2.2 FROM golang:1.19-alpine3.16 AS build-env ``` -### 变量 +### 变量 ENV ```dockerfile ENV = ... @@ -55,10 +55,14 @@ ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \ RUN bundle install ``` +`WORKDIR` 指令为任何 `RUN`、`CMD`、`ENTRYPOINT`、`COPY` 和 `ADD` 指令设置工作目录。 + ```dockerfile WORKDIR /myapp ``` +`VOLUME` 指令创建一个具有指定名称的挂载点,并将其标记为保存来自本机主机或其他容器的外部挂载卷。 + ```dockerfile VOLUME ["/data"] # 安装点规范 @@ -66,6 +70,7 @@ VOLUME ["/data"] ```dockerfile ADD file.xyz /file.xyz +# 复制 COPY --chown=user:group host_file.xyz /path/container_file.xyz ``` @@ -75,21 +80,20 @@ COPY --chown=user:group host_file.xyz /path/container_file.xyz ```dockerfile ONBUILD RUN bundle install # 与另一个文件一起使用时 -``` -### 命令 - -```dockerfile -EXPOSE 5900 -CMD ["bundle", "exec", "rails", "server"] +ONBUILD ADD . /app/src +ONBUILD RUN /usr/local/bin/python-build --dir /app/src ``` + + +指令将触发指令添加到镜像中,以便稍后执行,此时镜像用作另一个构建的基础。 ### 在严格的 shell 中运行命令 ```dockerfile ENV my_var SHELL ["/bin/bash", "-euo", "pipefail", "-c"] -# With strict mode: +# 使用严格模式: RUN false # ails 像使用 && 一样构建 RUN echo "$myvar" # 由于拼写错误会抛出错误 RUN true | false # 将脱离管道 @@ -98,7 +102,21 @@ RUN true | false # 将脱离管道 使用 `shell` 将为 shell 命令打开严格模式。 -### 入口点 +### 命令 CMD + + +:- | - +:- | - +`CMD ["executable","param1","param2"]` | (exec 形式,这是首选形式) +`CMD ["param1","param2"]` | (作为 ENTRYPOINT 的默认参数) +`CMD command param1 param2` | (shell形式) + +```dockerfile +EXPOSE 5900 +CMD ["bundle", "exec", "rails", "server"] +``` + +### 入口点 ENTRYPOINT ```dockerfile ENTRYPOINT ["executable", "param1", "param2"] @@ -114,7 +132,7 @@ ENTRYPOINT exec top -b 这将使用 shell 处理来替换 shell 变量,并将忽略任何 `CMD` 或 `docker run` 命令行参数。 -### 元数据 +### 元数据 LABEL ```dockerfile LABEL version="1.0" @@ -135,6 +153,41 @@ LABEL multi.label1="value1" \ other="value3" ``` +### ARG + +```dockerfile +ARG [=] +``` + +指令定义了一个变量,在构建时通过 `docker build` 命令使用 --build-arg `=` 标志将其传递给构建器。 + +```dockerfile +FROM busybox +# user1 默认值为 someuser +ARG user1=someuser +ARG buildno=1 +``` + +### .dockerignore 文件 + +```ignore +# 注释说明 +*/temp* +*/*/temp* +temp? +``` + +---- + +:- | - +:- | - +`# comment` | 忽略 +`*/temp*` | 在根的任何直接子目录中
排除名称以 `temp` 开头的文件和目录 +`*/*/temp*` | 从根以下两级的任何子目录中
排除以 `temp` 开头的文件和目录 +`temp?` | 排除根目录中名称为
`temp` 的单字符扩展名的文件和目录 + +如果此文件存在,排除与其中的模式匹配的文件和目录,有利于避免 `ADD` 或 `COPY` 将敏感文件添加到镜像中。匹配是使用 Go 的 [filepath.Match](https://golang.org/pkg/path/filepath#Match) 规则完成的。 + ### 主要命令 @@ -152,7 +205,7 @@ LABEL multi.label1="value1" \ `EXPOSE [/...]` | 运行时侦听指定的网络端口 ### 服务静态网站的最小 Docker 镜像 - + ```dockerfile FROM lipanski/docker-static-website:latest @@ -175,4 +228,5 @@ CMD ["/busybox", "httpd", "-f", "-v", "-p", "3000", "-c", "httpd.conf"] ## 也可以看看 - [Dockerfile reference](https://docs.docker.com/engine/reference/builder/) _(docker.com)_ -- [Docker 备忘清单](./docker.md) _(github.io)_ \ No newline at end of file +- [Docker 备忘清单](./docker.md) _(github.io)_ +- [Docker入门学习笔记](https://jaywcjlove.github.io/docker-tutorial) _(github.io)_ \ No newline at end of file