首页 > 其他分享 >每天一点基础K8S--dockerfile的常见语法

每天一点基础K8S--dockerfile的常见语法

时间:2022-11-19 22:25:29浏览次数:43  
标签:RUN -- Dockerfile CMD ENTRYPOINT 镜像 docker K8S dockerfile

`

docker file 类似于ansible 中的playbook文件,按需对docker image进行定制修改。

参考文件可以通过man dockerfile查看,也可以去官网查看

dockerfile中,常用语法主要包括:

1、FROM

     表示新构建的镜像的原始镜像,他的妈是谁,有点从本地拉取,如果本地没有,就从docker hub上拉取;
     FROM image
     FROM image:tag
     FROM image@digest

2、MAINTAINCE:作者

3、RUN

     docker bulid期间运行一条命令;
     shell模式:RUN <command>。 RUN touch testfile
     exec 模式:RUN [“executable”,“param1”,“param2”]、RUN [“/bin/bash” “-c” “touch testfile”]

4、EXPOSE

     声明端口,仅仅是声明,docker run的时候需要用-p进行映射;
     EXPOSE <port1> [<port2>…]

5、CMD:docker run的时候运行一条命令,容易被覆盖

     作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD指令指定的程序可被docker run命令行参数中指定要运行的程序所覆盖。
     CMD[“executable”,“param1”,“param2”](exec模式)
     CMD command(shell模式)
     CMD [“param1”,”param2”](作为ENTRYPOINT指令的默认参数)    

6、ENTRYPOINT

     类似于CMD指令,但其不会被docker run的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序。
     但是,如果运行docker run时使用了--entrypoint选项,将覆盖entrypoint指令指定的程序。
     优点:在执行docker run的时候可以指定ENTRYPOINT运行所需的参数。
     注意:如果Dockerfile中如果存在多个ENTRYPOINT指令,仅最后一个生效。

     ENTRYPOINT [“executable”,“param1”,“param2”](exec模式)
     ENTRYPOINT command(shell模式)
     可以搭配CMD命令使用:一般是变参才会使用CMD,这里的CMD等于是在给ENTRYPOINT传参,

7、COPY (推荐)

     从上下文目录中复制文件或者目录到容器里指定路径。也可以从远端copy remote file URL
     第一种:COPY<src>..<dest>
     第二种:COPY[“<src>”...“<dest>”]
     <目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
     The <dest> is the absolute path, or path relative to WORKDIR

8、ADD:

     第一种:ADD <src> <dest>
     第二种:ADD ["<src>",... "<dest>”]
     The <dest> is the absolute path, or path relative to WORKDIR
     ADD的优点:在执行<源文件>为tar压缩文件的话,压缩格式为gzip,bzip2以及xz的情况下,会自动复制并解压到<目标路径>。
     ADD的缺点:在不解压的前提下,无法复制tar压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。具体是否使用,可以根据是否需要自动解压来决定。    
     
     从远端URL拷贝的时候,建议是执行wget或者curl命令下载,这样封装层级更少。
     ADD http://example.com/big.tar.xz /usr/src/things/
     RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/things
     RUN make -C /usr/src/things all
     替换为
     RUN mkdir -p /usr/src/things && curl -SL http://example.com/big.tar.xz | tar -xJC /usr/src/things && make -C /usr/src/things all

9、LABEL

     给镜像添加一些说明、标签等信息,可通过docker image inspect查看
     第一种:LABEL <key>=<value> [<key>=<value> ...]
     第二种:
            LABEL <key>[ <value>]
            LABEL <key>[ <value>]

10、VOLUME

     volume这部分东西可以看看我之前的docker数据持久化配置部分。docker的持久化存储--data volume/bind mounts
     VOLUME ["/data”] 
     会自动在容器中生成挂载点,并创建docker volume进行挂在,也可以从其他container进行挂载。

11、WORKDIR

     WORKDIR /path/to/workdir
     The WORKDIR instruction sets the working directory for the RUN, CMD, ENTRYPOINT, COPY and ADD Dockerfile commands that follow it. 这些命令执行的相对路径。可以同时存在多个WORKDIR。

12、ENV

     ENV <key> <value>
     ENV定义之后,就可以在dockerfile后续的RUN, ENTRYPOINT, and CMD中进行调用。
     可以通过docker inspect to inspect these values查看定义的ENV

13、USER

     指定command以什么用户执行。Sets the username or UID used for running subsequent commands
     USER [user | user:group | uid | uid:gid | user:gid | uid:group ]
     用户需要提前存在。

14、ARG

     构建参数,与ENV作用一至。不过作用域不一样。ARG设置的环境变量仅对Dockerfile内有效,也就是说只有docker build的过程中有效,构建好的镜像内不存在此环境变量。

15、ONBUILD

     用于延迟构建命令的执行。简单的说,就是Dockerfile里用ONBUILD指定的命令,在本次构建镜像的过程中不会执行(假设镜像为test-build)。
     当有新的Dockerfile使用了之前构建的镜像FROMtest-build,这时执行新镜像的Dockerfile构建时候,会执行test-build的Dockerfile里的ONBUILD指定的命令。

`

标签:RUN,--,Dockerfile,CMD,ENTRYPOINT,镜像,docker,K8S,dockerfile
From: https://www.cnblogs.com/woshinidaye123/p/16907338.html

相关文章

  • CSP-J 2022游记
    本文章同步发布于洛谷博客初赛初赛-90天从今年暑假开始学习。教练说我很有天赋,所以暑假直接跟着入门班上。整个暑假就是在持续学基础知识,最后几周开始刷前几年的复......
  • 第一节课-创建项目
    一、打开idea点击创建项目 二、项目名称的设置 三、选择要引入的包  四、项目就创建完成了 五、项目创建后可以给项目中不需要的几项删除掉 六、一个简......
  • 每天一点基础K8S--dockerfile练习
    点击查看代码#dockerfile文件[11-1415:39:27huaweiroot~/dockerfile]#ls-ltotal8-rw-r--r--1rootroot579Nov1415:25dockerfile-rw-r--r--1root......
  • Java中的自定义注解Annotation
    与注释不同,注解可以被其他程序读取。内置注解:@SuppressWarnings参数:   元注解:用来注解其它注解的注解。1.@Target:使用的位置。包括:TYPE意味着,它能标注"类......
  • 【java基础】内部类
    什么是内部类?内部类就是定义在类的内部的类,称之为内部类Java中内部类分为以下4种:成员内部类,内部类在定义时没有使用static修饰(知晓)静态内部类,内部类在定义时使用st......
  • EasyX之鼠标
    一、头文件#include<graphics.h>二、鼠标功能以下截取自graphics.h//Oldmouserelatedfunctions旧鼠标相关功能//Mousemessage//WM_MOUSEMOVE......
  • uniq命令学习
    转自:https://www.runoob.com/linux/linux-comm-uniq.html1.介绍Linuxuniq命令用于检查及删除文本文件中重复出现的行列,一般与sort命令结合使用。uniq可检查文本文......
  • 位操作对符号位的影响
    先上结论右移:1)有符号数:左侧会使用符号位补齐2)无符号数:左侧补0左移:符号位也会被左移,右侧补0取反:符号位也会被取反测试代码//有符号数staticvoidPrint(inta){......
  • xpath解析
    ---安装---pipintalllxml xpath用法步骤1.实例化一个etree对象,且需要将被解析的页面数据加载到该对象中--将本地的html文件加载到etree中etree.parse(filepat......
  • 继承
    封装:可以想象成遥控器,你不需要知道它内部怎么实现的,它封装好你拿来就能用就行了继承:把这几个类重复的成员单独拿出来封装成一个类,作为它们几个共同的父类继承的特性:单根......