Dockerfile 全部指令及描述如下表: 指令 描述 语法 ARG 创建镜像过程中使用的变量,执行 docker build 时通过 build-arg 来为变量赋值,镜像编译成功后 ARG 指定变量就不存在...ARG[=] FROM 所创建镜像的基础镜像,Dockerfile 的第一条指令必须是 FROM FROM[AS ] 或者 FROM:[AS] 或者 FROM@[AS] LABEL 所创建镜像的元数据标签...RUN 指令使用,而且在镜像启动过程中也会存在 ENV=… ENTRYPOINT 镜像默认入口命令,会在启动容器时作为根命令执行,Dockerfile 只能有一个 ENTRYPOINT 指令 如果需要利用...小提示1: 我们只需要将创建镜像所需要的文件放入 Dockerfile 中,不要将其他无关文件放入,因为上下文过大会导致创建镜像速度放缓,甚至失败。...小提示2: 如果使用的 Dockerfile 文件不再上下文路径中,可以使用 -f 参数来指定 Dockerfile 文件的路径。
1、Dockerfile基本结构 Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。 一般Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。...2、Dockerfile中的指令 1)FROM——指定基础镜像 格式为:FROM 或者 FROM :。...第一条指令必须为FROM指令,如果在同一个dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次,但是一般不会这么做)。...]# docker run -t zyz:v2 echo 123456 #启动容器时又指定了其他指令,则会覆盖掉dockerfile中的所有指令 123456 一般我将CMD和ENTRYPOINT...如果基于 image-A 创建新的镜像时,新的Dockerfile中使用 FROM image-A指定基础镜像时,会自动执行ONBUILD 指令内容,等价于在后面添加了两条指令。
Dockerfile Dockerfile是由一系列命令和参数构成的脚本,以FROM命令为开始,然后是各种方法和参数的使用,最终生成一个新的镜像。...,Docker执行Dockerfile大致流程: Docker从基础镜像(如:centos)运行一个容器; 执行一条指令(如:ADD),对容器做出修改; 执行类似docker commit...的操作,提交一个新镜像层; Docker再基于刚提交的镜像运行一个新容器; 执行Dockerfile中的下一条指令,直到所有指令都执行完毕; 示例解析 FROM:Dockerfile的第一条命令...Dockerfile指令解析 FROM DockerFile的首个命令,指定使用的基础镜像,如果没有发行该镜像,则试图从Docker image index来查找该镜像。...在 Dockerfile中可以映射私有和公有端口,但如果通过Dockerfile映射公有端口,则该端口便不可被其他应用程序使用。
dockerfile用来定制镜像,我们知道镜像实际上是一层一层的,镜像的定制实际上就是定制每一层所添加的配置和文件。...dockerfile是一个文本文件,该文件里包含了一条一条的指令,每一条指令就代表一层镜像,例如下面的一些例子 1 2 FROM nginx RUN echo 'test' > /usr/share/nginx...dockerfile为例,只有短短的两行,我们看到RUN指令,这个可以像shell脚本一样,一行行去执行命令,例如: 1 2 3 4 5 6 7 8 9 FROM debian:jessie RUN...ADD更高级的复制文件 ADD指令和COPY指令的格式和性质基本一样,但是在COPY基础上加了一些功能 源路径可以是一个URL,docker引擎会试图下载这个链接的文件放到目标路径中去,下载后的文件权限自动设置为...我们也可以通过不同的环境变量来让一个dockerfile制作更多的镜像。 ARG构建参数 构建参数和ENV的效果是一样的,都是设置环境变量。
前言 Dockerfile用于构建docker镜像, 实际上就是把在linux下的命令操作写到了Dockerfile中, 通过Dockerfile去执行设置好的操作命令, 保证通过Dockerfile的构建镜像是一致的...Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。...RUN ["ls", "-l"] RUN ["/bin/sh", "-c", "ls -l"] # 可以获取环境变量 RUN指令用于指定构建镜像时执行的命令, Dockerfile允许多个RUN指令,...灵活的使用 ARG 指令,能够在不修改 Dockerfile 的情况下,构建出不同的镜像。...所以说,这样制作基础镜像,只解决了原来的 Dockerfile 的前4条指令的变化问题,而后面三条指令的变化则完全没办法处理。 ONBUILD 可以解决这个问题。
ubuntu:20.042、 RUN在构建时运行一行命令如:RUN apt-get update && apt-get install -y python3 python3-venv libpq5因为多条RUN指令会创建多个镜像层...这个指令可以被运行容器时到-e参数覆盖7、 USER定义构建容器时使用的用户,用户必须已存在,后续所以指令,都会使用这个用户执行如:USER simple8、 EXPOSE定义容器暴露的端口,注意,这个端口只是声明
Dockerfile指令说明 FROM: 格式为 FROM 或 FROM: 第一条指令必须是FROM指令。...并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次)。 MAINTAINER:格式为MAINTAIER,指定维护者信息。...注意:如果Dockerfile中指定了多条命令,只有最后一条会被执行。如果用户启动时候加了运行的命令,则会覆盖掉CMD指定的指令。...例如:我在elasticsearch镜像的Dockerfile中指定了暴露出9200和9300端口,我可以在Dockerfile中写: ?...例如,Dockerfile使用如下内容创建了镜像image-A ? FROM image-A #自动添加 ADD .
Dockerfile 指令汇总 指令 说明 FROM 指明当前的镜像基于哪个镜像构建 ARG 定义构建镜像过程中使用的变量 LABEL 标记镜像信息,添加元数据 EXPOSE 通知 Docker 容器在运行时监听指定的网络端口...指定运行容器时的用户名或 UID WORKDIR 配置工作目录 RUN 运行指定命令 CMD 启动容器时指定默认执行的命令 ADD 添加内容到镜像 COPY 复制内容到镜像 ONBUILD 创建子镜像时指定自动执行的操作指令...STOPSIGNAL 指定退出的信号值 HEALTHCHECK 配置启动容器如何进行健康检查 SHELL 指定默认 shell 类型 指令有对应的文章链接,点击即可跳转哦!...如果没有就是暂时不写了 MAINTAINER 官方写着已弃用,不学了 STOPSIGNAL 暂不展开讲解,发送到容器退出的系统调用信号,还没搞清楚有什么作用 ONBUILD ONBUILD 是一个特殊的指令...,它后面跟的是其它指令,比如 RUN, COPY 等,而这些指令,在当前镜像构建时并不会被执行 只有当以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行 Dockerfile 中的其它指令都是为了定制当前镜像而准备的
:可以是 Dockerfile 所在目录的一个相对路径(文件或目录) :可以是镜像内绝对路径,或者相对于工作目录(WORKDIR)的相对路径 路径:支持正则表达式, COPY...""] --chown 仅适用于 linux 上的 dockerfile,在 window 上没有用户、组的概念 COPY 作用 COPY 指令从 复制新文件、目录或远程文件 URL...test.txt /mytext 不存在 路径中所有缺失的目录都会自动创建 COPY test.txt /dir/test/my/ 注意事项 的内容发生变化,第一个遇到的 COPY 指令将使来自...Dockerfile 的所有后续指令的缓存无效,这包括使 RUN 指令的缓存无效 完整练习的 dockerfile FROM centos # 添加文件到目录下 COPY test.txt /mydir...ADD 和 COPY 的区别和使用场景 ADD 支持添加远程 url 和自动提取压缩格式的文件,COPY 只允许从本机中复制文件 COPY 支持从其他构建阶段中复制源文件(--from) 根据官方 Dockerfile
不能使用单引号 注意事项 使用基于 Windows 的容器时 挂载的目录必须是以下之一: 一个不存在或空的目录 C 盘以外的盘 无法通过 VOLUME 挂载主机目录 为了镜像的可移植性,VOLUME 指令不支持指定主机目录参数...(像 是可以指定主机目录的) docker run -v : 如果要指定,还是要通过 docker run -v 来指定主机目录哦 VOLUMN 指令后面的步骤 如果在 VOLUMN...指令后面的构建步骤更改了卷中的数据,这些数据会被丢弃 小栗子 FROM ubuntu RUN mkdir /myvol RUN echo "hello world" > /myvol/greeting
两种写法的实际栗子 RUN /bin/bash -c 'source $HOME/.bashrc; echo $HOME' RUN ["/bin/bash", "-c", "echo hello"] RUN 指令的原理...RUN 指令将在当前镜像上加新的一层,并执行任何命令和提交结果,生成的提交镜像将用于 Dockfile 中的后续步骤 分层 RUN 指令和生成提交符合 Docker 核心概念,提交成本低,并且可以通过...docker history 中的任意步骤创建容器,像 git 代码控制一样 shell 模式下使用 \ 可以将单个 RUN 指令延续到下一行,等于执行了两个命令 RUN /bin/bash -c '
SHELL SHELL ["executable", "parameters"] SHELL 指令可以指定 RUN、ENTRYPOINT、CMD 指令的 shell,Linux 中默认为 ["/bin/
并不会直接将端口自动和宿主机某个端口建立映射关系 如果 docker run,指定了自动映射 -P,那么会将所有暴露的端口随机映射到宿主机的高阶端口 如果 docker run,指定了 --net=host 宿主机网络模式,容器中 EXPOSE 指令暴露的端口会直接使用宿主机对应的端口...不存在映射关系 如果 EXPOSE 暴露的端口确定要和某个宿主机端口建立映射关系,还是要用到 docker run -p 参数 EXPOSE 显式地标明镜像开放端口,一定程度上提供了操作的便利,也提高了 Dockerfile...的可读性和可维护性 dockerfile 下面四个栗子都以这个 dockerfile 来启动容器 FROM nginx EXPOSE 80 EXPOST 端口和 docker run 的栗子 启动容器命令
定义的变量只会存在于镜像构建过程,启动容器后并不保留这些变量 ENV 定义的变量在启动容器后仍然保留 注意 不要通过 ARG 保存密码之类的信息,因为 docker history 还是可以看到所有值的 ARG 指令有生效范围...如果在 FROM 指令之前指定,那么只能用于 FROM 指令中 ARG DOCKER_USERNAME=library FROM ${DOCKER_USERNAME}/alpine RUN set...-x ; echo ${DOCKER_USERNAME} 使用上述 Dockerfile 会发现无法输出 ${DOCKER_USERNAME} 变量的值 要想正常输出,必须在 FROM 之后再次指定
] # 作为ENTRYPOINT的默认参数 CMD ["param1","param2"] # shell CMD 命令 param1 param2 重点 一个 Dockerfile 只有一个...CMD 指令,若有多个,只有最后一个 CMD 指令生效 CMD 主要目的:为容器提供默认执行的命令,这个默认值可以包含可执行文件 也可以不包含可执行文件,意味着必须指定 ENTRYPOINT 指令(第二种写法
HEALTHCHECK 作用 健康检查 当在一个镜像指定了 HEALTHCHECK 指令后,用其启动容器,初始状态会为 starting,在 HEALTHCHECK 指令检查成功后变为 healthy,...如果连续一定次数失败,则会变为 unhealthy 格式 # 设置检查容器健康状况的命令 HEALTHCHECK [选项] CMD # 如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令...如果写了多个,只有最后一个生效 HEALTHCHECK 返回值 决定了该次健康检查的成功与否:0:成功;1:失败;2:保留(不要使用这个值) 为啥要用 HEALTHCHECK 在没有 HEALTHCHECK 指令前...1.12 以前,Docker 不会检测到容器的这种状态,从而不会重新调度,导致可能会有部分容器已经无法提供服务了却还在接受用户请求 自 1.12 之后,Docker 提供了 HEALTHCHECK 指令...unhealthy ,默认 3 次 --retries= 实际小栗子 假设有个镜像是个最简单的 Web 服务,希望增加健康检查来判断其 Web 服务是否在正常工作,可以用 curl 来帮助判断其 dockerfile
WORKDIR 切换到镜像中的指定路径,设置工作目录 在 WORKDIR 中需要使用绝对路径,如果镜像中对应的路径不存在,会自动创建此目录 一般用 WORKDIR 来替代 切换目录进行操作的指令 RUN...cd && WORKDIR 指令为 Dockerfile 中跟随它的任何 RUN、CMD、ENTRYPOINT、COPY、ADD 指令设置工作目录 如果 WORKDIR...不存在,即使它没有在任何后续 Dockerfile 指令中使用,它也会被创建 小栗子 会将宿主机的 test.txt 文件复制到 镜像的 /tmp/test.txt WORKDIR /tmp COPY...使用相对路径的场景 WORKDIR 指令可以在 Dockerfile 中多次使用 如果提供了相对路径,它将相对于前一个 WORKDIR 指令的路径 WORKDIR /a WORKDIR b WORKDIR...c RUN pwd pwd 的输出将会是 /a/b/c 推荐 为了避免出错,推荐WORKDIR指令中只使用绝对路径 使用环境变量 WORKDIR 指令可以使用前面 ENV 设置的环境变量 ENV DIRPATH
# 但只能设置一个环境变量 ENV MY_VAR my-value 使用环境变量 通过 ENV 指令可以声明环境变量,可以在以下指令中使用环境变量 ADD COPY ENV EXPOSE FROM...当容器从生成的镜像运行时,使用 ENV 设置的环境变量将持续存在 可以使用 docker inspect 查看值,并使用 docker run --env = 更改它们 实际栗子 dockerfile...FROM nginx EXPOSE 80 ENV test=test1234 构建镜像,启动容器,inspect 查看 docker build -f test.dockerfile -t test2
中的最后一条 ENTRYPOINT 指令会起作用 ENTRYPOINT 和 CMD 联合使用 当指定了 ENTRYPOINT 后,CMD 的含义就发生了改变,不再是直接的运行其命令,而是将 CMD 的内容作为参数传给...ENTRYPOINT 指令 换句话说实际执行时,会变成 "" 灵魂拷问 那么有了 CMD 后,为什么还要有 ENTRYPOINT 呢?...这其实也是 ENTRYPOINT 的应用场景之一,下面来看 测试 CMD 编写 dockerfile 文件 FROM centos CMD ["ls","-a"] 构建镜像 docker build...-f CMD.dockerfile -t test ....文件 FROM centos ENTRYPOINT ["ls","-a"] 构建镜像 docker build -f ENTRYPOINT.dockerfile -t test .
一段话总结完 ADD 作用:添加内容到镜像 格式: ADD 详解:该命令将复制指定的 路径下内容到镜像中的 路径下 :可以是 Dockerfile...""] --chown 仅适用于 linux 上的 dockerfile,在 window 上没有用户、组的概念 ADD 作用 ADD 指令从 复制新文件、目录或远程文件 URL...test.txt /mytext 不存在 路径中所有缺失的目录都会自动创建 ADD test.txt /dir/test/my/ 注意事项 的内容发生变化,第一个遇到的 ADD 指令将使来自...Dockerfile 的所有后续指令的缓存无效,这包括使 RUN 指令的缓存无效 完整练习的 dockerfile FROM centos # 添加文件到目录下 ADD test.txt /mydir...ADD 和 COPY 的区别和使用场景 ADD 支持添加远程 url 和自动提取压缩格式的文件,COPY 只允许从本机中复制文件 COPY 支持从其他构建阶段中复制源文件(--from) 根据官方 Dockerfile
领取专属 10元无门槛券
手把手带您无忧上云