From 206aff1b699bb9dacf0dc6b57548b6124d7bedc9 Mon Sep 17 00:00:00 2001 From: bicijinlian Date: Tue, 18 Jan 2022 00:43:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A5=E5=8F=A3=E7=82=B9=20=E6=8C=87?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Build/Dockerfile.ENTRYPOINT | 23 ++++++++ Build/Dockerfile.WebApi | 11 ++++ Build/学习.md | 104 ++++++++++++++++++++++++++++++++++-- 3 files changed, 135 insertions(+), 3 deletions(-) create mode 100644 Build/Dockerfile.ENTRYPOINT create mode 100644 Build/Dockerfile.WebApi diff --git a/Build/Dockerfile.ENTRYPOINT b/Build/Dockerfile.ENTRYPOINT new file mode 100644 index 0000000..a5313bf --- /dev/null +++ b/Build/Dockerfile.ENTRYPOINT @@ -0,0 +1,23 @@ +# 注释: ENTRYPOINT 入口指令 +FROM ubuntu + +# ENTRYPOINT ["top"] + +# ENTRYPOINT ["top", "-b","-c"] + +ENTRYPOINT ["top"] +CMD ["-c","-b"] + +# 构建镜像 +# docker build -f Dockerfile.ENTRYPOINT -t study.dockerfile.entrypoint:latest -t study.dockerfile.entrypoint:0.0.1 . + +# docker run -it --rm study.dockerfile.entrypoint + +# --entrypoint 覆盖 ENTRYPOINT指令 +# docker run -it --rm --entrypoint="ls" study.dockerfile.entrypoint + +# --entrypoint不能包含命令参数,如下是错误的 +# docker run -it --rm --entrypoint="top -b -c" study.dockerfile.entrypoint + +# --entrypoint不能包含命令里的参数,应该放在[COMMAND]位置,正确例子: +# docker run -it --rm --entrypoint="top" study.dockerfile.entrypoint -b -c \ No newline at end of file diff --git a/Build/Dockerfile.WebApi b/Build/Dockerfile.WebApi new file mode 100644 index 0000000..6e0ed32 --- /dev/null +++ b/Build/Dockerfile.WebApi @@ -0,0 +1,11 @@ +# 部署Docker WebApi +FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS EnvStudy +ENV Dockerfile_version=0.0.1 +EXPOSE 80/TCP +WORKDIR /app +COPY WebApiPublish/ /app/ +ENTRYPOINT ["dotnet", "DockerStudyApi.dll"] + +# docker build -f Dockerfile.WebApi -t env/dockerfile.webapi:latest -t env/dockerfile.webapi:0.0.1 . +# docker run --restart=always -p 6400:80 -d --name dockerfile.webapi.contain env/dockerfile.webapi +# 查看日志 docker logs contain_id -f //使用 -f 参数 实时输出,ctl + c 退出(不影响容器运行) diff --git a/Build/学习.md b/Build/学习.md index 27dfe33..f848e87 100644 --- a/Build/学习.md +++ b/Build/学习.md @@ -1,6 +1,6 @@ # 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 ``` -+ ONBUILD ++ ADD + + > 两种方法:路径中包含空格时,后一种是必须的;包含特殊字符时,需使用转义符;--chown在windows 镜像中无效。 + > + > ```textile + > ADD [--chown=:] ... + > ADD [--chown=:] ["",... ""] + > ``` + > + > 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 + ``` -+ SHELL ++ ONBUILD + + > 类似触发器:在以此镜像为基础镜像的镜像,在构建时执行。 + > + > 对于当前镜像的构建没有一点影响;在子镜像构建时默认执行。 + 小结 + + 暂无