【Docker基础】Dockerfile指令速览:文件与目录操作指令详解

目录

引言

1 ADD:高级文件复制与解压

1.1 指令简介

1.2 语法

1.3 功能详解

1.4 使用场景

1.5 执行流程

1.6 示例

1.7 注意事项

2 WORKDIR:设置工作目录

2.1 指令简介

2.2 语法

2.3 使用场景

2.4 创建流程

2.5 示例

2.6 注意事项

3 VOLUME:管理数据卷

3.1 指令简介

3.2 语法

3.3 使用场景

3.4 挂载流程

3.5 示例

3.6 注意事项

4 总结


引言

在构建Docker镜像的过程中,文件与目录的操作是至关重要的环节,合理地使用这些指令可以有效地管理镜像中的文件结构、设置工作目录以及管理数据卷。本文将探讨Dockerfile中用于文件与目录操作的三个关键指令:
  • ADD
  • WORKDIR
  • VOLUME

1 ADD:高级文件复制与解压

1.1 指令简介

ADD指令用于将文件、目录或远程文件复制到镜像中,与COPY指令相比,ADD提供了额外的功能,如自动解压本地压缩文件和从远程URL获取文件。

1.2 语法

ADD <src>... <dest> ADD ["<src>",... "<dest>"]
  • :源路径,可以是本地文件、目录或远程URL
  • :目标路径,在镜像中的绝对路径或相对于WORKDIR的路径

1.3 功能详解

  • 复制本地文件/目录:将本地文件或目录复制到镜像中
  • 自动解压压缩文件:如果是本地压缩文件(如tar, gzip, bzip2等),ADD会自动解压到
  • 从远程URL获取文件:可以从指定的URL下载文件并复制到镜像中

1.4 使用场景

  • 复制并解压应用代码:将压缩的应用代码复制到镜像中并自动解压
  • 下载外部资源:从互联网下载必要的资源文件

1.5 执行流程

  • 使用ADD指令:在Dockerfile中使用ADD指令进行文件操作
  • 源类型?:判断源的类型是本地文件/目录、压缩文件还是远程URL
  • 复制到镜像:如果是本地文件或目录,直接复制到镜像中
  • 复制并解压:如果是压缩文件,复制并自动解压到目标路径
  • 下载并复制:如果是远程URL,下载文件并复制到镜像中
  • 指定目标路径:指定文件在镜像中的目标路径
  • 应用在容器中使用文件:应用在容器中读取和使用复制的文件

1.6 示例

ADD app.tar.gz /app 
ADD https://example.com/file.zip /app/

1.7 注意事项

  • 自动解压:如果不需要自动解压功能,建议使用COPY指令
  • 远程URL:从远程URL获取文件时,Docker会下载文件并将其存储在镜像中,这可能会增加镜像体积

2 WORKDIR:设置工作目录

2.1 指令简介

WORKDIR指令用于设置工作目录,如果指定的目录不存在,WORKDIR会创建该目录,后续的指令(如RUN, CMD, ENTRYPOINT, COPY, ADD等)都会相对于这个工作目录执行。

2.2 语法

WORKDIR /workdir/path

2.3 使用场景

  • 设置应用的工作目录:为应用指定一个固定的工作目录,方便后续操作
  • 组织Dockerfile结构:通过设置不同的工作目录,组织Dockerfile中的指令,提高可读性

2.4 创建流程

  • 设置工作目录:使用WORKDIR指令设置工作目录
  • 目录是否存在?:判断指定的目录是否已经存在
  • 切换到该目录:如果目录存在,切换到该目录
  • 创建并切换到该目录:如果目录不存在,创建该目录并切换到该目录
  • 后续指令基于该目录执行:所有后续指令都会相对于这个工作目录执行

2.5 示例

WORKDIR /app
RUN pwd
# 输出: /appWORKDIR /app/data
RUN pwd
# 输出: /app/data

2.6 注意事项

  • 相对路径:如果WORKDIR使用的是相对路径,它会相对于前一个WORKDIR指令的路径
  • 影响后续指令:所有后续的RUN, CMD, ENTRYPOINT, COPY, ADD等指令都会基于WORKDIR执行

3 VOLUME:管理数据卷

3.1 指令简介

VOLUME指令用于创建挂载点,用于持久化数据或共享数据,数据卷可以用于在容器之间共享数据,或者将数据持久化到主机文件系统。

3.2 语法

VOLUME ["/data"] VOLUME /data1 /data2

3.3 使用场景

  • 数据持久化:将容器内的数据持久化到主机文件系统,防止数据丢失
  • 数据共享:在多个容器之间共享数据
  • 分离数据与容器:将数据与容器分离,方便数据管理和备份

3.4 挂载流程

  • 声明数据卷:使用VOLUME指令声明数据卷
  • 挂载类型?:判断是匿名挂载还是命名挂载
  • 匿名挂载:如果使用匿名挂载,Docker会自动管理数据卷
  • 命名挂载:如果使用命名挂载,用户可以指定数据卷的名称
  • 在docker run中挂载主机目录:在docker run命令中使用-v或--mount参数挂载主机目录
  • 应用在容器中使用数据卷:应用在容器中读取和使用数据卷中的数据

3.5 示例

VOLUME /app/data

3.6 注意事项

  • 数据卷生命周期:数据卷的生命周期独立于容器,删除容器时数据卷不会被删除,除非使用docker volume rm命令
  • 性能考虑:数据卷的性能可能会受到主机文件系统的影响,特别是在使用网络文件系统时

4 总结

ADD、WORKDIR和VOLUME是Dockerfile中用于文件与目录操作的关键指令,掌握这些指令的使用方法和最佳实践,可以帮助我们构建更加高效、可维护和安全的Docker镜像。通过合理的指令组合和优化,可以显著提升镜像的构建效率和运行性能。

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

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

相关文章

Python 程序设计讲义(2):Python 概述

Python 程序设计讲义&#xff08;2&#xff09;&#xff1a;Python 概述 一、Python 语言的发展史 Python 语言诞生于 1990 年。 2002 年 10 月&#xff0c;Python2.0 正式发布。 2008 年 12 月&#xff0c;Python3.0 正式发布。 Python3.0 在语法层面和解释器内部做了很多重大…

多租户SaaS系统中设计安全便捷的跨租户流程共享

四维协同架构​​,结合动态授权、加密传输、行为审计和智能策略 一、​​权限控制体系​​ 1. ​​动态权限模型​ ​ 2. ​​授权策略实现​​ ​​RBAC+ABAC混合模型​​ 在流程表增加shared_tenants字段存储授权信息,结合属性动态校验: CREATE TABLE workflow_process…

Spring Ioc Bean 到底是什么

Bean 到底是什么&#xff1f; 简单来说&#xff0c;Spring Bean 就是一个由 Spring IoC 容器负责创建、管理和装配的 Java 对象。 它不是一种新的技术&#xff0c;它本质上还是一个普普通通的 Java 对象&#xff08;POJO - Plain Old Java Object&#xff09;&#xff0c;但它的…

【PCIe 总线及设备入门学习专栏 5.1.1 -- PCIe PERST# 信号的作用】

文章目录 PCIe PERSTN#PERST# 信号作用概述简要定义PERST# 的关键功能PERST# 的时序图示意Synopsys PCIe EP IP 中 PERST# 的作用关键信号接口典型复位流程示例代码(Verilog for Synopsys PCIe)PERST# 使用场景举例(Synopsys PCIe EP)1. 系统上电初始化2. 热复位特定设备3.…

使用python的pillow模块将图片转化为灰度图,获取值和修改值

使用python的pillow模块可以将图片转化为灰度图&#xff0c; 可以获取灰度图的特定点值&#xff0c;区域值&#xff0c; 修改值并保存到图片 图片转换为灰度图 from PIL import Image# 打开图片 image Image.open("d://python//2//1.jpg")gray_image image.convert…

记忆力训练day41

通常是一个地点记2组词 数字和人体记忆宫殿更注重 即时性&#xff1b;地点记忆宫殿是长久性

自动微分模块

一.前言本章节我们是要学习梯队计算&#xff0c;⾃动微分&#xff08;Autograd&#xff09;模块对张量做了进⼀步的封装&#xff0c;具有⾃动求导功能。⾃动微分模块是构成神经⽹络 训练的必要模块&#xff0c;在神经⽹络的反向传播过程中&#xff0c;Autograd 模块基于正向计算…

深度学习·目标检测和语义分割基础

边缘框 不是标准的x&#xff0c;y坐标轴。边缘框三种表示&#xff1a;左上右下下坐标&#xff0c;左上坐标长宽&#xff0c;中心坐标长宽 COCO 目标检测数据集的格式&#xff1a;注意一个图片有多个物体&#xff0c;使用csv或者文件夹结构的格式不可取。 锚框算法 生成很多…

ffmpeg音视频处理大纲

FFmpeg 是一个功能强大的开源音视频处理工具集&#xff0c;其核心代码以 C 语言实现。下面从源码角度分析 FFmpeg 如何实现转码、压缩、提取、截取、拼接、合并和录屏等功能&#xff1a; 一、FFmpeg 核心架构与数据结构 FFmpeg 的源码结构围绕以下核心组件展开&#xff1a; lib…

网络安全小练习

一、docker搭建 1.安装 2.改变镜像源&#xff08;推荐国内镜像源&#xff1a;阿里云镜像源&#xff09; 登录阿里云容器镜像源服务&#xff08; 阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台 &#xff09; 复制系统分配的专属地址 配置 sudo mkdir …

数据结构——顺序表的相关操作

一、顺序表基础认知​1.顺序表的定义与特点​顺序表是数据结构中一种线性存储结构&#xff0c;它将数据元素按照逻辑顺序依次存储在一片连续的物理内存空间中。简单来说&#xff0c;就是用一段地址连续的存储单元依次存放线性表的元素&#xff0c;且元素之间的逻辑关系通过物理…

2025最新国产用例管理工具评测:Gitee Test、禅道、蓝凌测试、TestOps 哪家更懂研发协同?

在快节奏的 DevOps 时代&#xff0c;测试用例管理已不再是 QA 的独角戏&#xff0c;而是穿透需求—开发—测试—交付全流程的核心枢纽。想象一下&#xff0c;如果用例结构混乱&#xff0c;覆盖不全&#xff0c;甚至丢失版本变更历史&#xff0c;不仅协作乱&#xff0c;还影响交…

在线评测系统开发交流

https://space.bilibili.com/700332132?spm_id_from333.788.0.0 实验内容爬虫Web系统设计数据分析实验指导爬虫Web系统设计自然语言处理与信息检索数据可视化评分标准FAQ实验二&#xff1a;在线评测系统实验概述实验内容Step1&#xff1a;题目管理Step2&#xff1a;题目评测S…

Linux操作系统从入门到实战(十)Linux开发工具(下)make/Makefile的推导过程与扩展语法

Linux操作系统从入门到实战&#xff08;十&#xff09;Linux开发工具&#xff08;下&#xff09;make/Makefile的推导过程与扩展语法前言一、 make/Makefile的推导过程1. 先看一个完整的Makefile示例2. make的工作流程&#xff08;1&#xff09;寻找Makefile文件&#xff08;2&…

NFS磁盘共享

步骤&#xff1a;注意事项‌&#xff1a;确保服务端防火墙关闭&#xff0c;或者允许2049端口通信&#xff0c;客户端需具备读写权限。服务器端安装NFS服务器&#xff1a;sudo apt-get install nfs-kernel-server # Debian/Ubuntu sudo yum install nfs-utils # Ce…

ORA-06413: 连接未打开

System.Data.OracleClient.OracleException:ORA-06413: 连接未打开 oracle 报错 ORA-06413: 连接未打开 db.Open();的报错链接未打开&#xff0c;System.Data.OracleClient.OracleException HResult0x80131938 MessageORA-06413: 连接未打开 关于ORA-06413错误&#xff08;…

【PCIe 总线及设备入门学习专栏 5.1.2 -- PCIe EP core_rst_n 与 app_rst_n】

文章目录 app_rst_n 和 core_rst_n 的作用1. core_rst_n — PCIe 控制器内部逻辑复位作用控制方式2. app_rst_n — 应用层/用户逻辑复位作用特点两者关系图示:示例流程(Synopsys EP)rst_sync[3] 的作用详解(复位同步逻辑)为什么使用 rst_sync[3]?图示说明Synopsys 官方手…

Python初学者笔记第二十期 -- (文件IO)

第29节课 文件IO 在编程中&#xff0c;文件 I/O&#xff08;输入/输出&#xff09;允许程序与外部文件进行数据交互。Python 提供了丰富且易用的文件 I/O 操作方法&#xff0c;能让开发者轻松实现文件的读取、写入和修改等操作。 IO交互方向 从硬盘文件 -> 读取数据 -> 内…

Java JUC包概述

Java 的 java.util.concurrent&#xff08;简称 JUC&#xff09;包是 JDK 5 及以后引入的并发编程工具包&#xff0c;旨在解决传统线程模型&#xff08;如 synchronized、wait/notify&#xff09;的局限性&#xff0c;提供更灵活、高效、可扩展的并发编程组件。它极大简化了多线…

LeetCode--44.通配符匹配

前言&#xff1a;不知不觉又断更一天了&#xff0c;其实昨天就把这道题写得差不多了&#xff0c;只是刚好在力扣里面看见了一种新的解法&#xff0c;本来想写出来的&#xff0c;但是我把它推到今天了&#xff0c;因为太晚了&#xff0c;但是今天又睡懒觉了&#xff0c;所以我直…