docker_practice/image/dockerfile/copy.md
Kang Huaishuai ea00e0d82a
Update format
Signed-off-by: Kang Huaishuai <khs1994@khs1994.com>
2021-03-07 15:29:05 +08:00

37 lines
1.6 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# COPY 复制文件
格式
* `COPY [--chown=<user>:<group>] <源路径>... <目标路径>`
* `COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]`
`RUN` 指令一样也有两种格式一种类似于命令行一种类似于函数调用
`COPY` 指令将从构建上下文目录中 `<源路径>` 的文件/目录复制到新的一层的镜像内的 `<目标路径>` 位置比如
```docker
COPY package.json /usr/src/app/
```
`<源路径>` 可以是多个甚至可以是通配符其通配符规则要满足 Go [`filepath.Match`](https://golang.org/pkg/path/filepath/#Match) 规则,如:
```docker
COPY hom* /mydir/
COPY hom?.txt /mydir/
```
`<目标路径>` 可以是容器内的绝对路径也可以是相对于工作目录的相对路径工作目录可以用 `WORKDIR` 指令来指定目标路径不需要事先创建如果目录不存在会在复制文件前先行创建缺失目录
此外还需要注意一点使用 `COPY` 指令源文件的各种元数据都会保留比如读执行权限文件变更时间等这个特性对于镜像定制很有用特别是构建相关文件都在使用 Git 进行管理的时候
在使用该指令的时候还可以加上 `--chown=<user>:<group>` 选项来改变文件的所属用户及所属组
```docker
COPY --chown=55:mygroup files* /mydir/
COPY --chown=bin files* /mydir/
COPY --chown=1 files* /mydir/
COPY --chown=10:11 files* /mydir/
```
如果源路径为文件夹复制的时候不是直接复制该文件夹而是将文件夹中的内容复制到目标路径