当前位置: 首页 > news >正文

docker 笔记6:高级篇 DockerFile解析

目录

 1.是什么?  

2.构建三步骤

3.DockerFile构建过程解析

3.1 Dockerfile内容基础知识

3.2Docker执行Dockerfile的大致流程

  总结

4.DockerFile常用保留字指令

5.案例:自定义镜像

 5.1 要求: Centos7镜像具备vim+ifconfig+jdk8

 5.2编写

5.3 准备编写Dockerfile文件  大写字母D

5.3构建

5.4再体会下UnionFS(联合文件系统)

6.虚悬镜像

6.1是什么 ?  

6.2查看 

6.3删除 

作业-自定义镜像myubuntu 


 

 1.是什么?  

Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。

 Dockerfile reference | Docker Docs

2.构建三步骤

编写Dockerfile文件

docker build命令构建镜像

docker run依镜像运行容器实例

3.DockerFile构建过程解析

3.1 Dockerfile内容基础知识

1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2:指令按照从上到下,顺序执行

3:#表示注释

4:每条指令都会创建一个新的镜像层并对镜像进行提交

3.2Docker执行Dockerfile的大致流程

(1)docker从基础镜像运行一个容器

(2)执行一条指令并对容器作出修改

 (3)执行类似docker commit的操作提交一个新的镜像层

(4)docker再基于刚提交的镜像运行一个新容器

(5)执行dockerfile中的下一条指令直到所有指令都执行完成

  总结


从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,
*  Dockerfile是软件的原材料
*  Docker镜像是软件的交付品
*  Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例
Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

1 Dockerfile,需要定义一个Dockerfile,Dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这时需要考虑如何设计namespace的权限控制)等等;
 
2 Docker镜像,在用Dockerfile定义一个文件之后,docker build时会产生一个Docker镜像,当运行 Docker镜像时会真正开始提供服务;
 
3 Docker容器,容器是直接提供服务的。

4.DockerFile常用保留字指令

参考tomcat8的dockerfile入门  GitHub - docker-library/tomcat: Docker Official Image packaging for Apache Tomcat

FROM

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

MAINTAINER

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

RUN 

容器构建时需要运行的命令

两种格式 

shell格式

 
RUN yum -y install vim

exec格式

RUN是在 docker build时运行

EXPOSE

当前容器对外暴露出的端口

WORKDIR

指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点

USER

指定该镜像以什么样的用户去执行,如果都不指定,默认是root

ENV

用来在构建镜像过程中设置环境变量

ENV MY_PATH /usr/mytest
这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;
也可以在其它指令中直接使用这些环境变量,
 
比如:WORKDIR $MY_PATH

ADD

将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

 COPY

类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置

 VOLUME

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

CMD

指定容器启动后的要干的事情

注意

Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换

参考官网Tomcat的dockerfile演示讲解

 它和前面RUN命令的区别

CMD是在docker run 时运行。RUN是在 docker build时运行

ENTRYPOINT

也是用来指定一个容器启动时要运行的命令

类似于 CMD 指令,但是ENTRYPOINT不会被docker run后面的命令覆盖
而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序

 

是否传参    按照dockerfile编写执行    传参运行
Docker命令    docker run  nginx:test    docker run  nginx:test -c /etc/nginx/new.conf
衍生出的实际命令    nginx -c /etc/nginx/nginx.conf    nginx -c /etc/nginx/new.conf
 优点 : 

在执行docker run的时候可以指定 ENTRYPOINT 运行所需的参数。

注意:

如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

5.案例:自定义镜像

 5.1 要求: Centos7镜像具备vim+ifconfig+jdk8

JDK的下载镜像地址:小柒博客 | 开源软件镜像站

 5.2编写

5.3 准备编写Dockerfile文件  大写字母D

FROM centos
MAINTAINER zzyy<zzyybs@126.com>ENV MYPATH /usr/local
WORKDIR $MYPATH#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATHEXPOSE 80CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

5.3构建

docker build -t 新镜像名字:TAG .

 注意,上面TAG后面有个空格,有个点

运行

docker run -it 新镜像名字:TAG

 docker run -it centosjava8:1.5 /bin/bash

5.4再体会下UnionFS(联合文件系统)

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。


特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录

6.虚悬镜像

6.1是什么 ?  

仓库名、标签都是<none>的镜像,俗称dangling image


1 vim Dockerfile
from ubuntu
CMD echo 'action is success'2 docker build .

6.2查看 

docker image ls -f dangling=true

命令结果

6.3删除 

docker image prune
 
虚悬镜像已经失去存在价值,可以删除

作业-自定义镜像myubuntu 

 编写:准备编写DockerFile文件

FROM ubuntu
MAINTAINER zzyy<zzyybs@126.com>ENV MYPATH /usr/local
WORKDIR $MYPATHRUN apt-get update
RUN apt-get install net-tools
#RUN apt-get install -y iproute2
#RUN apt-get install -y inetutils-pingEXPOSE 80CMD echo $MYPATH
CMD echo "install inconfig cmd into ubuntu success--------------ok"
CMD /bin/bash

构建 

docker build -t 新镜像名字:TAG .

运行

docker run -it 新镜像名字:TAG

相关文章:

docker 笔记6:高级篇 DockerFile解析

目录 1.是什么&#xff1f; 2.构建三步骤 3.DockerFile构建过程解析 3.1 Dockerfile内容基础知识 3.2Docker执行Dockerfile的大致流程 总结 4.DockerFile常用保留字指令 5.案例&#xff1a;自定义镜像 5.1 要求&#xff1a; Centos7镜像具备vimifconfigjdk8 5.2编写 5…...

微信小程序navigateTo进入页面后返回原来的页面需要携带数据回来

需求 如图&#xff1a;点击评论后会通过wx.navigateTo进入到评论页面&#xff0c;评论完返回count给原页面&#xff0c;重新赋值实现数量动态变化&#xff0c;不然要刷新这个页面才会更新最新的评论数量。 实现方式&#xff1a; 在评论页面通过wx.setStorageSync(‘data’…...

Python照片压缩教程详解

介绍 在日常的编程工作中&#xff0c;我们经常需要处理图像&#xff0c;例如上传、下载、显示、编辑等。有时候&#xff0c;我们需要对图像进行压缩&#xff0c;以减少占用的空间和带宽&#xff0c;提高加载速度和用户体验。那么&#xff0c;如何用Python来实现图像压缩呢&…...

软路由的负载均衡设置:优化网络性能和带宽利用率

在现代网络环境中&#xff0c;提升网络性能和最大化带宽利用率至关重要。通过合理配置软路由IP的负载均衡设置&#xff0c;可以有效地实现这一目标&#xff0c;并提高整体稳定性与效果。本文将详细介绍如何进行软路由IP的负载均衡设置&#xff0c;从而优化网络表现、增加带宽利…...

CH06_第一组重构(上)

提取函数&#xff08;Extract Function |106&#xff09; 曾用名&#xff1a;提炼函数&#xff08;Extract Function&#xff09; 反向重构&#xff1a;内联函数&#xff08;115&#xff09; 示例代码 function printOwing(invoice) {printBanner();let outstanding calcul…...

RHCSA-VMware Workstation Pro-Linux基础配置命令

1.代码命令 1.查看本机IP地址&#xff1a; ip addr 或者 ip a [foxbogon ~]$ ip addre [foxbogon ~]$ ip a 1&#xff1a;<Loopback,U,LOWER-UP> 为环回2网卡 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP>为虚拟机自身网卡 2.测试网络联通性&#xff1a; [f…...

YOLO-NAS详细教程-姿势估计实现

姿势估计是一项计算机视觉任务,涉及估计图像或视频中物体或人的位置和方向。它通常涉及识别特定的关键点或身体部位(例如关节),并确定它们的相对位置和方向。姿势估计有许多应用,包括机器人、增强现实、人机交互和运动分析。 自上而下和自下而上是姿态估计中两种常用的方法…...

【扩散模型 李宏毅B站教学以及基础代码运用】

李宏毅教学视频&#xff1a; Link1 B站DDPM公式推导以及代码实现&#xff1a; Link2 这个视频里面有论文里面的公式推导&#xff0c;并且1小时10分开始讲解实例代码。 文章目录 扩散模型概念&#xff1a;Diffusion Model工作原理&#xff1a;影像生成模型本质上的共同目标B站…...

SpringBoot隐藏文件

1.设置 2.输入file Types 3.点击忽略文件或者文件夹 4.成功...

常见数据库介绍对比之SQL关系型数据库

1.关系型数据库介绍 关系型数据库是一种基于关系模型的数据库&#xff0c;它使用表格来组织和存储数据。下面是一些常见的关系型数据库&#xff1a; 1.1. MySQL MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;广泛用于Web应用程序和企业级…...

OLED透明屏模块:引领未来显示技术的突破

OLED透明屏模块作为一项引领未来显示技术的突破&#xff0c;以其独特的特点和卓越的画质在市场上引起了广泛关注。 根据行业报告&#xff0c;预计到2025年&#xff0c;OLED透明屏模块将占据智能手机市场的20%份额&#xff0c;并在汽车导航系统市场中占据30%以上份额。 那么&am…...

Python_操作记录

1、Pandas读取数据文件&#xff08;以文本文件作为示例&#xff09;&#xff0c;sep表示间隔&#xff0c;headerNone表示无标题行 df pd.read_table("data/youcans3.dat", sep"\t", headerNone) 2、线性规划问题求解 1&#xff09;问题定义&#xff0c;…...

常用激活函数整理

最近一边应付工作&#xff0c;一边在补足人工智能的一些基础知识&#xff0c;这个方向虽然新兴&#xff0c;但已是卷帙浩繁&#xff0c;有时不知从何入手&#xff0c;幸亏有个适合基础薄弱的人士学习的网站&#xff0c;每天学习一点&#xff0c;积跬步以至千里吧。有像我一样学…...

uniapp 地图跳转到第三方导航软件 直接打包成apk

// 判断是否存在导航软件judgeHasExistNavignation() {let navAppParam [{pname: com.baidu.BaiduMap,action: baidumap://}, // 百度{pname: com.autonavi.minimap,action: iosamap://}, // 高德{pname: com.tencent.map,action: tencentmap://}, // 腾讯];return navAppPara…...

CentOS 8 通过YUM方式升级最新内核

CentOS 8 通过YUM方式升级最新内核 查看当前内核 uname -r 4.18.0-193.6.3.el8_2.x86_64导入 ELRepo 仓库的公钥&#xff1a; rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org安装升级内核相关的yum源仓库(安装 ELRepo 仓库的 yum 源) yum install https://www…...

java 版本企业招标投标管理系统源码+功能描述+tbms+及时准确+全程电子化

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看所…...

Python爬虫数据存哪里|数据存储到文件的几种方式

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 爬虫请求解析后的数据&#xff0c;需要保存下来&#xff0c;才能进行下一步的处理&#xff0c;一般保存数据的方式有如下几种&#xff1a; 文件&#xff1a;txt、csv、excel、json等&#xff0c;保存数据量小。 关系型数据库…...

软件测试/测试开发丨Web自动化 测试用例流程设计

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27173 一、测试用例通用结构回顾 1.1、现有测试用例存在的问题 可维护性差可读性差稳定性差 1.2、用例结构设计 测试用例的编排测试用例的项目结构 1…...

git撤销修改命令

要撤销Git中尚未提交的所有修改,可以使用以下几种方法: 1、使用git checkout命令丢弃工作目录的修改&#xff0c;重置工作目录中所有文件的修改。 git checkout . 2、使用git reset命令重置暂存区和工作目录&#xff0c; 重置暂存区和工作目录,回到最后一次提交后的状态。 …...

EOCR-AR电机保护器自动复位的启用条件说明

为适用不同的现场使用需求&#xff0c;施耐德韩国公司推出了带有自动复位功能的模拟型电动机保护器-EOCR-AR。EOCR-AR电机保护器具有过电流、缺相、堵转保护功能&#xff0c;还可根据实际需要设置自动复位时间。 EOCR-AR自动复位的设置方法 如上图&#xff0c;R-TIME旋钮是自动…...

城通网盘下载速度慢?3分钟学会ctfileGet终极免费提速方案

城通网盘下载速度慢&#xff1f;3分钟学会ctfileGet终极免费提速方案 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾经被城通网盘的龟速下载折磨得抓狂&#xff1f;面对50KB/s的限速、无尽的验…...

手把手教你用AD9834 DDS模块DIY一个可调信号源(附AD原理图/PCB/程序)

从零构建AD9834 DDS可调信号源&#xff1a;硬件搭建与软件调优全指南 在电子设计与射频实验中&#xff0c;一个稳定可靠的可调信号源是不可或缺的工具。商用信号发生器往往价格昂贵&#xff0c;而基于AD9834 DDS模块的DIY方案&#xff0c;能以极低成本实现0-10MHz频率范围内的高…...

Failed to initialize NVML: Driver/library version mismatch:一次驱动报错

Failed to initialize NVML: Driver/library version mismatch:一次驱动报错 引子:一个看似简单的系统就卡爆了。嗯。我的系统就会卡爆了。你的系统可能还是但我觉得有可能是我的。这什么&#xff1f;啊&#xff1f;受不了我的大 U 盘了。报错 那天我在自己的 Ubuntu 工作站上准…...

机器学习---监督学习入门实验全攻略(小白友好版)

新晋码农一枚&#xff0c;小编会定期整理一些写的比较好的代码和知识点&#xff0c;作为自己的学习笔记&#xff0c;试着做一下批注和补充&#xff0c;转载或者参考他人文献会标明出处&#xff0c;非商用&#xff0c;如有侵权会删改&#xff01;欢迎大家斧正和讨论&#xff01;…...

武汉专升本民办 vs 公办机构怎么选

每年到了专科大三的春天&#xff0c;武汉的专升本备考群里总会出现类似的问题&#xff1a;“公办机构是不是比民办靠谱&#xff1f;”“民办会不会拿钱不办事&#xff1f;”“集训营到底该冲公办还是选民办&#xff1f;”说实话&#xff0c;这个问题没有标准答案&#xff0c;因…...

JS混淆解密实战:Python沙箱还原前端加密逻辑

1. 这不是写个requests就能跑通的爬虫——JS混淆正在成为数据获取的第一道真实门槛“Python爬虫逆向&#xff1a;JS混淆数据解密实战”这个标题里藏着一个被太多人低估的现实&#xff1a;今天你用requests.get(url)拿到的页面&#xff0c;大概率已经不是原始HTML了。它可能是一…...

Recipe协议:TEE与RDMA赋能的分布式复制技术

1. 现代硬件加速的复制协议&#xff1a;Recipe在不可信云环境中的应用在分布式系统的世界里&#xff0c;复制协议就像一支交响乐团的指挥&#xff0c;确保每个乐手&#xff08;节点&#xff09;都能在正确的时间演奏正确的音符&#xff08;数据&#xff09;。传统的崩溃容错&am…...

回归分析((>^ω^<)喵)

回归分析找到2个数据以上的的关系做预测的。是预测数字形的而不是男还是女这种问题1.举例略说这是一张图&#xff0c;是学习时间与成绩的回归分析&#xff0c;这条红线是回归线Xx是自变量&#xff0c;是用于预测的&#xff0c;例如学习时间&#xff0c;是因Yy是因变量 &#xf…...

CANN-Ascend-C存储体系-昇腾NPU的四级缓存怎么用才算对

写 Ascend C 算子&#xff0c;最常犯的错误不是计算写错&#xff0c;是数据搬运写错。昇腾NPU有四级存储&#xff0c;每一级的容量、带宽、延迟都不同。数据该放在哪一级、什么时候搬、搬多少&#xff0c;直接决定算子性能。 四级存储级别名称容量带宽延迟用途L0HBM&#xff08…...

什么,锐捷极简以太彩光一张网竟然有两幅面孔?

在园区网络的建设中&#xff0c;我们常常面临一个两难选择&#xff1a;教学或办公楼需要大带宽&#xff0c;宿舍或病房楼需要弹性带宽。如果分别建两张网&#xff0c;成本翻倍、运维复杂。 锐捷极简以太彩光方案给出的答案是&#xff1a;一张物理网络&#xff0c;同时融合两种…...