继续阅读docker文档
This commit is contained in:
@@ -263,3 +263,64 @@ that label-values can span multiple lines."
|
||||
"other": "value3"
|
||||
}
|
||||
```
|
||||
## EXPOSE
|
||||
```dockerfile
|
||||
EXPOSE <port> [<port>/<protocol>...]
|
||||
```
|
||||
EXPOSE指令会告知Docker该container在监听指定的网络端口,可以指定该端口是在监听TCP或是UDP,默认情况下如果没有指定protocol,默认值为TCP。
|
||||
EXPOSE指令实际并不开放端口,其作用只是在build image的人和运行container的人之间提供文档,该文档会告知哪些端口需要被开放。
|
||||
> 想要真正的开放端口,需要在运行容器时通过docker run命令指定-p选项来开放和映射端口。
|
||||
默认情况下,EXPOSE在未指定协议的情况下使用TCP。可以显式指定开放端口的协议为UDP。
|
||||
```dockerfile
|
||||
EXPOSE 80/udp
|
||||
```
|
||||
可以通过多行EXPOSE指令同时暴露TCP和UDP端口:
|
||||
```dockerfile
|
||||
EXPOSE 80/tcp
|
||||
EXPOSE 80/udp
|
||||
```
|
||||
不管EXPOSE命令如何设置,都可以在`docker run`时通过-p选项来覆盖设置:
|
||||
```shell
|
||||
$ docker run -p 80:80/tcp -p 80:80/udp ...
|
||||
```
|
||||
## ENV
|
||||
ENV指令将环境变量key设置为value,该值可以为后续的指令提供inline替换。
|
||||
> 如果双引号没有被转义,那么value中的双引号将会被移除。
|
||||
|
||||
ENV指令允许一行内设置多条key-value pair。
|
||||
```dockerfile
|
||||
ENV MY_NAME="John Doe" MY_DOG=Rex\ The\ Dog \
|
||||
MY_CAT=fluffy
|
||||
```
|
||||
通过ENV命令设置的环境变量将会被保留,当container通过resulting image产生时。可以通过docker inspect来查看值,并且通过`docker run --env key=value`的形式来更改。
|
||||
> ENV命令设置的key-value对会保留在最终的镜像中,并且在镜像产生的容器中可见。
|
||||
|
||||
如果环境变量只是在build的过程中需要,并且最终image中不希望存在该环境变量,可以考虑只为单行命令设置value:
|
||||
```dockerfile
|
||||
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y ...
|
||||
```
|
||||
或者可以考虑ARG,ARG不会持久化到最终的image中:
|
||||
```dockerfile
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt-get update && apt-get install -y ...
|
||||
```
|
||||
# ADD
|
||||
ADD指令拥有两种形式:
|
||||
```dockerfile
|
||||
ADD [--chown=<user>:<group>] [--checksum=<checksum>] <src>... <dest>
|
||||
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
|
||||
```
|
||||
如果路径中包含空格,需要使用第二种形式。
|
||||
ADD指令会从`src`拷贝新文件、目录或remote file URL并将其添加到镜像的文件系统中,path为`dest`。
|
||||
可以指定复数个`src`资源,但如果`src`为文件或者目录,那么`src`的path将会被解释为相对于build context的路径。
|
||||
每个`src`可以含有通配符,示例如下:
|
||||
```dockerfile
|
||||
ADD hom* /mydir/
|
||||
```
|
||||
`?`符号可以匹配任意单个字符,示例如下:
|
||||
```dockerfile
|
||||
ADD hom?.txt /mydir/
|
||||
```
|
||||
`dest`是一个绝对路径,或是相对于`WORKDIR`的相对路径,`src`将会被复制到目标容器中。
|
||||
如果想要ADD包含特殊字符的文件或目录(例如`[`或`]`),需要对这些路径进行转义。
|
||||
所有新文件和目录创建时,UID和GID都是0,如果想要为新建文件或目录指定其他的值,可以使用`--chown`选项来指定`username:groupname`或`uid:gid
|
||||
Reference in New Issue
Block a user