Dockerfile详解

news2024/9/25 13:20:11

一、能干嘛?

我们总会遇到下面这种情况:使用docker pull 拉取下来的镜像发现其提供的功能并不完善,比如拉下来个centos的镜像,运行该镜像生成容器发现连vim,ifconfig命令都没有!想要在该镜像的基础上扩充其功能点,于是我们想到可以通过如下办法:
先进入该容器进行相关的yum安装等配置,然后安装配置完成之后执行下面的命令让该容器形成一个自定义的镜像:

docker commit -m=“提交描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

但上面的操作还是太麻烦了,需要人手工进入容器,等待软件的一个个下载和安装,有没有一种清单可以把要做的事情规划好,然后交给docker自动按照规划去执行呢?
答案:有的,这就是本篇博客要提到的Dockerfile!

二、Dockerfile基础认知

2.1语法要求

1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数
2.指令按从上到下顺序执行
3.#标识注释
4.每条指令都会创建一个新的镜像层并对镜像进行提交

下面圈出来的部分就是保留字
在这里插入图片描述

2.2Docker执行Dockerfile的大致流程

1.docker从基础镜像运行一个容器
2.执行一条指令并对容器进行修改
3.执行类似docker commit的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新的容器
5.执行dockerfile中的下一条指令直到所有指令都执行完成

在这里插入图片描述

2.3保留字解析

参考一个tomcat提供的Dockerfile

FROM:基础镜像,当前镜像是基于哪个镜像的,指定一个已存在的镜像作为模版,第一条必须是from
MAINTAINER:镜像维护者的姓名和邮箱地址
RUN:容器在构建时需要运行的命令,两种格式:shell格式和exec格式
EXPOSE:暴露的端口
WORKDIR:指定在创建容器后,终端默认登陆进来的工作目录,一个落脚点
USER:指定该镜像以什么样的用户去执行,如果都不指定默认是root
ENV:用来在构建镜像过程中设置环境变量,在其他指令中可以直接引用这些环境变量
VOLUME:容器数据卷,用于数据保存和持久化工作
COPY:类似ADD,拷贝文件和目录到镜像中。
ADD:将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包(完全可代替copy)
CMD:指定容器启动后要做的事情,注意:Dockerfile可以有多个CMD指令,但只有最后一个生效,cmd会被docker run之后的参数替换掉,比如下面命令后面加上了/bin/bash,会将Dockerfile最后的CMD ["catalina.sh", "run"]覆盖掉,导致访问localhost:8080看不见猫
在这里插入图片描述
ENTRYPOINT:也是用来指定一个容器启动时要运行的命令,类似CMD指令,但ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数,送给ENTRYPOINT指令指定的程序。
在这里插入图片描述

三、小案例

自定义一个centos的镜像,自带java等环境,下面是我的Dockerfile:

#声明当前镜像基于centos
FROM centos
#作者及邮箱
MAINTAINER lzl<382491212@qq.com>
#声明一个变量
ENV MYPATH /usr/local
#进入该镜像后,进入的目录为/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-8u333-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u333-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:$PATH

#暴露端口 
EXPOSE 80
# 这里的echo 相当于java中的 System.out.println(""),输出到控制台的信息
CMD echo $MYPATH
CMD echo "----------success----------"
CMD /bin/bash

注意要在Dockerfile文件的同级文件中放一个jdk-8u333-linux-x64.tar.gz文件,因为上面的ADD命令用到了了这个!

在这里插入图片描述
然后命令行执行docker build -t centosjava8:1.5即可完成我们的目标!
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376453.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[SQL]增删查改语法概览

数据定义 基本概念 基本表 本身独立存在的表SQL中一个关系就对应一个基本表一个(或多个)基本表对应一个存储文件一个表可以带若干索引 存储文件 物理结构对用户透明索引存放在存储文件中 视图 从一个或几个基本表导出的表数据库中至存放数据的定义而不存放视图对应的数据视…

Moonlight iPad全屏无边框串流方法

环境&#xff1a;iPad MoonLight 串流PC 问题&#xff1a;iPad无法全屏&#xff0c;有边框 解决办法&#xff1a;将电脑分辨率和MoonLight自定义分辨率调整为iPad原始分辨率 背景&#xff1a;在使用iPad进行MoonLight串流PC游戏时&#xff0c;发现客户端不论如何设定iPad都有边…

SQL函数

SQL函数 DATE_SUB()函数 1.1函数语法定义 1.2函数实际应用&#xff1a; 语法: 获取当前日期&#xff1a;select curdate()获取当前日期前一天&#xff1a;select date_sub(curdate(),interval 1 day)获取当前日期后一天&#xff1a;select date_sub(curdate(),interval -1 …

mysql(一) 使用注意事项及优化

初学mysql的时候、写了一份 "什么是CRUD&#xff1f; CRUD的操作" 的文章&#xff08;18年的&#xff09; 我开心看到有朋友经常在下面讨论一些问题、 但是以现在&#xff08;今天 23年&#xff09;回头看觉得 那些只是入门需要知道和掌握的、也刚好最近不是很忙 所…

S3C2440开发环境搭建

拿出了之前的S3C2440开发板&#xff0c;然后把移植uboot、移植内核、制作根文件系统、设备树编写驱动等几项再做一遍&#xff0c;这篇文章先记录下环境搭建过程&#xff0c;以及先把现成的uboot、内核、根文件系统下载进去&#xff0c;看看开发板还能不能用&#xff0c;先熟悉一…

【C++】踏入C++的大门(万字总结)

文章目录&#x1f3aa; 踏入C的大门&#x1f680;1.什么是C&#x1f680;2.C发展史&#x1f680;3.C关键字&#x1f680;4.命名空间⭐4.1 命名空间定义⭐4.2 命名空间使用⭐4.3 C输入和输出&#x1f680;5.缺省参数⭐5.1 缺省参数概念⭐5.2 缺省参数分类&#x1f680;6.函数重载…

Unreal Engine10:Character的实现

写在前面 这里主要是介绍一下Character的实现&#xff0c;顺带也介绍一下UE4资源的获取&#xff1b; 一、UE4资源获取 1. 地图的获取 1.1 下载资源 在Epic Games Launcher的虚幻商城中搜索内容&#xff0c;带有环境标签的就主要是地图资源&#xff1b;有一些是免费的资源和…

C#--耗时操作实现UI界面实时更新不阻塞(耗时操作解决窗体卡顿)

前言C#实现窗体加载进度条或者百分比实时显示耗时操作的进度&#xff0c;方法有很多。但是经过我的学习、查找与实际应用&#xff0c;发现Task配合MethodInvoker最为高效便捷。下面我就来结合代码讲一下要注意的问题。基础知识C#在winform上进行耗时操作往往会放置progressbar&…

JavaWeb 实战 01 - 计算机是如何工作的

计算机是如何工作的1. 计算机发展史2. 计算机的基本组成2.1 冯诺依曼体系结构2.2 CPU的内部结构2.3 指令2.3.1 指令表2.3.1.1 寄存器2.3.2 CPU的工作流程2.4 小结3. 操作系统3.1 核心功能3.2 操作系统的软硬件结构3.3 什么是进程 / 任务3.4 进程管理3.4.1 管理3.4.2 PCB : 进程…

Carl2——二叉树

一.定义struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {} };二.遍历深度优先1.1 迭代法【1】前序遍历&#xff08;144&#xff09;class Solution { public:vector<int> preorderTraversal(TreeNode* roo…

小文智能结合ChatGPT的产业未来

最近几个月&#xff0c;由人工智能实验室OpenAI发布的对话式大型语言模型ChatGPT在国内外各大平台掀起了一阵AI狂潮。短短几天时间&#xff0c;其用户量就突破了百万大关&#xff0c;注册用户之多一度导致服务器爆满。 继AI画图之后&#xff0c;ChatGPT成为了新的顶流&#xf…

支付宝二面:使用 try-catch 捕获异常会影响性能吗?

一. JVM异常处理逻辑 Java 程序中显式抛出异常由athrow指令支持&#xff0c;除了通过 throw 主动抛出异常外&#xff0c;JVM规范中还规定了许多运行时异常会在检测到异常状况时自动抛出(效果等同athrow), 例如除数为0时就会自动抛出异常&#xff0c;以及大名鼎鼎的 NullPointe…

论文阅读:NeRF++: ANALYZING AND IMPROVING NEURAL RADIANCE FIELDS

中文标题&#xff1a;分析并提升神经辐射场 提出问题 把NeRF生成的视角图像投影到一个球模型上&#xff08;体密度在球面上为1&#xff0c;其余为零&#xff09;&#xff0c;这个模型可以很好解释训练集&#xff08;左2&#xff09;&#xff0c;但是一旦推广到其他视角&#x…

阶段八:服务框架高级(第五章:服务异步通信-高级篇(RabbitMQ高级))

阶段八&#xff1a;服务框架高级&#xff08;第五章&#xff1a;服务异步通信-高级篇&#xff08;RabbitMQ高级&#xff09;&#xff09;Day-第五章&#xff1a;服务异步通信-高级篇&#xff08;RabbitMQ高级&#xff09;0.学习目标1.消息可靠性1.1.生产者消息确认1.1.1.修改配…

Docker离线部署

Docker离线部署 目录 1、需求说明 2、下载docker安装包 3、上传docker安装包 4、解压docker安装包 5、解压的docker文件夹全部移动至/usr/bin目录 6、将docker注册为系统服务 7、重启生效 8、设置开机自启 9、查看docker版本信息 1、需求说明 大部份公司为了服务安全…

【PostgreSQL的idle in transaction连接状态】

在平时查询pg_stat_activity这个视图的时候&#xff0c;每一行包含了一个进程的相关信息&#xff0c;包含当前正在执行的SQL&#xff0c;或者会话的状态等等&#xff0c;state字段表示当前进程的状态。在PostgreSQL数据库里&#xff0c;其实代码里总共定义了7种BackendState&am…

手推式洗地机什么牌子好?洗地机品牌排行榜

当今潮流下&#xff0c;大家都开始纷纷追求高品质的居家生活&#xff0c;洗地机也成为越来越多人的追求&#xff0c;因为和传统的吸尘器相比&#xff0c;洗地机除了有扫地的功能之外&#xff0c;还可以轻松搞定家里的拖地任务&#xff0c;下面我们一起来看看洗地机排行榜都有哪…

怎么把音乐传到苹果手机上?如何将铃声导入iphone

很多人肯定都有这样的经验—比起电脑&#xff0c;使用iPhone和iPad播放音乐能获得更好的声音体验。 因此&#xff0c;现在有越来越多的用户将音乐传输到iPhone/iPad上播放。怎么把音乐传到苹果手机上&#xff1f;把音乐导入苹果手机&#xff0c;主要有2种方法&#xff1a;一种是…

【python】运算符,有关它的一切,都在这里了

Python运算符嗨害大家好鸭&#xff01;我是小熊猫~什么是运算符&#xff1f;Python算术运算符Python比较运算符Python赋值运算符Python位运算符Python逻辑运算符Python成员运算符Python身份运算符Python运算符优先级嗨害大家好鸭&#xff01;我是小熊猫~ 源码资料电子书:点击此…

【软考——系统架构师】UML 建模与架构文档化

&#x1f50e;这里是【软考——系统架构师】&#xff0c;关注我考试轻松过线 &#x1f44d;如果对你有帮助&#xff0c;给博主一个免费的点赞以示鼓励 欢迎各位&#x1f50e;点赞&#x1f44d;评论收藏⭐️ 文章目录UML 基础UML 软件开发过程系统架构文档化送书福利UML 基础 U…