学习docker第五弹-----高级篇start-Dockerfile
docker目录
- 1 Dockerfile是什么
- 2 Dockerfile能干嘛
- 3 如何书写Dockerfile
- 3.1 Dockerfile构建过程解析
- 3.2 小总结
- 3.3 Dockerfile的基本知识
- 3.5 保留字
- FROM
- MAINTAINER
- RUN 有两种方式
- EXPOSE
- WORKDIR
- ENV
- USER
- VOLUME
- ADD
- CMD
- ENTRYPOINT
- 4 后记
1 Dockerfile是什么
Dockerfile顾名思义就是跟docker有关的文件,官方一点就是用于构建docker镜像的文本文件,是由指令和参数组成的脚本。
tips:Dockerfile的第一个字母要大写,不要问我为什么?比如张三就是叫张三。
Dockerfile官网链接给到大家啦,自行按需查看捏~
https://docs.docker.com/reference/dockerfile/
2 Dockerfile能干嘛
我们之前了解过,相对于传统的虚拟机来说,docker的速度能够达到秒级,是因为docker的镜像都是十分基础的,里面的内核都是必须的,不必要的东西都需要后天的去增加功能。比如基础的ubuntu是没有vim、ifconfig的,这就需要我们手动操作,那不难理解,随着我们需求的增加,可能不断需要新的增加内容,因为我们需求的不断变化,使得我们重复安装内容的操作逐渐麻烦,所以Dockerfile应运而生。
我的理解是Dockerfile能够批量进行操作,运行命令和参数,便于我们创建所需的镜像。
3 如何书写Dockerfile
构建三部曲:编写Dockerfile------> docker build构建镜像--------> docker run
3.1 Dockerfile构建过程解析
Docker执行Dockerfile的大致流程
1 docker从基础镜像运行一个容器
2 执行一条指令并对容器作出修改
3 执行类似docker commit的操作提交一个新的镜像层
4 docker再基于刚提交的镜像运行一个新容器
5 执行Dockerfile中的下一条指令直到所有指令都执行完成
3.2 小总结
从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,Dockerfile是软件的原材料,Docker镜像是软件的交付产品,Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例。
3.3 Dockerfile的基本知识
1 每条保留字指令都必须为大写字母,且后面要跟随至少一个参数;
2 指令按照从上到下,顺序执行;
3 #表示注释;
4 每条指令都会创建一个新的镜像层并对镜像进行提交。
是不是看到这里就想,啥是保留字啊,我刚学的时候也一头雾水了。
3.5 保留字
注意,上文提到过,保留字都是大写字母且至少跟随一个参数
FROM
基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROM,类似与基类或者说父类
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN 有两种方式
RUN yum -y install vim --------相当于shell命令
RUN [“可执行文件”, “参数1”, …] -------------exec格式
我们用shell命令多一点,可以发现它就是RUN
加上我们的Linux命令,更加适合中国宝宝的学习方式,更好地迁移学习。
RUN
是在 docker build
时运行的
EXPOSE
当前容器对外暴露出的端口
#暴露80端口
EXPOSE 80
WORKDIR
指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV
用来在构建镜像过程中设置环境变量
USER
指定该镜像以什么样的用户去执行,如果都不指定,默认是root
VOLUME
容器数据卷,用于数据保存和持久化工作
ADD
将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
CMD
指定容器启动后要干的事情
CMD指令的格式和 RUN 类似,也是两种格式:
1 shell 格式: CMD <命令>
2 exec格式: CMD[“可执行文件”,“参数1”,“参数2”…]
3 参数列表格式:CMD[“参数1”,“参数2”…],在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数
注意:
1 Dockerfile中可以有多个
CMD
指令,但只有最后一个生效,CMD
会被docker run
之后的参数替换
2CMD
和RUN
的区别:CMD
是在docker run
时运行;RUN
是在docker build
时运行
ENTRYPOINT
类似于CMD
,用来指定一个容器启动时要运行的命令,但不会被docker run
后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT
指令指定的程序。
ENTRYPOINT
可以和CMD
一起使用,一般是变参才会使用CMD
,这里的CMD
等于是在给ENTRYPOINT
传参。
就是说,当指定了
ENTRYPOINT
后,CMD
的含义就发生了变化,不再是直接运行其命令,而是将CMD
的内容作为参数传递给ENTRYPOINT
指令,他们的组合会变成<ENTRYPOINT> "<CMD>"
优点:
在执行docker run
的时候可以指定ENTRYPOINT
运行所需的参数。
注意:
如果Dockerfile中存在多个ENTRYPOINT
指令,仅最后一个生效
4 后记
下一篇讲一下Dockerfile的案例,记得来看啊~
BB啊,如果本文档对您有一点点用的话,记得给美丽好学的我点个大大的赞,谢谢BB~
今天带了大圈的耳环尊嘟很好看,很开心,素颜也好看,嘻嘻!愿我们都有一个好心情!
相关文章:
学习docker第五弹-----高级篇start-Dockerfile
docker目录 1 Dockerfile是什么2 Dockerfile能干嘛3 如何书写Dockerfile3.1 Dockerfile构建过程解析3.2 小总结3.3 Dockerfile的基本知识3.5 保留字FROMMAINTAINERRUN 有两种方式EXPOSEWORKDIRENVUSERVOLUMEADDCMDENTRYPOINT 4 后记 1 Dockerfile是什么 Dockerfile顾名思义就是…...
【Elasticsearch】Elasticsearch集成Spring Boot
Elasticsearch集成Spring Boot 概述 Spring Data Elasticsearch 介绍一、环境初始化二、实战入门1、定义数据实体类2、定义Dao层3、框架集成-SpringData-集成测试-索引操作4、框架集成-SpringData-集成测试-文档操作5、框架集成-SpringData-集成测试-文档搜索 概述 Spring Data…...
HarmonyOS 移
什么是HarmonyOS HarmonyOS 中文名字是 鸿蒙操作系统 中国神话传说盘古在昆仑山开天辟地之前,世界是一团混沌状的元气,这种自然的元气叫做鸿蒙,那个时代成为鸿蒙时代华为公司的操作系统以鸿蒙取名,是不是有开天辟地之寓意&#x…...

跨子网的WinCC客户机/服务器如何实现通讯?
为了更有效地利用有限的IP地址,为了减少广播对网络带宽的占用从而提高带宽,为了实现在不同子网中应用不同的安全策略从而提高网络安全性,现场通常要求划分子网,将安全等级要求不同的计算机安置在不同的子网中,分开管理…...

java 面向对象高级
1.final关键字 class Demo{public static void main(String[] args) {final int[] anew int[]{1,2,3};// anew int[]{4,5,6}; 报错a[0]5;//可以,解释了final修饰引用性变量,变量存储的地址不能被改变,但地址所指向的对象的内容可以改变} }什…...
递推经典例题 - 爬楼梯
一、题目阅读 题目描述 一段楼梯有n级台阶。你每次可以跨一个、两个或者三个台阶。 请问走上n级台阶有几种方案?答案对998244353取模。 输入格式 一行一个数n。 输出格式 一行一个数,表示方案数。 样例 Input 1 3 Output 1 4 样例解释 1 1 1 3 1 2 …...

OpenCV视觉分析之目标跟踪(12)找到局部的最大值函数meanShift()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在反向投影图像上找到一个对象。 meanShift 是一种用于图像处理和计算机视觉领域的算法,特别适用于目标跟踪、图像分割等任务。该算…...

《数据治理精选案例集2.0(2024版)》592页PDF(已授权分享)
《亿信华辰数据治理精选案例集2.0》是北京亿信华辰软件有限责任公司倾力打造的专业数据治理案例集,汇集了100个一线政企数据治理实践案例,覆盖13大行业和500业务场景,通过深入剖析数据治理难题,提供了新思路和实战经验,…...

【51单片机】LED点阵屏 原理 + 使用
学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 LED点阵屏显示原理74HC595 编码LED点阵屏显示笑脸LED点阵屏显示动画 LED点阵屏 点阵屏在开发板的右上角,注意使用前需要…...

Java基于SpringBoot+Vue的宠物共享平台的设计与实现(附源码,文档)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

【案例】Excel使用宏来批量插入图片
一、场景介绍 我有一个excel文件,需要通过一列的文件名称,按照规则给批量上传图片附件。 原始文件: 成功后文件: 二、实现方法 1. 使用【wps】工具打开Excel文件,将其保存为启用宏的文件。 2.找到编辑宏的【VB编辑器…...
报名开启|开放原子大赛“Rust数据结构与算法学习赛”
开放原子大赛“Rust数据结构与算法学习赛”报名进行中,报名截止时间为11月17日。 为了进一步促进开源技术的发展,提升国内开源社区的创新能力和国际影响力,开放原子开源基金会与清华大学开源操作系统训练营等单位,共同举办本次Rus…...

[翻译] 创始人模式(Founder Mode)
Founder Mode 上周在一次YC活动中,Brian Chesky发表了一场在场的每个人都难以忘怀的演讲。会后,我与大多数创始人交流时,他们都表示这是他们听过的最好的演讲。连Ron Conway也第一次忘记了记笔记。我不会试图在这里复述演讲内容,…...
拓扑排序(C++类封装+数组模拟队列和邻接表)
拓扑序列 对于任何无回路的AOV网,其顶点均可排成拓扑序列,并且其拓扑序列未必唯一。步骤如下: 1.从网中选择一个入度为0的顶点且输出。 2.从网中删除该顶点及其所有出边。 3.执行1,2,直至所有顶点已输出࿰…...
FP独立站引流革命:GG斗篷技术解锁流量新策略
在跨境电商领域,FP独立站的运营者们面临着一个共同的挑战:如何在遵守平台规则的同时,有效地吸引和保持流量。传统的引流方法如SEM、SEO、邮件推广和社交媒体营销,对于FP独立站来说,往往效果有限。但现在,一…...

管道(Pipes)、过滤器(Filters)和拦截器(Interceptors)
在Java中,管道(Pipes)、过滤器(Filters)和拦截器(Interceptors)是三种不同的概念,它们在应用中的作用和实现方式有所不同。以下是它们之间的主要区别: 一、管道…...

uniapp组件样式运行至小程序失效
文章目录 一、uniapp样式穿透打包运行至微信小程序失效 一、uniapp样式穿透打包运行至微信小程序失效 组件样式隔离文章参考 解决方案 options: {styleIsolation: "shared",},这个配置项改变了小程序组件的样式隔离模式,使得组件的样式能够共享和继承。…...
认识鸿蒙系统
鸿蒙系统作为华为推出的操作系统,近年来在智能手机、智能穿戴、车载和家居等多个领域取得了显著的发展。其独特的分布式技术、高性能和安全性等特点,使其在与安卓和iOS的竞争中逐渐崭露头角,有望形成三足鼎立之势。 从开发者角度来看&#x…...
Docker Compose部署Rabbitmq(Dockerfile安装延迟队列)
整个工具的代码都在Gitee或者Github地址内 gitee:solomon-parent: 这个项目主要是总结了工作上遇到的问题以及学习一些框架用于整合例如:rabbitMq、reids、Mqtt、S3协议的文件服务器、mongodb github:GitHub - ZeroNing/solomon-parent: 这个项目主要是…...

硬件基础06 滤波器——无源、有源(含Filter Solutions、Filter Pro、MATLAB Fdatool)
目录 一、Filter Solutions 1、软件资源及安装教程如下 2、使用相关内容 二、Filter Pro使用 1、软件资源及安装教程如下 2、使用相关内容 三、MATLAB Fdatool 1、在matlab命令中输入fdatool 2、输入相关参数,例如低通、FIR、20阶、hamming窗 3、调用 &am…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...