多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## FROM 尽量使用官方的image作为base image ![](https://img.kancloud.cn/92/16/9216354aeb428ca9f5abd7173259d390_1040x326.png) ## LABEL 使用label可以添加作者信息,版本信息,描述等. `LABEL`指令会添加元数据到镜像。`LABEL`是以键值对形式出现的。为了在`LABEL`的值里面可以包含空格,你可以在命令行解析中使用引号和反斜杠。 ![](https://img.kancloud.cn/55/50/5550db079962b2e1a664e22d5cea62d8_1142x242.png) ## RUN 在build镜像时,开始执行run中的命令,但是需要注意的是,每使用一次run,都会构建新的一层image.所以尽量使用一次.使用&&来连接命令. **注意:** * 将多个RUN指令合并为一个 * 基础镜像的标签不要用latest * 每个RUN指令后删除多余文件 ## WORKDIR 指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。(WORKDIR 指定的工作目录,必须是提前创建好的)。 docker build 构建镜像过程中的,每一个 RUN 命令都是新建的一层。只有通过 WORKDIR 创建的目录才会一直存在。 Dockerfile中的WORKDIR指令用于指定容器的一个目录, 容器启动时执行的命令会在该目录下执行。 ![](https://img.kancloud.cn/65/4f/654fb9a798abd334ae80fffc01acfb6e_1203x362.png) **注意:** * 用WORKDIR,不要用RUN cd * 尽量使用绝对目录 ## ADD和COPY 复制指令,从上下文目录(本地目录)中复制文件或者目录到image里指定路径。两者区别不大,但是ADD会自动解压打包的文件 **注意:** * 如果源路径是个文件,且目标路径是以 / 结尾, 则docker会把目标路径当作一个目录,会把源文件拷贝到该目录下。如果目标路径不存在,则会自动创建目标路径。 * 如果源路径是个文件,且目标路径是不是以 / 结尾,则docker会把目标路径当作一个文件。如果目标路径不存在,会以目标路径为名创建一个文件,内容同源文件;如果目标文件是个存在的文件,会用源文件覆盖它,当然只是内容覆盖,文件名还是目标文件名.如果目标文件实际是个存在的目录,则会源文件拷贝到该目录下。 注意,这种情况下,最好显示的以 / 结尾,以避免混淆。 * 如果源路径是个目录,且目标路径不存在,则docker会自动以目标路径创建一个目录,把源路径目录下的文件拷贝进来。如果目标路径是个已经存在的目录,则docker会把源路径目录下的文件拷贝到该目录下。 * 如果源文件是个归档文件(压缩文件,比如 .tar文件),则docker会自动帮解压。但是.tar.gz文件是不会自动解压的。 ![](https://img.kancloud.cn/89/7a/897aa48d843bbd724ad90c622a87e2e7_970x601.png) ![](https://img.kancloud.cn/dc/e4/dce4f3517c068367a5b48d9985c3b0f5_1435x514.png) ## ENV 设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。尽量使用ENV,可以增加可维护性. ![](https://img.kancloud.cn/47/ac/47ac40a022d778ae3bef7895108dab55_1589x241.png)