继续docker文档的阅读

This commit is contained in:
2023-02-09 00:02:24 +08:00
parent d911e59895
commit 9b63b9df01

View File

@@ -205,3 +205,61 @@ RUN --mount=[type=<TYPE>][,option=<value>[,option=<value>]...]
| `from` | `source`根路径的build stage或image name默认情况下为build context | | `from` | `source`根路径的build stage或image name默认情况下为build context |
| `rw`,`readwrite` | 允许在mount后的文件系统执行写入操作写入信息将会被丢弃 | | `rw`,`readwrite` | 允许在mount后的文件系统执行写入操作写入信息将会被丢弃 |
> RUN --mount=type=bind允许将context或镜像中的目录绑定到build container中并且只有在该条RUN指令运行时才可以访问挂载的目录。 > 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 <key>=<value> <key>=<value> <key>=<value> ...
```
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"
}
```