|
|
@ -1,6 +1,6 @@
|
|
|
|
# Docker镜像学习
|
|
|
|
# Docker镜像学习
|
|
|
|
|
|
|
|
|
|
|
|
> [官网文档](https://docs.docker.com/engine/reference/commandline/build/) [BuildFile](https://docs.docker.com/engine/reference/builder/)
|
|
|
|
> [官网文档](https://docs.docker.com/engine/reference/commandline/build/) [DockerFile](https://docs.docker.com/engine/reference/builder/)
|
|
|
|
|
|
|
|
|
|
|
|
## 镜像构建流程
|
|
|
|
## 镜像构建流程
|
|
|
|
|
|
|
|
|
|
|
@ -501,8 +501,106 @@ docker run -p 80:80/tcp -p 80:80/udp ...
|
|
|
|
# docker run --rm -it study.dockerfile.arg
|
|
|
|
# docker run --rm -it study.dockerfile.arg
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ ADD
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 两种方法:路径中包含空格时,后一种是必须的;包含特殊字符时,需使用转义符;--chown在windows 镜像中无效。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> ```textile
|
|
|
|
|
|
|
|
> ADD [--chown=<user>:<group>] <src>... <dest>
|
|
|
|
|
|
|
|
> ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
|
|
|
|
|
|
|
|
> ```
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 1、该指令从宿主机文件、目录或远程文件URL复制到镜像中指定的文件(夹)中。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 2、可以指定多个资源,但如果它们是文件或目录,则它们的路径被解释为相对于生成上下文的源。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 3、每个路径中可以包含通配符,通配符遵守 [Go文件路径匹配](https://golang.org/pkg/path/filepath#Match) 规则。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 4、源路径和目标路径均可使用相对路径:源是相对于`构建 上下文件目录`;目标是相对于WROKDIR设置的 `当前工作目录`
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> ```dockerfile
|
|
|
|
|
|
|
|
> # *任意 ?任意单个字符,
|
|
|
|
|
|
|
|
> # 宿主机构建上下文目录中,以hom开头的所有文件,添加到镜像绝对目录/mydir/
|
|
|
|
|
|
|
|
> ADD hom* /mydir/
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> # 宿主机构建上下文目录中,以“hom+任意字符.txt”所有文件,添加到镜像绝对目录/mydir/
|
|
|
|
|
|
|
|
> ADD hom?.txt /mydir/
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> #目标路径为相对路径时,相对的是 WORKDIR 当前工作目录
|
|
|
|
|
|
|
|
> ADD test.txt relativeDir/
|
|
|
|
|
|
|
|
> ADD test.txt /absoluteDir/
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> # 使用转义字符
|
|
|
|
|
|
|
|
> ADD arr[[]0].txt /mydir/
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> #使用远程文件
|
|
|
|
|
|
|
|
> ADD https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png /mydir/
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> # 使用用户组
|
|
|
|
|
|
|
|
> ADD --chown=55:mygroup files* /somedir/
|
|
|
|
|
|
|
|
> ADD --chown=bin files* /somedir/
|
|
|
|
|
|
|
|
> ADD --chown=1 files* /somedir/
|
|
|
|
|
|
|
|
> ADD --chown=10:11 files* /somedir/
|
|
|
|
|
|
|
|
> ```
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 使用以下规则:
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 1、源路径必须在`构建上下文目录`中,不能超过范围。比如 ADD ../demo.txt /mydir/
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 2、以/结尾的URL源,则从URL推断文件名,并将文件下载后添加。不能推断的无效。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 3、不以/结尾的URL源,则从URL下载后添加。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 4、源路径,如果是目录,则复制该目录的全部内容,包括文件系统元数据。目录本身不复制,只复制目录内容。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 5、源如果是可识别的压缩格式(tar、gzip、bzip2 或 xz)的本地tar 存档,则将其解压缩为目录。来自远程URL 的资源不会解压缩。复制或解压缩目录时,它的行为与 tar -x 相同.
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 6、源如果是任何其他非压缩类型的文件,则将其与其元数据一起单独复制。在这种情况下,如果以尾部斜杠结尾,它将被视为一个目录。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 7、如果直接指定了多个资源或由于使用了通配符,则必须是目录,并且必须以斜杠结尾
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 8、如果不以尾部斜杠结尾,则将被视为常规文件,并且将内容添加。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 9、目标路径,如果不存在,则将目录与其路径中所有缺少的目录一起创建
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ COPY
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 与ADD相同,只是不会自动解压压缩文件
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ ENTRYPOINT
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
> 语法:
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> ```dockerfile
|
|
|
|
|
|
|
|
> ENTRYPOINT ["executable", "param1", "param2"]
|
|
|
|
|
|
|
|
> ENTRYPOINT command param1 param2
|
|
|
|
|
|
|
|
> ```
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 1、ENTRYPOINT 在容器启动时,执行命令;与CMD指令类似。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 2、多个ENTRYPOINT 只执行最后一个
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 3、可与CMD指令配合使用,此时CMD指令提供默认参数,形如 CMD [“param1”,“param2”]
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 4、可在容器启动命令中,使用--entrypoint参数覆盖。通过 --entrypoint 传的必须是可执行的二进制程序, 即不会以sh -c 形式执行。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```dockerfile
|
|
|
|
|
|
|
|
#例
|
|
|
|
|
|
|
|
FROM ubuntu
|
|
|
|
|
|
|
|
ENTRYPOINT ["top", "-b"]
|
|
|
|
|
|
|
|
CMD ["-c"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#例子
|
|
|
|
|
|
|
|
FROM ubuntu
|
|
|
|
|
|
|
|
ENTRYPOINT exec top -b
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
+ ONBUILD
|
|
|
|
+ ONBUILD
|
|
|
|
|
|
|
|
|
|
|
|
+ SHELL
|
|
|
|
> 类似触发器:在以此镜像为基础镜像的镜像,在构建时执行。
|
|
|
|
|
|
|
|
>
|
|
|
|
|
|
|
|
> 对于当前镜像的构建没有一点影响;在子镜像构建时默认执行。
|
|
|
|
|
|
|
|
|
|
|
|
+ 小结
|
|
|
|
+ 小结
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
暂无
|
|
|
|