diff --git a/docker/docker file.md b/docker/docker file.md index 5589493..5d80b29 100644 --- a/docker/docker file.md +++ b/docker/docker file.md @@ -204,4 +204,62 @@ RUN --mount=[type=][,option=[,option=]...] | `source` | `from`中的source path | | `from` | `source`根路径的build stage或image name,默认情况下为build context | | `rw`,`readwrite` | 允许在mount后的文件系统执行写入操作,写入信息将会被丢弃 | -> RUN --mount=type=bind允许将context或镜像中的目录绑定到build container中,并且只有在该条RUN指令运行时,才可以访问挂载的目录。 \ No newline at end of file +> RUN --mount=type=bind允许将context或镜像中的目录绑定到build container中,并且只有在该条RUN指令运行时,才可以访问挂载的目录。 +## RUN --network +控制该命令运行在哪种网络环境下,支持如下网络环境: +`syntax`:RUN --network=type +- default:运行在默认网络环境下 +- none:运行在无网络访问的环境下 +- host:运行在宿主机的网络环境下 +## CMD +CMD命令具有三种形式: +- CMD ["executable","param1","param2"] (exec form) +- CMD ["param1","param2"] (作为ENTRYPOINT的默认参数) +- CMD command param1 param2 (shell form) + +在dockerfile中,只有一条CMD指令能够生效,如果dockerfile中存在多条CMD指令,那么只有最后一条CMD指令能够生效。 +CMD指令的主要作用是为执行中的容器提供默认值。该默认值可以包含可执行文件,也可以省略可执行文件,将CMD指令的参数作为ENTRYPOINT指令的默认参数。 +> 如果CMD指令用于向ENTRYPOINT指令提供默认参数,那么ENTRYPOINT指令和CMD指令都要按照JSON数组的格式进行声明 + +当使用exec form或shell form时,CMD指令制定了镜像运行时默认执行的command。 +如果使用CMD的shell form,那么command将会在`/bin/sh -c`中执行 +```dockerfile +FROM ubuntu +CMD echo "This is a test." | wc - +``` +如果想不在shell中运行CMD,那么必须将command作为JSON ARRAY传递,并且指定可执行文件的full path。 +```dockerfile +FROM ubuntu +CMD ["/usr/bin/wc","--help"] +``` +如果用户在`docker run`命令中指定了参数,那么参数将会覆盖CMD命令提供的默认值。 +## LABEL +LABEL命令的格式如下所示: +```dockerfile +LABEL = = = ... +``` +LABEL命令向image中添加元数据,一个LABEL是一个key-value对,如果想要在LABEL value中包含空格,需要加入双引号或是转义符: +```dockerfile +LABEL "com.example.vendor"="ACME Incorporated" +LABEL com.example.label-with-value="foo" +LABEL version="1.0" +LABEL description="This text illustrates \ +that label-values can span multiple lines." +``` +可以在同一行LABEL命令中指定多个key-value pair。 +**在父镜像中定义的LABEL能被继承,如果父镜像和子镜像中都定义了相同的LABEL,那么最近的LABEL定义将会覆盖父镜像的同名LABEL。 +如果要查看一个镜像的LABEL,可以通过`docker image inspect`命令来进行查看,可以通过`--format`指定显示的格式: +```shell +# docker image inspect --format='' myimage +``` +```json +{ + "com.example.vendor": "ACME Incorporated", + "com.example.label-with-value": "foo", + "version": "1.0", + "description": "This text illustrates that label-values can span multiple lines.", + "multi.label1": "value1", + "multi.label2": "value2", + "other": "value3" +} +```