Dockerfile: WORKDIR vs VOLUME
WORKDIR
WORKDIR指令为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。
如果WORKDIR不存在,它将被创建,即使它没有在任何后续Dockerfile指令中使用。
语法 :
WORKDIR dirpath
WORKDIR指令可以在Dockerfile中多次使用。如果提供了一个相对路径,它将相对于前一个WORKDIR指令的路径。例如:
# 这个Dockerfile中最后一个pwd命令的输出将是/a/b/c。
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
WORKDIR指令可以解析之前使用ENV设置的环境变量。只能使用在Dockerfile中显式设置的环境变量。例如:
# 这个Dockerfile中最后一个pwd命令的输出是/path/$DIRNAME
ENV DIRPATH=/path
WORKDIR $DIRPATH/$DIRNAME
RUN pwd
VOLUME
用于在image中创建一个挂载目录,以挂载宿主机上的目录
语法:
VOLUME <path>
VOLUME ["path"]
解释:
path:代表容器中的目录,与docker run 不同,Dockerfile中不能指定宿主机目录,默认使用docker管理的挂载点
示例:
VOLUME ["/var/log/“]
VOLUME /myvol
案例
在实验dockerfile中的VOLUME 参数之前。
1) 我们先使用docker run -v 来指定一把看看
# 下面的命令是将宿主机上面的/home/data 目录挂载到了容器中/data 目录,无论在容器里面还是物理机中修改对应目录下面的内容,都会同步
[root@docker01 ~]# docker run --name test -it -v /home/data:/data centos /bin/sh
# 容器中加入一个文件
sh-4.4# cd /data/
sh-4.4# ls
sh-4.4# pwd
/data
sh-4.4# echo "hello" > 1.txt
sh-4.4# cat 1.txt
hello
# 物理机中查看一下
[root@docker01 dockerfiledaemon]# cat /home/data/1.txt
hello
# 查看一下容器的详情
[root@docker01 dockerfiledaemon]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c11c574a6e7 centos "/bin/sh" 3 minutes ago Up 3 minutes test
[root@docker01 dockerfiledaemon]# docker inspect 8c11c574a6e7
"Mounts": [
{
"Type": "bind",
"Source": "/home/data",
"Destination": "/data",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
2) 使用 docker run -v 参数,但不指定物理机的目录
# 启动一个docker 实例
[root@docker01 ~]# docker run --name test -it --rm -v /data centos /bin/sh
# 查看容器运行情况
[root@docker01 dockerfiledaemon]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d42f7d885c87 centos "/bin/sh" 6 seconds ago Up 4 seconds test
# 从下面可以看到,source 的路径是自动分配的一个目录
[root@docker01 dockerfiledaemon]# docker inspect d42f7d885c87
"Mounts": [
{
"Type": "volume",
"Name": "fa853d8d48b38edf36af1064854f5d85102c577dc2581184b979479be21495ed",
"Source": "/var/lib/docker/volumes/fa853d8d48b38edf36af1064854f5d85102c577dc2581184b979479be21495ed/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
3) 使用dockerfile中挂载点进行
通过docker run命令的-v标识创建的挂载点只能对创建的容器有效。
通过dockerfile的 VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点。但在dockerfile中无法指定主机上对应的目录,是自动生成的。
# 新建一个dockerfile
FROM centos
VOLUME ["/data1","/data2"]
# 构建镜像
[root@docker01 dockerfiledaemon]# docker build -t volume:01 .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM centos
---> 300e315adb2f
Step 2/2 : VOLUME ["/data1","/data2"]
---> Running in 2ac39c2c1918
Removing intermediate container 2ac39c2c1918
---> 65ce3fb0ff1a
Successfully built 65ce3fb0ff1a
Successfully tagged volume:01
[root@docker01 dockerfiledaemon]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
volume 01 65ce3fb0ff1a 14 seconds ago 209MB
# 创建一个容器
[root@docker01 dockerfiledaemon]# docker run -it --name volumename volume:01 /bin/sh
sh-4.4#
# 查看容器id
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
071fdcf0a2eb volume:01 "/bin/sh" 26 seconds ago Up 24 seconds volumename
# 查看挂载点,会发现一共有两个自动挂载的目录
[root@docker01 ~]# docker inspect 071fdcf0a2eb
"Mounts": [
{
"Type": "volume",
"Name": "479d38b89f7eb8cbf52fa4b50f1e7c0caf358707bca418a46dcc330b43983817",
"Source": "/var/lib/docker/volumes/479d38b89f7eb8cbf52fa4b50f1e7c0caf358707bca418a46dcc330b43983817/_data",
"Destination": "/data2",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "926f1a3c58d1574433b0488b1f8b0a88011e1143925621729c6ba5b8fd2b5150",
"Source": "/var/lib/docker/volumes/926f1a3c58d1574433b0488b1f8b0a88011e1143925621729c6ba5b8fd2b5150/_data",
"Destination": "/data1",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
相关文章:
Dockerfile: WORKDIR vs VOLUME
WORKDIR WORKDIR指令为Dockerfile中的任何RUN、CMD、ENTRYPOINT、COPY和ADD指令设置工作目录。 如果WORKDIR不存在,它将被创建,即使它没有在任何后续Dockerfile指令中使用。 语法 : WORKDIR dirpath WORKDIR指令可以在Dockerfile中多次使用。如果提供了…...
spring ioc源码-refresh();
主要作用是刷新应用上下文 Override public void refresh() throws BeansException, IllegalStateException {synchronized (this.startupShutdownMonitor) {// 启动刷新的性能跟踪步骤StartupStep contextRefresh this.applicationStartup.start("spring.context.refre…...
使用递归实现深拷贝
文章目录 为什么要使用递归什么深拷贝具体实现基础实现处理 函数处理 Symbol处理 Set处理 Map处理 循环引用 结语-源码 为什么要使用递归什么深拷贝 我们知道在 JavaScript 中可以通过使用JSON序列化来完成深拷贝,但是这种方法存在一些缺陷,比如对于函数…...
工程(十七)——自己数据集跑R2live
博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。 r2live是比较早的算法,编译过程有很多问题,通过以下两个博客可以解决 编译R2LIVE问题&解决方法-CSDN博客 r2live process has died 问题解决了_required process …...
【python高级用法】迭代器、生成器、装饰器、闭包
迭代器 可迭代对象:可以使用for循环来遍历的,可以使用isinstance()来测试。 迭代器:同时实现了__iter__()方法和__next__()方法,可以使用isinstance()方法来测试是否是迭代器对象 from collections.abc import Iterable, Iterat…...
Nx市工业数据洞察:Flask、MySQL、Echarts的可视化之旅
Nx市工业数据洞察:Flask、MySQL、Echarts的可视化之旅 背景数据集来源技术选型功能介绍创新点总结 背景 随着工业化的不断发展,Nx市工业数据的收集和分析变得愈发重要。本博客将介绍如何利用Flask、MySQL和Echarts等技术,从统计局获取的数据…...
关于正态分布
目录 1.正态分布是什么2.正态分布有什么用途3.如何确定数据服从正态分布 本文简单介绍正态分布的基本概念和用途。 1.正态分布是什么 正态分布,也称为高斯分布,是由德国数学家卡尔弗里德里希高斯在研究测量误差时提出的。他发现许多自然现象和统计数据…...
每日一练(编程题-C/C++)
目录 CSDN每日一练1. 2023/2/27- 一维数组的最大子数组和(类型:数组 难度:中等)2. 2023/4/7 - 小艺照镜子(类型:字符串 难度:困难)3. 2023/4/14 - 最近的回文数(难度:中等)4. 2023/2/1-蛇形矩阵(难度:困难)…...
Unity UnityWebRequest 在Mac上使用报CommectionError
今天是想把前两天写的Demo拿到Mac上打个IPA的完事我发现 在运行时释放游戏资源的时候UnityWebRequest返回的结果不是Success 查看Log发现是 req.result 是CommectionError error是 Cannot connect to destination host 代码如下: UnityWebRequest req UnityWebRequ…...
WorkPlus为企业打造私有化部署IM解决方案
在移动数字化时代,企业面临着如何全面掌控业务和生态的挑战。企业微信、钉钉、飞书、Teams等应用虽然提供了部分解决方案,但无法满足企业的私有化部署需求。此时,WorkPlus作为安全专属的移动数字化平台,被誉为移动应用的“航空母舰…...
QT上位机开发(抽奖软件)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 用抽奖软件抽奖,是一种很常见的抽奖方式。特别是写这篇文章的时候,正好处于2023年12月31日,也是一年中最后一天…...
雨课堂作业整理
第一次作业 1.下列序列是图序列的是( ) A.1,2,2,3,4,4,5 B.1,1,2,2,4,6,6 C.0,0,2&am…...
C#/WPF 只允许一个实例程序运行并将已运行程序置顶
使用用互斥量(System.Threading.Mutex): 同步基元,它只向一个线程授予对共享资源的独占访问权。在程序启动时候,请求一个互斥体,如果能获取对指定互斥的访问权,就职运行一个实例。 实例代码: /// <…...
【基础】【Python网络爬虫】【1.认识爬虫】什么是爬虫,爬虫分类,爬虫可以做什么
Python网络爬虫基础 认识爬虫1.什么是爬虫2.爬虫可以做什么3.为什么用 Ptyhon 爬虫4.爬虫的分类通用爬虫聚焦爬虫功能爬虫增量式爬虫分布式爬虫 5.爬虫的矛与盾(重点)6.盗亦有道的君子协议robots7.爬虫合法性探究 认识爬虫 1.什么是爬虫 网络爬虫&…...
【算法与数据结构】860、LeetCode柠檬水找零
文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:本题的思路比较简单,首先要保存收到的零钱,其次计算找零,最后分解找…...
「Verilog学习笔记」乘法与位运算
专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 观察乘数的特点: 1111_1011 1_0000_0000 - 1 - 100 timescale 1ns/1nsmodule dajiang13(input [7:0] A,output [15:0] B);//*************code*********…...
CSS与JavaScript的简单认识
CSS:是一门语言,用于控制网页表现,让页面更好看的。 CSS(Cascading Style Sheet):层叠样式表 CSS与html结合的三种方式: 1、内部样式:用style标签,在标签内部定义CSS样式…...
MAC 中多显示器的设置(Parallels Desktop)
目录 一、硬件列表: 二、线路连接: 三、软件设置: 1. 设置显示器排列位置及显示参数 2. 分别设置外接显示器为:扩展显示器,内建显示器为主显示器 3. 设置Parallels Desktop屏幕参数 四、结果 一、硬件列表&a…...
迁移到云原生:如何使用微服务迁移应用程序
企业遇到大规模部署和监督生产中的应用程序的任务。幸运的是,我们可以使用大量技术和工具。然而,从传统的,整体的结构转变为云态一个人提出了自己的障碍。在这里,您会发现将应用程序从整体设置转移到基于微服务的体系结构时要进行…...
kafka 的零拷贝原理
文章目录 kafka 的零拷贝原理 今天来跟大家聊聊kafka的零拷贝原理是什么? kafka 的零拷贝原理 零拷贝是一种减少数据拷贝的机制,能够有效提升数据的效率; 在实际应用中,如果我们需要把磁盘中的某个文件内容发送到远程服务器上…...
从‘坍缩’到‘对齐’:用SimCSE解决BERT句子向量老难题,我的中文业务实验复盘
从语义坍缩到精准对齐:SimCSE在中文业务场景的实战指南 BERT模型在自然语言处理领域取得了巨大成功,但其原生句子向量存在一个令人头疼的问题——语义坍缩。简单来说,就是不同句子的向量在高维空间中倾向于聚集在一起,导致相似度计…...
基于FastAPI与Cytoscape.js构建个人技能图谱可视化平台
1. 项目概述:一个技能图谱的聚合与沉淀平台最近在整理自己的技术栈和项目经验时,我常常感到一种“知识碎片化”的困扰。学过的框架、用过的工具、解决过的特定问题,都散落在不同的笔记、代码仓库和记忆角落里。当需要快速构建一个原型&#x…...
Factool开源框架:构建可信AI的事实核查自动化流水线
1. 项目概述:从“事实核查”到“可信AI”的基石工具在信息爆炸的时代,我们每天都被海量的文本内容包围——新闻稿、分析报告、产品介绍、学术论文,甚至是AI模型自己生成的回答。一个核心的挑战随之而来:如何快速、准确地判断一段文…...
数据库完整性约束与安全机制全解析
一、数据库完整性约束1、数据库完整性基本概念与核心机制(1)完整性定义与作用数据库完整性(Database Integrity)是指在任何情况下保证数据的正确性(Validity)和一致性(Consistency)&…...
2026中小企业OA软件排行榜TOP10(精简版)
2026年,中小企业数字化转型进入深水区,OA软件作为办公协同核心工具,是企业提升效率、规范流程、降本增效的关键支撑。随着SaaS模式普及、AI技术深度应用及信创政策落地,OA市场呈现“头部生态下沉、专业工具崛起、性价比为王”的格…...
FreeVA:零训练成本,用图像大模型实现视频理解的新范式
1. 项目概述:一个无需训练的“零成本”视频助手 最近在折腾多模态大模型(MLLM)的时候,我发现了一个挺有意思的现象:大家一提到让模型理解视频,第一反应就是得搞“视频指令微调”。简单说,就是拿…...
【CPO三维路径规划】豪猪算法CPO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
基于Ollama与Stable Diffusion的Discord AI机器人本地部署指南
1. 项目概述:一个能聊能画的Discord AI机器人 最近在折腾一个挺有意思的玩意儿:一个部署在自己电脑上的Discord机器人,它不仅能像ChatGPT一样跟你聊天,还能根据你的描述生成图片。这个项目的核心,是把两个当下很火的开…...
Python爬虫实战:构建智能职位信息聚合工具JobClaw
1. 项目概述:一个面向开发者的智能职位信息聚合与解析工具最近在帮团队招聘和看机会的朋友聊天,发现一个挺普遍的问题:大家找技术岗位,要么在几个主流招聘App上反复刷,信息分散且格式不一;要么就是盯着几个…...
2.2 本地文件读取
本章学习目标: 知道CSV、Excel、JSON三种文件分别怎么读、会遇到什么常见问题理解每种文件格式的“坑”在哪里,以及如何向AI描述解决方案学会用“人话”告诉AI你要做什么,让AI生成代码不需要记住任何函数名或参数,只需要知道“有什…...
