共计 2562 个字符,预计需要花费 7 分钟才能阅读完成。
前言
好忘性不如烂笔头,边学边记,学完根底语法后,起码你能看得懂一个 Dockfile 干了哪些事儿。折腾起来。
作用
Dockfile 是一个用来构建镜像的文本文件,在一个我的项目中如果有此文件,语法正确,就能够应用命令(docker build -t name:tag .)来构建一个镜像了.
1.FROM
语法:FROM <image>
eg: FROM node:14.17.0 // 指定 node 14.17.0 版本
解释:指定一个构建镜像的根底源镜像,如果本地没有就会从公共仓库中拉取,没有指定镜像的标签会应用默认的 latest 标签。必须有。
2.WORKDIR
语法:WORKDIR < 工作目录门路 >
eg: WORKDIR /usr/src/app
解释:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创立好的)。
docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创立的目录才会始终存在。
3.MAINTAINER
语法:MATAINER <name> <email>
eg: MATAINER test test@163
解释:形容镜像的创建者,名称和邮箱。不是必须的。
4.RUN
用法:RUN “command” “param1” “param2”
eg: RUN yarn install
形容:运行一个命令,比方依赖的装置,脚本的执行等。RUN 命令能够有多个,然而能够用 && 连贯多个命令来缩小层级。例如
RUN npm install && cd /app && mkdir logs
留神:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像收缩过大。所以多个 RUN 能够应用 && 连贯。
// 如 这里会创立 3 层镜像
FROM centos
RUN yum -y install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
// 简化后 创景一层
FROM centos
RUN yum -y install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
5.CMD
用法:CMD “command” “param1” “param2”
eg: CMD cd /app && ./start.sh
形容:CMD 指令只能一个,是容器启动后执行的命令,算是程序的入口。CMD 在一个 Dockfile 中只能呈现一次,写了多个只会执行最初一个,作用是在启动容器的时候提供一个默认的命令,如果用户执行 docker run 时提供了命令项会笼罩掉文件内的命令,没有提供就会应用此命令。如果须要执行多个命令 能够 应用 & 链接.CMD 在 docker run 时运行。RUN 是在 docker build。
6.COPY
用法:COPY [–chown=<user>:<group>] < 源门路 1 >… < 指标门路 >
eg: COPY hom?.txt /mydir/
形容:复制指令,从上下文目录中复制文件或者目录到容器里指定门路。< 指标门路 >:容器内的指定门路,该门路不必当时建好,门路不存在的话,会主动创立。
7.ENTRYPOINT
用法:ENTRYPOINT [“<executeable>”,”<param1>”,”<param2>”,…]
eg: ENTRYPOINT [“nginx”, “-c”] # 定参
形容:相似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所笼罩,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。然而, 如果运行 docker run 时应用了 –entrypoint 选项,将笼罩 ENTRYPOINT 指令指定的程序。在执行 docker run 的时候能够指定 ENTRYPOINT 运行所需的参数。如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最初一个失效。
8.ENV
用法:ENV <key> <value>
eg: ENV NODE_VERSION 14.17.0
形容:置环境变量,定义了环境变量,那么在后续的指令中,就能够应用这个环境变量。
9.ARG
用法:ARG < 参数名 >[=< 默认值 >]
eg: ARG NODE_VERSION 14.17.0
形容:构建参数,与 ENV 作用统一。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内无效,也就是说只有 docker build 的过程中无效,构建好的镜像内不存在此环境变量。构建命令 docker build 中能够用 –build-arg < 参数名 >=< 值 > 来笼罩.
10.VOLUME
用法:
1.VOLUME [“< 门路 1 >”, “< 门路 2 >”…]
2.VOLUME < 门路 1 >
eg:
形容:定义匿名数据卷。在启动容器时遗记挂载数据卷,会主动挂载到匿名卷。防止重要的数据,因容器重启而失落,这是十分致命的。防止容器一直变大。
11.EXPOSE
用法:EXPOSE < 端口 1 > [< 端口 2 >…]
eg: EXPOSE 8080:80
形容: 帮忙镜像使用者了解这个镜像服务的守护端口,以不便配置映射。在运行时应用随机端口映射时,也就是 docker run -P 时,会主动随机映射 EXPOSE 的端口。
12.HEALTHCHECK
用法:
1.HEALTHCHECK [选项] CMD < 命令 >:设置查看容器健康状况的命令
2.HEALTHCHECK NONE:如果根底镜像有健康检查指令,应用这行能够屏蔽掉其健康检查指令
3.HEALTHCHECK [选项] CMD < 命令 > : 这边 CMD 前面追随的命令应用,能够参考 CMD 的用法。
形容: 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
13.LABEL
用法: LABEL <key>=<value> <key>=<value> <key>=<value> …
eg: LABEL org.opencontainers.image.authors=”runoob”
形容:LABEL 指令用来给镜像增加一些元数据(metadata),以键值对的模式。