From ab88027378d7cdc8be2d44c3e5131b08d1ccdee9 Mon Sep 17 00:00:00 2001 From: Rikako Wu <496063163@qq.com> Date: Fri, 10 Feb 2023 17:03:41 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=A7=E7=BB=ADdockerfile=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E7=9A=84=E9=98=85=E8=AF=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/docker file.md | 58 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/docker/docker file.md b/docker/docker file.md index 9608560..cbae0fb 100644 --- a/docker/docker file.md +++ b/docker/docker file.md @@ -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=:] [--checksum=] ... @@ -323,4 +323,58 @@ ADD hom?.txt /mydir/ ``` `dest`是一个绝对路径,或是相对于`WORKDIR`的相对路径,`src`将会被复制到目标容器中。 如果想要ADD包含特殊字符的文件或目录(例如`[`或`]`),需要对这些路径进行转义。 -所有新文件和目录创建时,UID和GID都是0,如果想要为新建文件或目录指定其他的值,可以使用`--chown`选项来指定`username:groupname`或`uid:gid \ No newline at end of file +### 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仓库到镜像中,而不需要镜像中存在git命令。 +```dockerfile +ADD [--keep-git-dir=] +``` +`--keep-git-dir`选项代表是否保存git仓库中的.git目录,该选项的默认值是`false`. +## COPY +COPY指令可以按如下两种形式编写: +```dockerfile +COPY [--chown=:] ... +COPY [--chown=:] ["",... ""] +``` +如果路径中含有空格,使用第二种形式。 +COPY命令从`src`中复制文件和目录并且将其添加到容器文件系统中,添加路径为`dest`. +COPY的使用示例如下所示: +```dockerfile +COPY hom* /mydir/ +``` +类似`ADD --chown`,`COPY`命令也支持`COPY --chown`的用法. +### COPY --from +COPY支持`--from=`选项,可以将`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 `命令之后的命令行参数将添加到***exec***形式ENTRYPOINT命令的所有元素之后,其允许参数被传递给entry point。 +例如,`docker run -d`将会把`-d`传递给entry point。 +> 可以通过`docker run --entrypoint`命令来覆盖ENTRYPOINT指令。 +