Docker进阶 - 2. Dockerfile 常用保留字简介

news/2024/12/13 2:27:32/

目录

1. FROM

2. MAINTAINER

3. RUN

4. EXPOSE

5. WORKDIR

6. USER

7. ENV

8. VOLUME 

9. COPY

10. ADD

11. CMD

12. ENTRYPOINT

13. CMD 和 RUN 命令的区别


本篇文章的讲解截屏示例基于tomcat的Dockerfile:tomcat/9.0/jdk8/openjdk/Dockerfile

1. FROM

基础镜像,指当前镜像是基于哪个镜像,指定一个已经存在的镜像作为模板,第一条必须是FROM

 

2. MAINTAINER

镜像维护者的姓名和邮箱地址

3. RUN

容器构建时需要运行的命令,在docker build时运行。简言之就是我们如果想要commit一个新镜像,需要通过原始镜像进入容器,然后执行 yum install 或者 apt-get install 命令。而可以直接通过RUN命令直接运行。有两种格式:shell格式和exec格式。

如果采用shell格式,则为:RUN apt-get install vim

 如果采用 exec格式,则为 RUN ["可执行文件", "参数1","参数2"],如 RUN ["./test.php", "dev", "offline"]

4. EXPOSE

当前容器对外暴露的端口,如在tomcat就默认端口为 8080 

5. WORKDIR

指定在创建容器后,终端默认登录的进来工作目录。比如通过docker run -it 命令进入一个容器,进入后通过pwd命令显示出来的路径,即为默认工作目录。在DockerFile里可以通过WORKDIR设置

6. USER

指定该镜像以什么样的用户去执行,如果都不指定,默认是root。一般我们使用默认不做更改

7. ENV

用来在构建镜像过程中设置环境变量,这个环境变量可以在后续的任何指令中使用。简言之就是在前面定义,后面可以直接引用,如下示例:

8. VOLUME 

容器数据卷:用于数据保存和持久化工作。

9. COPY

拷贝宿主机的文件和目录到镜像中,相当于 docker cp命令。

10. ADD

将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包,是copy+解压命令的合体。

11. CMD

指定容器启动后要做的事情,也就是docker run -it 后面的命令,如docker run -it ubuntu /bin/bash这行命令的后面的/bin/bash,具有两种格式:

 shell格式:CMD <命令>

exec格式:CMD ["可执行文件","参数1","参数2"...]

但需要注意CMD会被docker run之后的参数覆盖。比如正常情况下我们运行tomcat镜像,默认情况下在容器启动后(docker run -it -p 8080:8080 镜像id),执行的如下红框中的命令,但是如果我们将命令修改为:docker run -it -p 8080:8080 镜像id /bin/bash,那就相当于默认CMD会被替换为 ["/bin/bash", "run"],则原来的命令不会生效,原始的tomcat则不能正常启动。

12. ENTRYPOINT

也是用来指定容器启动时要运行的命令,类似于CMD,但是ENTRYPOINT不会被docker run 后面的命令覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令执行的程序。

命令格式:ENTRYPOINT ["可执行文件","参数1","参数2"...]

注意:ENTRYPOINT 可以和 CMD一起用,但当一起用时,CMD就不再是直接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT,一般是变参才会使用CMD。两者组合为 <ENTRYPOINT> "<CMD>"

 

13. CMD 和 RUN 命令的区别

CMD是在docker run时运行,即容器启动后要做的操作

RUN是在docker build时运行,即添加新功能的操作

注:本文部分图文内容来自于 Dockerfile保留字简_bilibili 的学习笔记,仅供参考。如看其他Docker内容,可看我博客Docker系列aaron_neil_Dcoker系列,持续更新中。


http://www.ppmy.cn/news/22709.html

相关文章

PB-02-kit开发板的固件下载和nRF Connect APP的蓝牙透传

PB-02-kit开发板的固件下载和nRF Connect APP的蓝牙透传PB-02-kit开发板固件的下载nRF Connect APP蓝牙透传APP发送消息APP接收消息更改MTU值PB-02-kit开发板 PB-02 是安信可基于天猫精灵TG7100B芯片设计的一款蓝牙模组&#xff0c;PB-02-Kit 开发板是针对 PB-02 模组而设计的一…

C进阶_动态版通讯录_增删查改

真正的程序员不接受团队开发的理念&#xff0c;除非他自己是头头。 你的一个程序有时正常有时不正常&#xff0c;而你已经完全遵循编程的规则&#xff0c;为什么&#xff1f;事实上我认为相信只要遵循别人所说就能得到想当然的结果的人其实是个傻瓜。 疯狂的程序员决不是靠狂…

【C++学习】基础语法(二)

在C语言中&#xff0c;为了增强代码的复用性、提高性能提出了宏&#xff0c;但宏也存在着调试不方便、没有类型的安全检查、代码可读性差及可维护性差的缺陷。在C中&#xff0c;引入内联函数实现宏定义的功能&#xff08;宏函数&#xff09;&#xff0c;并针对宏定义的缺陷进行…

网络编程-TCP流套接字

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录 1.Java 流套接字编程模型 2.SeverSocket API 3.So…

【算法基础】冒泡排序解析

作者&#xff1a;柒号华仔 个人主页&#xff1a;欢迎访问我的主页 个人信条&#xff1a;星光不问赶路人,岁月不负有心人。 个人方向&#xff1a;专注于5G领域&#xff0c;同时兼顾其他网络协议&#xff0c;编解码协议&#xff0c;C/C&#xff0c;linux等&#xff0c;感兴趣的小…

【C语言】详细介绍qsort和模拟实现qsort

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石. &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f4e3;系列专栏&#xff1a;凡人修C传 &#x1f4ac;总结&#xff1a;希望你看完之后&…

【TypeScript】TS 看这一篇就够了

文章目录&#x1f9d1;‍&#x1f4bb;TypeScript基本概念TypeScript 是什么&#xff1f;为什么要有typescript安装编译 TS 的工具包编译并运行 TS 代码创建基于TS的vue项目&#x1f9d1;‍&#x1f4bb;TypeScript基础类型注解TypeScript类型概述TypeScript原始数据类型数组类…

SSM整合配置

SSM整合配置1. module结构2. pom.xml3. resources3.1 jdbc.properties&#xff1a;4. config4.1 SpringConfig&#xff1a;4.2 JdbcConfig&#xff1a;4.3 MybatisConfig&#xff1a;4.4 SpringMvcConfig&#xff1a;4.5 ServletInitializer&#xff1a;★1. module结构 SSM整…