继续dockerfile文档的阅读

This commit is contained in:
2023-02-10 17:03:41 +08:00
parent 1190043b71
commit ab88027378

View File

@@ -304,7 +304,7 @@ RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y ...
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y ...
```
# ADD
## ADD
ADD指令拥有两种形式
```dockerfile
ADD [--chown=<user>:<group>] [--checksum=<checksum>] <src>... <dest>
@@ -323,4 +323,58 @@ ADD hom?.txt /mydir/
```
`dest`是一个绝对路径,或是相对于`WORKDIR`的相对路径,`src`将会被复制到目标容器中。
如果想要ADD包含特殊字符的文件或目录例如`[`或`]`),需要对这些路径进行转义。
所有新文件和目录创建时UID和GID都是0如果想要为新建文件或目录指定其他的值可以使用`--chown`选项来指定`username:groupname`或`uid:gid
### ADD --chown
所有新文件和目录创建时UID和GID都是0如果想要为新建文件或目录指定其他的值可以使用`--chown`选项来指定`username:groupname`或`uid:gid.
在仅仅指定了username或UID而没有指定groupname或GID的情况下将会把GID设置为和UID相同的值。
ADD指令的使用示例如下
```dockerfile
ADD --chown=55:mygroup files* /somedir/
ADD --chown=bin files* /somedir/
ADD --chown=1 files* /somedir/
ADD --chown=10:11 files* /somedir/
```
- 如果`src`是一个本地archive并且以一种可识别的格式压缩那么其会被解压为一个目录从remote获取的资源不会被解压。
- 如果制定了多个`src`,则`dest`必须是目录,并且`dest`必须以`/`结尾。
- 如果`dest`没有指定`/`作为结尾,那么`dest`被视作一个常规文件。
- 如果`dest`不存在,那么其会自动创建路径中所有的缺失目录。
### ADD \<git ref\> \<dir\>
该形式允许添加一个git仓库到镜像中而不需要镜像中存在git命令。
```dockerfile
ADD [--keep-git-dir=<boolean>] <git ref> <dir>
```
`--keep-git-dir`选项代表是否保存git仓库中的.git目录该选项的默认值是`false`.
## COPY
COPY指令可以按如下两种形式编写
```dockerfile
COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]
```
如果路径中含有空格,使用第二种形式。
COPY命令从`src`中复制文件和目录并且将其添加到容器文件系统中,添加路径为`dest`.
COPY的使用示例如下所示
```dockerfile
COPY hom* /mydir/
```
类似`ADD --chown``COPY`命令也支持`COPY --chown`的用法.
### COPY --from
COPY支持`--from=<name>`选项,可以将`source`设置为先前的build stage而不是build context。**如果找不到具有相同名称的build stage则会采用具有相同名称的image**。
### ENTRYPOINT
`ENTRYPOINT`命令具有两种格式:
- ***exec***格式:
```dockerfile
ENTRYPOINT ["executable", "param1", "param2"]
```
- ***shell***格式:
```dockerfile
ENTRYPOINT command param1 param2
```
ENTRYPOINT允许像一个可执行程序一样配置容器。
例如如下示例使用默认内容启动了一个nginx实例监听80端口
```dockerfile
docker run -i -t --rm -p 80:80 nginx
```
`docker run <image>`命令之后的命令行参数将添加到***exec***形式ENTRYPOINT命令的所有元素之后其允许参数被传递给entry point。
例如,`docker run <image> -d`将会把`-d`传递给entry point。
> 可以通过`docker run --entrypoint`命令来覆盖ENTRYPOINT指令。