Dockerfile介绍及常用保留指令
从本文开始,咱们将介绍docker的另外一个技术点:dockerfile.我们来看看DockerFile相关的知识点,我们将怎么学习?
1:DockerFile是什么?
2:DockerFile构建过程解析
3:常用的保留字指令
4:案例及小总结。如下图:

dockerFile是什么?
DockerFile是用来构建Docker镜像的文本文件。是由一条条构建镜像所需要的指令和参数构成的脚本。
dockerFile工作图:

构建步骤:
编写DockerFile文件>>docker build命令构建镜像>>docker run 镜像运行
DcokerFile构建过程
1:DockerFile内容基础知识
a、每条保留字指令都必须为大写字母且后面要跟随至少一个参数
b、指令按照从上到下的顺序执行
c、#表示注释
d、每条指令都会创建一个新的镜像层并对镜像进行提交
Dcoker执行DockerFile的大致流程
1:docker从基础镜像运行一个容器
2:执行一条指令并对容器做出修改
3:执行类似docker commit的操作提交一个新的镜像层
4:docker再基于刚提交的镜像运行一个新容器
5:执行dockerFile中的下一条执行直到所有指令都执行完成。
DockerFile、Docker镜像与Docker容器之间的关系:
从应用软件的角度来看,这三者分别代表了软件的三个不同阶段:
Dockerfile:是软件的原材料;
Docker镜像:是软件的交付产品;
Docker容器则可以认为是软件镜像的运行状态,也就是依照镜像运行的容器实例。
DockerFile是面向开发,Docker镜像成为交付的标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当了docker体系的基石。
DockerFile:需要定义饿Dockerfile,Dockerfile定义二了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时候环境、动态链接库、操作系统的发行版、服务进程和内核进程等等;
Docker镜像,在用Dockerfile定义一个文件之后,docker build时候会产生一个Docker镜像,当运行Docker镜像时会真正开始提供服务;
Docker容器,容器是直接提供服务的。


接着,咱们来讲解DockerFile常用的保留指令。常用的指令如下图:

参数说明:


|
参数 |
说明 |
备注 |
|
FROM |
基础镜像。当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板。第一条必须是from |
出现位置:一般都是在dockerfile的第一行。 当前镜像哪个基础镜像 |
|
MAINTAINER |
镜像维护者的姓名和邮箱地址 |
|
|
RUN |
|
shell格式: RUN<命令行命令> #<命令行命令>等同于,在终端操作的shell命令。 例如:RUN yum -y install vim exec格式: RUN["可执行文件","参数1","参数2"] #例如: #RUN ["./test.php","dev","offline"] 等价于 RUN ./test.php dev offline |
|
EXPOSE |
当前容器队尾暴露出的端口 |
|
|
WORKDIR |
指定在创建容器后,终端默认登录的进入工作目录。一个落脚点 |
例如: docker -it ubuntu bash 进入后,pwd.可以发现是 / 的 |
|
USER |
指定该镜像以什么样的用户去执行。如果不指定,默认是root |
|
|
ENV |
用来在构建镜像过程中设置的环境变量 |
|
|
ADD |
将宿主机目录下的文件拷贝进镜像且会自动处理url和解压tar压缩包 |
|
|
COPY |
类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录 复制到新的一层镜像内的<目标路径> |
|
|
VOLUME |
容器数据卷,用于数据保存和持久化工作 |
|
|
CMD |
见下文CMD命令 |
CMD和RUN命令的区别: CMD是在docker run时候运行的 RUN是在docker build是运行的 |
|
ENTRYPOINT |
见下文的ENTRYPOIN命令 |
CMD命令:
指定容器启动后要干的事情。
CMD启动容器命令
CMD指令和RUN指令像是。也是两种格式:shell 和exec.

注意:
Dockerfile中可以有多个cmd指令,但只有最后一个生效,CMD会被docker run之后的参数替换。可以参考官网Tomcat的dockerfile演示讲解:

CMD会被docker run之后的参数替换演示:
我们启动tomcat:
docker run -it -p 8080:8080 镜像id
这种启动后,访问可以正常的。因为这种启动后,直接就是使用了tomcat的dockerfile中的
CMD["catalina.sh","run"]的
如果我们使用以下命令:
docker run -it -p 8080:8080 镜像id /bin/bash
这个时候,通过浏览器访问,就不行了。为什么呢?
因为CMD会被docker run之后的参数替换
也就是dockerfile中的CMD["catalina.sh","run"]被替换成了CMD["/bin/bash","run"]了。/bin/bash替换了catalina.sh。这样相当于tomcat没启动

CMD和RUN命令的区别:
CMD是在docker run时候运行的
RUN是在docker build是运行的
ENTRYPOINT命令

ENTRYPOINT命令格式:


总结:

大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~
结束语
如操作有问题欢迎去 我的 个人博客(www.kaigejava.com)留言或者 微信公众号(凯哥Java)留言交流哦。
本系列教程直通车
直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:
【图文教程】Windows11下安装Docker Desktop
【填坑】在windows系统下安装Docker Desktop后迁移镜像位置
【Docker学习系列】Docker学习1-docker安装
【Docker学习系列】Docker学习2-docker设置镜像加速器
【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?
【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令
【Docker学习系列】Docker学习系列3:常用命令之容器命令
【Docker学习系列】Docker学习4-常用命令之重要的容器命令
【Docker教程系列】Docker学习5-Docker镜像理解
【Docker教程系列】Docker学习6-Docker镜像commit操作案例
【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云
【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?
「Docker学习系列教程」10-Docker容器数据卷案例
docker高级篇1-dockeran安装mysql主从复制
docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置
docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例
Docker高级:Redis集群实战!4主4从缩容到3主3从,怎么处理?

Dockerfile介绍及常用保留指令的更多相关文章
- docker 笔记(4) Dockerfile 常用的指令
下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档. FROM指定 base 镜像. MAINTAINER设置镜像的作者,可以是任意字符串. COPY将文件从 build ...
- 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码
浅析VS2010反汇编 2015年07月25日 21:53:11 阅读数:4374 第一篇 1. 如何进行反汇编 在调试的环境下,我们可以很方便地通过反汇编窗口查看程序生成的反汇编信息.如下图所示. ...
- git介绍和常用指令
Git介绍和常用指令 介绍:Git和SVN一样都是版本控制工具.不同的是Git是分布式的,SVN是集中式的.Git开始用可能感觉难点,等你用习惯了你就会觉得svn是有点恐怖.(如果一个项目有好多人一起 ...
- 8、Dockerfile介绍和最佳实践
一.Dockerfile 概念 1.Dockerfile是什么 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序.库.资源.配置等文件外,还包含了一些为运行时准备的一些配置参数(如 ...
- Docker系列(21)- DockerFile介绍
DockerFile介绍 dockerfile是用来构建docker镜像的文件!命令参数脚本! 构建步骤 编写一个dockerfile文件 docker build构建成为一个镜像 docker ru ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- Python第五章__模块介绍,常用内置模块
Python第五章__模块介绍,常用内置模块 欢迎加入Linux_Python学习群 群号:478616847 目录: 模块与导入介绍 包的介绍 time &datetime模块 rando ...
- webpack 介绍 & 安装 & 常用命令
webpack 介绍 & 安装 & 常用命令 webpack系列目录 webpack 系列 一:模块系统的演进 webpack 系列 二:webpack 介绍&安装 webpa ...
- 工作中常用Git指令操作
常用Git指令总结 前阵子有几天好不顺,可谓是喝水都呛着,更何况被Git给呛着了,还不轻,哈哈.所以打算总结一下自己在工作使用到Git相关的东西以及和大家探讨使用GIt的心得体会.于是,关于Git的的 ...
- linux常用系统指令
[linux常用系统指令] 查看内核版本:cat /proc/version 查看发行版本:cat /etc/issue 通过安装lsb的方式查看发行版本: yum provides */lsb_re ...
随机推荐
- FLUTTER 中 Isolate 的一个例子.
isolate 起因 最近看了一点isolate的东西, 自己写了一个例子. 普通的的 consummer-producer例子是只有前后两端的,实际上,会把前后两端再进行包装. 我这里这个例子,是把 ...
- React中的Ref
React中ref是一个对象,它有一个current属性,可以对这个属性进行操作,用于获取DOM元素和保存变化的值.什么是保存变化的值?就是在组件中,你想保存与组件渲染无关的值,就是JSX中用不到的或 ...
- Django生成数据库表时报错 __init__() missing 1 required positional argument: 'on_delete'
原因: 在django2.0后,定义外键和一对一关系的时候需要加上on_delete选项,此参数为了避免两个表里的数据不一致问题,不然会报错 例如: owner=models.ForeignKey(U ...
- SpringBoot2.X新版本配置拦截器在项目中的使用
拦截器:和过滤器用途基本类似 SpringBoot2.X新版本配置拦截器 implements WebMvcConfigure 自定义拦截器 HandlerInterceptor preHandle: ...
- PowerBuilder现代编程方法X01:PowerPlume的X模式
临渊羡鱼,不如退而结网. PB现代编程方法X01:PowerPlume的X模式 前言 PowerPlume是PowerBuilder深度创新的扩展开发框架(免费商用). 它不是一个大而全的类库(取决于 ...
- [oeasy]python0037_终端_terminal_电传打字机_tty_shell_控制台_console_发展历史
换行回车 回忆上次内容 换行 和 回车 是两回事 换行 对应字节0x0A Line-Feed 水平 不动 垂直 向上喂纸 所以是 feed 回车 对应字节0x0D Carriage-Return 垂直 ...
- PointNet笔记
可能遇到的问题 在windows上运行pointnet的代码时,可能会遇到一些问题: 1.比如提示OSError: no file with expected extension, 这是因为可视化的s ...
- 题解 WD与数列
P5161 WD与数列 可以想到原条件是一个差分形式,所以我们对原数组差分.然后发现答案其实就是 \(\sum_{i<j} \min(lcp(i+1,j+1)+1,j-i)\). 这个东西先跑 ...
- 测试工程师-年终总结PPT
2022年年终总结-xxx 一.首页 2022年年终总结暨2023年工作计划 汇报人:测试组-xxx 日期: 2023.1.13 二.目录 1.年度工作概述 2.工作亮点展示 3.持续精进点 4.明年 ...
- MapGIS路网数据发布
准备 1.MapGIS 10 桌面版(我用的10.5.6.10) 2.路网的shp文件 数据导入 1.创建要素集,如果已有要素集可以不用创建: 2.导入路网要素类,选择准备好的shp文件后导入即可: ...


