每天一点基础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指定的命令。

`

posted @   woshinidaye  阅读(152)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
点击右上角即可分享
微信分享提示