Linux系统容器化部署中,构建Docker 镜像中包含关键指令和参数的文件dockerfile的详细介绍

news2024/9/24 23:16:47

  目录

一、Dockerfile的用处

        1、自动化构建

        2、可重复性

        3、可移植性

        4、版本控制

        5、优化镜像大小

        6、便于分享和分发

二、Dockerfile 的基本结构

        1、基础镜像(FROM)

        2、维护者信息(MAINTAINER/LABEL maintainer)

        3、设置工作目录(WORKDIR)

        4、安装软件包(RUN)

        5、复制文件(COPY)

        6、添加文件(ADD)

        7、设置容器启动时执行的命令(CMD/ENTRYPOINT)

        8、设置环境变量(ENV)

        9、暴露端口(EXPOSE)

        10、卷(VOLUME)

        11、健康检查(HEALTHCHECK)

三、构建 Docker 镜像

四、总结


        Dockerfile 是一个文本文件,它包含了一系列的指令和参数,这些指令和参数被 Docker 用于自动构建 Docker 镜像。通过编写 Dockerfile,开发者可以定义镜像的每一层需要进行的操作,比如安装软件、复制文件、设置环境变量等。这种方式使得镜像的构建过程可重复、可移植,并且易于分享给其他开发者和系统。

一、Dockerfile的用处

        1、自动化构建

        Dockerfile 提供了一种自动化的方式来构建 Docker 镜像。通过定义一系列的指令和参数,Dockerfile 能够自动地执行安装软件、配置环境、复制文件等操作,从而构建出所需的镜像。这种方式大大简化了镜像的构建过程,减少了手动操作的错误和复杂性。

        2、可重复性

        由于 Dockerfile 包含了构建镜像所需的所有指令和参数,因此它确保了镜像构建过程的可重复性。无论在哪个环境、哪个时间点上,只要使用相同的 Dockerfile 和构建上下文,就能够构建出完全相同的镜像。这对于保持开发、测试和生产环境的一致性至关重要。

        3、可移植性

        Dockerfile 使得 Docker 镜像的构建过程与底层操作系统和平台无关。只要安装了 Docker,就可以在任何地方、任何时间点上使用 Dockerfile 来构建镜像。这种可移植性使得 Docker 成为了跨平台、跨环境部署应用的理想选择。

        4、版本控制

        Dockerfile 可以像其他代码文件一样被纳入版本控制系统中(如 Git)。这样,开发者就可以跟踪镜像构建过程的变化,并在需要时回滚到以前的版本。此外,通过版本控制,团队成员之间也可以共享和协作修改 Dockerfile,从而提高开发效率。

        5、优化镜像大小

        通过精心编写 Dockerfile,开发者可以优化镜像的大小和层数。例如,使用多阶段构建(multi-stage builds)可以将最终镜像中不需要的层和文件排除掉,从而减少镜像的大小。此外,通过合理组织 Dockerfile 中的指令顺序和合并多个命令到一个 RUN 指令中,也可以减少镜像的层数和构建时间。

        6、便于分享和分发

        一旦构建完成,Docker 镜像就可以被推送到 Docker Hub 或其他 Docker 镜像仓库中供他人下载和使用。由于 Dockerfile 提供了构建镜像所需的所有信息,因此其他人只需要下载 Dockerfile 和相关的构建上下文文件,就可以在自己的环境中重新构建出相同的镜像。这使得 Docker 镜像的分享和分发变得非常方便和快捷。

二、Dockerfile 的基本结构

        一个 Dockerfile 通常由几个部分组成:

        1、基础镜像(FROM)

        Dockerfile 的第一条指令必须是 FROM,它指定了构建新镜像时的基础镜像。后续的指令都是在这个基础镜像之上进行的。

        2、维护者信息(MAINTAINER/LABEL maintainer)

     推荐在 Dockerfile 中添加维护者信息,以便于了解镜像的维护者及联系方式。不过,MAINTAINER 指令已被废弃,现在推荐使用 LABEL maintainer="..." 来代替。

        3、设置工作目录(WORKDIR)

        使用 WORKDIR 指令可以设置镜像中后续 RUN、CMD、ENTRYPOINT 指令的工作目录。

        4、安装软件包(RUN)

        RUN 指令用于在镜像中执行命令,这些命令可以是安装软件包、设置环境变量等。

        5、复制文件(COPY)

        COPY 指令用于将文件或目录从构建上下文(即 Dockerfile 所在的目录)复制到镜像中。

        6、添加文件(ADD)

        ADD 指令类似于 COPY,但它还具备一些额外的功能,比如自动解压压缩文件。

        ADD 的优点: 在执行 <源文件> 为 tar 压缩文件的话,压缩格式为 gzip、bzip2 以及 xz 的情况下,会自动复制并解压到 <目标路径>。

        ADD 的缺点: 在不解压的前提下,无法复制 tar 压缩文件。会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。

        7、设置容器启动时执行的命令(CMD/ENTRYPOINT)

        CMD 指令用于指定容器启动时默认执行的命令,但它可以被 docker run 命令行中的命令覆盖。而 ENTRYPOINT 指令则用于配置容器启动时运行的可执行文件,它让容器像是一个可执行程序。CMD 和 ENTRYPOINT 可以联合使用,以提供更灵活的容器启动配置。

        8、设置环境变量(ENV)

        ENV 指令用于设置环境变量。这些环境变量在容器运行时是可用的。

        9、暴露端口(EXPOSE)

        EXPOSE 指令用于声明容器运行时监听的端口,但它只是起到声明的作用,并不会自动将端口映射到宿主机的端口上。

        10、卷(VOLUME)

        VOLUME 指令用于创建挂载点,这些挂载点可以被用于容器之间共享数据,或者持久化数据。

        11、健康检查(HEALTHCHECK)

        HEALTHCHECK 指令用于指定一个命令来检查容器的健康状态。

三、构建 Docker 镜像

        编写好 Dockerfile 后,可以使用 docker build 命令来构建 Docker 镜像。例如:

        docker build -t dockerfiletest:latest .

        这条命令会基于当前目录下的 Dockerfile 构建一个新的镜像,并将这个镜像标记为 dockerfiletest:latest。

        

        查看docker镜像

        docker images

 

四、总结

        Dockerfile 是 Docker 镜像构建的核心,通过它,开发者可以精确地控制镜像的每一层构建过程,从而创建出符合自己需求的 Docker 镜像。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


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

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

相关文章

C++之STL—List 链表

双向链表 链表的组成&#xff1a;链表由一系列**结点**组成 结点的组成&#xff1a;一个是存储数据元素的**数据域**&#xff0c;另一个是存储下一个结点地址的**指针域** STL中的链表是一个双向循环链表 构造函数 List 赋值和交换 容器大小操作 - 判断是否为空 --- empty - …

深度学习实战:UNet模型的训练与测试详解

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 1、云实例&#xff1a;配置选型与启动1.1 登录注册1.2 配置 SSH 密钥对1.3 创建实例1.4 登录云实例 2、云存储&#xff1a;数据集上传…

JavaScript --json格式字符串和对象的转化

json字符串解析成对象 &#xff1a; var obj JSON.parse(str) 对象转化成字符串&#xff1a;var str1 JSON.stringify(obj1) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Com…

第五篇:Linux进程的相关知识总结(1)

目录 第四章&#xff1a;进程 4.1进程管理 4.1.1进程管理需要的学习目标 4.1.1.1了解进程的相关信息 4.1.1.2僵尸进程的概念和处理方法&#xff1a; 4.1.1.3PID、PPID的概念以及特性&#xff1a; 4.1.1.4进程状态 4.1.2进程管理PS 4.1.2.1静态查看进程 4.1.2.1.1自定义…

搭建EMQX MQTT服务器并接入Home Assistant和.NET程序

本文主要介绍如何使用Docker搭建EMQX MQTT服务器&#xff0c;并将其接入到Home Assistant中&#xff0c;最后演示如何使用.NET接入MQTT。 1. 背景 在智能家居系统中&#xff0c;MQTT&#xff08;消息队列遥测传输协议&#xff09;是一种轻量级的消息传输协议&#xff0c;特别适…

《深度学习》—— 神经网络中的数据增强

文章目录 一、为什么要进行数据增强&#xff1f;二、常见的数据增强方法1. 几何变换2. 颜色变换3. 尺寸变换4. 填充5. 噪声添加6. 组合变换 三、代码实现四、注意事项五、总结 一、为什么要进行数据增强&#xff1f; 神经网络中的数据增强是一种通过增加训练数据的多样性和数量…

动态规划11,完全背包模板

NC309 完全背包 问题一&#xff1a;求这个背包至多能装多大价值的物品&#xff1f; 状态表示&#xff1a;经验题目要求 dp[i][j] 表示 从前i个物品中挑选&#xff0c;总体积不超过j&#xff0c;所有选法中&#xff0c;能选出来的最大价值。 状态转移方程 根据最后一步的状态&a…

vue2 搜索高亮关键字

界面&#xff1a; 搜索 “成功” 附上代码&#xff08;开箱即用&#xff09; <template><div class"box"><input class"input-box" v-model"searchKeyword" placeholder"输入搜索关键字" /><div class"r…

【深度】边缘计算神器之数据网关

分布式计算、云边协同、互联互通是边缘计算设备的三项重要特征。 边缘计算设备通过分布式计算模式&#xff0c;将数据处理和分析任务从中心化的云平台下放到设备网关&#xff0c;即更接近数据源的地方&#xff0c;从而显著降低了数据传输的延迟&#xff0c;提高了响应速度和处…

OpenCV normalize() 函数详解及用法示例

OpenCV的normalize函数用于对数组&#xff08;图像&#xff09;进行归一化处理&#xff0c;即将数组中的元素缩放到一个指定的范围或具有一个特定的标准&#xff08;如均值和标准差&#xff09;。它有两个原型函数, 如下: Normalize()规范化数组的范数或值范围。当normTypeNORM…

拾色器的取色的演示

前言 今天&#xff0c;有一个新新的程序员问我&#xff0c;如何确定图片中我们需要选定的颜色范围。一开始&#xff0c;我感到对这个问题很不屑。后来&#xff0c;想了想&#xff0c;还是对她说&#xff0c;你可以参考一下“拾色器”。 后来&#xff0c;我想关于拾色器&#…

C++ std::any升级为SafeAny

std::any测试 #include <any>class A { public:int8_t a; };int main(int argc, char* argv[]) {std::any num((int8_t)42);auto a std::any_cast<A>(num);return 0; }异常&#xff1a; 0x00007FFA9385CD29 处(位于 test.exe 中)有未经处理的异常: Microsoft C 异…

通信工程学习:什么是NFVO网络功能虚拟化编排器

NFVO&#xff1a;网络功能虚拟化编排器 NFVO&#xff08;Network Functions Virtualization Orchestrator&#xff09;&#xff0c;即网络功能虚拟化编排器&#xff0c;是网络功能虚拟化&#xff08;NFV&#xff09;架构中的核心组件之一。NFV是一种将传统电信网络中的网络节点…

Health Check

强大的自愈能力是Kubernetes这类容器编排引擎的一个重要特性&#xff0c;自愈的默认实现方式是自动重启发生故障的容器&#xff0c;除此之外&#xff0c;用户还可以利用Liveness和Readiness探测机制设置更精细的健康检查&#xff0c;进而实现如下需求&#xff1a; 零停机部署避…

c++优先队列priority_queue(自定义比较函数)

c优先队列priority_queue&#xff08;自定义比较函数&#xff09;_c优先队列自定义比较-CSDN博客 373. 查找和最小的 K 对数字 - 力扣&#xff08;LeetCode&#xff09; 官方题解&#xff1a; class Solution { public:vector<vector<int>> kSmallestPairs(vecto…

开源UNI-SOP云统一认证平台

今天给大家分享一款开源的商用级别认证平台UNI-SOP&#xff0c;这块软件分为开源版本和专业版本&#xff0c;由于专业版涉及到一些代码授权问题&#xff0c;暂时未开源&#xff0c;不过&#xff0c;一般应用开源版本足够了。 先来看看系统管理平台界面&#xff0c;然后我们再来…

[OPEN SQL] SELECT语句

本次操作使用的数据库表为SCUSTOM&#xff0c;其字段内容如下所示 航班用户(SCUSTOM) 1.SELECT语句 SELECT语句从数据库表中读取必要的数据 1.1 读取一行数据 语法格式 SELECT SINGLE <cols>... WHERE cols&#xff1a;数据库表的字段 从数据库表中读取一条数据可使…

[数据结构]动态顺序表的实现与应用

文章目录 一、引言二、动态顺序表的基本概念三、动态顺序表的实现1、结构体定义2、初始化3、销毁4、扩容5、缩容5、打印6、增删查改 四、分析动态顺序表1、存储方式2、优点3、缺点 五、总结1、练习题2、源代码 一、引言 想象一下&#xff0c;你有一个箱子&#xff08;静态顺序…

武汉大学首个人形机器人来了!

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 AI圈又发生了哪些新鲜事&#xff1f; 武汉大学展示首个人形机器人“天问”&#xff1a;1.7米高&#xff0c;65公斤重&#xff0c;36个自由度 武汉大学近日展示了其首个人形机器人“天问”&#xff0…

屏幕演示工具 | 水豚鼠标助手 v1.0.7

水豚鼠标助手是一款功能强大的屏幕演示工具&#xff0c;专为Windows 10及以上系统设计。这款软件提供了多种实用功能&#xff0c;旨在增强用户的屏幕演示体验&#xff0c;特别适合教师、讲师和需要进行屏幕演示的用户。鼠标换肤&#xff1a;软件提供多种鼠标光标样式&#xff0…