学会写dockerfile是我们学习docker的必经之路;在写dockerfile的时候,感觉如下命令还是需要做个记录,以备需要时方便查阅参考: ----------------------------------------------------------------------------------------------
这个指令是在dockcer build 的时候执行的,执行的结果会commit到新的image中;常用于一次性操作,比如目标image中需要安装软件,那么用RUN这个指令;
ADD: 这个指令也是docker build的时候执行的,要注意的是:如果src是local的压缩/打包文件,比如tar, zip,bzip2,tar.gz ... , 那么会自动在目标目录解压缩,也就是unpack操作;但是如果src不是本地的文件(比如URL指定的文件),那么不会自动自动的解压等; COPY: 这个指令也是docker build的动作,但是和ADD不同的是,对于archive的处理: copy 会保证文件原来的格式,不会进行unpack的操作,而ADD对本地的文件会进行unpack. 注意ADD, COPY的区别在于对archive的处理模式不同,前者会进行unpack操作,而后者则不会,但是如果source不是本地archive,那么都不会进行unpack.
ARG: 1).这个ARG指令用于添加环境变量,可以设置默认值,也可以没有默认值; 2).通过此方法设置的变量仅仅在docker build的时候生效,而在docker run的时候并不会生效; 3).如果在docker build的时候,指定了相同参数并赋值,那么会替代ARG指令所指定的参数值; 4).如果docker build的时候指定的参数没有通过ARG指令进行指定,那么会有WARNING信息输出; 5).在dockerfile中,只有ARG指令之后的行 ,对变量的引用才会用遵循ARG定义的变量; 6).虽然ARG指令指定的参数在docker run的时候不可见,但是在docker history 中依然可见,所以不要用ARG传递敏感信息,比如密码等;
ENV: 1).该指令也用于指定环境变量,该环境变量既在docker build的时候生效,也在docker run的时候生效; 2).ENV的变量是持久存在的,如果在docker run的时候通过env参数进行指定,那么指定的值会替换dockerfile中定义的值; 3).如果在dockerfile中没有定义,那么在使用docker run的时候指定了env参数,不会有任何报错和警告; 当ENV和ARG有相同名字的时候,在docker build的时候,ENV的环境变量值会overwrite ARG指定的环境变量值
这个指令用于创建一个触发器,ONBUILD后面可以跟任意的 "构建image相关的指令",比如RUN,ARG,ENV... onbuild既然是一个触发器指令,那么触发条件是什么呢?当用该docker file 构建的image 作为base image的时候,新的image 在被build的时候就会触发,该指令就像插入在FROM 之后一样会立即得到执行;
本文原创,转载请注明出处