目录
一、Dockerfile基本结构
拿到Dockerfile(可以命名为其他名字,但是不推荐)后就可以通过docker build实现镜像的复制。在同一文件夹下存在多个Dockerfile的情况,可以修改Dockerfile文件名,如Dockerfile.first、Dockerfile.second,只需要在构建时加上-f参数即可。
1.1 Dockerfile书写规则
- 注释://
- 语法结构: 指令 参数
- 大小写问题: 官方允许小写的指令,但是为了代码的可读性,指令用大写
1.2 Dockerfile书写思想
- 注意自动化: 文件是否可以一直持续不断的运行下去,遇到交互节点时候可以自动应答
- Dockerfile顺序: Dockerfile构建是从上到下的,所以书写时需要考虑命令执行情况适当调整指令位置(例如软件依赖应在软件执行源命令前安装)
- 注意清理: 在构建完成后,清除构建过程中产生的临时文件(并不是删除文件后体积一定会减小),以保证镜像的体积节省资源
- 文件易读性: 例如,一条很长的命令,不要一行写到底,可以加\分隔
二、Dockerfile指令介绍
2.1 FROM
2.1.1 作用
指定基础镜像
2.1.2 语法
FROM <imageName:tag>
案例:
FROM aprine
2.2 MAINTAINER
2.2.1 作用
设置维护者信息
2.1.2 语法
MAINTAINER Name <Email>
2.3 RUN
2.3.1 作用
执行构建命令,RUN会在shell或者exec环境下执行命令
2.3.2 语法
shell指令会在当前命令顶层执行命令
2.3.2.1 shell格式案例
RUN echo Hello World
2.3.2.2 exec格式案例
exec使用JSON格式将程序名和所需参数组成一个字符串数组,如果参数中有引号等特殊字符,需要转义。使用exec的格式避免了调用/bin/sh的消耗,但是exec不会触发shell,所以$HOME等环境变量不能使用。但是他可以在没有shell的环境中执行,可以避免解析命令错误字符串
RUN ["程序名","参数1","参数2", ...]
2.4 ENV
2.4.1 作用
设置镜像环境变量指令
2.4.2 语法
ENV <key> <value>
案例:
ENV TARGET_DIR /app
// 使用环境变量
WORKDIR $TARGET_DIR
2.5 COPY
2.5.1 作用
复制文件
2.5.2 语法
ENV <文件原路径> <目标路径>