首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >dockerfile 常用易混指令--(1)

dockerfile 常用易混指令--(1)

作者头像
qsjs
发布2020-06-09 10:36:28
5960
发布2020-06-09 10:36:28
举报

学会写dockerfile是我们学习docker的必经之路;在写dockerfile的时候,感觉如下命令还是需要做个记录,以备需要时方便查阅参考: ----------------------------------------------------------------------------------------------

RUN:

这个指令是在dockcer build 的时候执行的,执行的结果会commit到新的image中;常用于一次性操作,比如目标image中需要安装软件,那么用RUN这个指令;

ADD和COPY:

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和ENV:

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:

这个指令用于创建一个触发器,ONBUILD后面可以跟任意的 "构建image相关的指令",比如RUN,ARG,ENV... onbuild既然是一个触发器指令,那么触发条件是什么呢?当用该docker file 构建的image 作为base image的时候,新的image 在被build的时候就会触发,该指令就像插入在FROM 之后一样会立即得到执行;

本文原创,转载请注明出处

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RUN:
  • ADD和COPY:
  • ARG和ENV:
  • ONBUILD:
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档