parent
dfa885f4f0
commit
1b306447ef
|
@ -21,3 +21,12 @@ ADD ubuntu-xenial-core-cloudimg-amd64-root.tar.gz /
|
|||
另外需要注意的是,`ADD` 指令会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。
|
||||
|
||||
因此在 `COPY` 和 `ADD` 指令中选择的时候,可以遵循这样的原则,所有的文件复制均使用 `COPY` 指令,仅在需要自动解压缩的场合使用 `ADD`。
|
||||
|
||||
在使用该指令的时候还可以加上 `--chown=<user>:<group>` 选项来改变文件的所属用户及所属组。
|
||||
|
||||
```Dockerfile
|
||||
ADD --chown=55:mygroup files* /mydir/
|
||||
ADD --chown=bin files* /mydir/
|
||||
ADD --chown=1 files* /mydir/
|
||||
ADD --chown=10:11 files* /mydir/
|
||||
```
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
格式:
|
||||
|
||||
* `COPY <源路径>... <目标路径>`
|
||||
* `COPY ["<源路径1>",... "<目标路径>"]`
|
||||
* `COPY [--chown=<user>:<group>] <源路径>... <目标路径>`
|
||||
* `COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]`
|
||||
|
||||
和 `RUN` 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用。
|
||||
|
||||
|
@ -23,3 +23,12 @@ COPY hom?.txt /mydir/
|
|||
`<目标路径>` 可以是容器内的绝对路径,也可以是相对于工作目录的相对路径(工作目录可以用 `WORKDIR` 指令来指定)。目标路径不需要事先创建,如果目录不存在会在复制文件前先行创建缺失目录。
|
||||
|
||||
此外,还需要注意一点,使用 `COPY` 指令,源文件的各种元数据都会保留。比如读、写、执行权限、文件变更时间等。这个特性对于镜像定制很有用。特别是构建相关文件都在使用 Git 进行管理的时候。
|
||||
|
||||
在使用该指令的时候还可以加上 `--chown=<user>:<group>` 选项来改变文件的所属用户及所属组。
|
||||
|
||||
```Dockerfile
|
||||
COPY --chown=55:mygroup files* /mydir/
|
||||
COPY --chown=bin files* /mydir/
|
||||
COPY --chown=1 files* /mydir/
|
||||
COPY --chown=10:11 files* /mydir/
|
||||
```
|
||||
|
|
|
@ -4,6 +4,4 @@
|
|||
|
||||
`EXPOSE` 指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务。在 Dockerfile 中写入这样的声明有两个好处,一个是帮助镜像使用者理解这个镜像服务的守护端口,以方便配置映射;另一个用处则是在运行时使用随机端口映射时,也就是 `docker run -P` 时,会自动随机映射 `EXPOSE` 的端口。
|
||||
|
||||
此外,在早期 Docker 版本中还有一个特殊的用处。以前所有容器都运行于默认桥接网络中,因此所有容器互相之间都可以直接访问,这样存在一定的安全性问题。于是有了一个 Docker 引擎参数 `--icc=false`,当指定该参数后,容器间将默认无法互访,除非互相间使用了 `--links` 参数的容器才可以互通,并且只有镜像中 `EXPOSE` 所声明的端口才可以被访问。这个 `--icc=false` 的用法,在引入了 `docker network` 后已经基本不用了,通过自定义网络可以很轻松的实现容器间的互联与隔离。
|
||||
|
||||
要将 `EXPOSE` 和在运行时使用 `-p <宿主端口>:<容器端口>` 区分开来。`-p`,是映射宿主端口和容器端口,换句话说,就是将容器的对应端口服务公开给外界访问,而 `EXPOSE` 仅仅是声明容器打算使用什么端口而已,并不会自动在宿主进行端口映射。
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
### USER 指定当前用户
|
||||
|
||||
格式:`USER <用户名>`
|
||||
格式:`USER <用户名>[:<用户组>]`
|
||||
|
||||
`USER` 指令和 `WORKDIR` 相似,都是改变环境状态并影响以后的层。`WORKDIR` 是改变工作目录,`USER` 则是改变之后层的执行 `RUN`, `CMD` 以及 `ENTRYPOINT` 这类命令的身份。
|
||||
|
||||
|
|
Loading…
Reference in New Issue