看完这一篇,就不要再说不了解Dockerfile了

news2024/11/17 1:34:56

首先,让我们来介绍一下对于大多数人来说容易有疑惑的地方

WORKDIR 指定工作目录

什么是工作目录?为什么要指定?

      拿 window 系统的 powershell 控制台来类比。打开 powershell 命令行控制台,显示的是默认目录,如:C:\Users\18154

      刚创建容器的时候,执行的命令也是在默认的目录下执行的,使用 WORKDIR 命令则是切换到我们指定目录。有点类似 cd 命令(但还是有区别)切换到指定目录,后面的命令都是在切换后的目录下执行,即在工作目录下执行。

PS: 执行 WORKDIR 时,如果目录不存在容器会自动创建

VOLUME 持久化

在 Dockerfile 中,VOLUME /data 指的是容器中的目录?

      是的,VOLUME /data 是一个指令,用于在容器中创建一个挂载点(volume),并将其挂载到 /data 目录。PS: 如果目录不存在,容器会自行创建。

Dockerfile 中指定了 volume,在启动容器时,需要 -v 参数吗?

      在 Dockerfile 中使用 VOLUME 指令指定了一个默认的挂载点,则在使用该镜像运行容器时,会自动为这个挂载点创建一个匿名卷。因此,在启动容器时可以不再使用-v参数来显式地指定挂载。

例如,如下 Dockerfile 文件

FROM ubuntu:latestVOLUME /dataCMD ["echo", "Container with data volume"]

那么,在使用该镜像运行容器时,不需要再显式指定挂载点,只需使用docker run命令即可

docker run demoApp

这样,Docker 将会自动为容器创建一个匿名卷,并将其挂载到容器中的/data目录

注意:Dockerfile 中的 VOLUME 指令只是在镜像层面指定了默认的挂载点,而具体的挂载操作是在运行容器时通过命令行选项或 Compose 文件进行配置。如果你希望将挂载点与主机上的目录进行关联,可以在运行容器时使用-v参数来指定具体的主机目录和挂载点,但不是必需的。

Docker volume create my-volume 命令,指向的是主机目录还是容器目录?具体的目录在哪里?

docker volume create 命令创建的 Volume 实际上是一个在主机上的持久性存储卷,并不直接指向主机或容器中的具体目录

使用 docker volume create 命令创建的 Volume 会在 Docker 守护进程所在的主机上创建一个特定的存储目录。这个目录是专门用于存储 Volume 数据的,可以被一个或多个容器使用,通过容器中的挂载点与该存储卷进行关联。

挂载及共享持久化不是很理解,什么意思?

举个栗子,在Linux系统中,插入 U盘一般都是不能立刻查看修改 U盘中的文件的,这个时候需要将 U盘与系统关联(手动挂载)。之后就可以直接操作 U盘中的文件(持久化),电脑坏了或系统崩了也没关系,文件在 U盘,可以使用其他电脑(共享)。也可以联想Window系统插入使用 U盘,只是系统已自动挂载 U盘。当然,类比操作系统与虚拟机(类似Vmware)的共享目录更形象。

ENV 设置环境变量

举个栗子:在启动容器时,重新定义端口

myapp 应用的 Dockerfile 文件

FROM openjdk:11

ENV APP_PORT=8080

EXPOSE $APP_PORT

COPY ./target/myapp.jar /app/myapp.jar

CMD ["java", "-jar", "/app/myapp.jar", "--server.port=${APP_PORT}"]

本例,使用ENV指令设置了APP_PORT环境变量。然后使用EXPOSE指令将容器内的APP_PORT端口暴露出来。最后,使用COPY指令将构建好的Java程序拷贝到镜像中,并使用CMD指令运行Java程序。

在启动容器时,可以重新定义端口

docker run -p 8082:8082 -e APP_PORT=8082 myapp

Dockerfile 的常见指令及详解

- FROM描述: 指定基础镜像 语法 FROM <基础镜像名>[:<标签>]
eg. FROM ubuntu:latest
示例,指定ubuntu最新版本

- MAINTAINER描述:指定镜像维护者信息(已废弃,推荐使用LABEL) 语法 MAINTAINER <作者姓名>
eg. MAINTAINER jike <jike@example.com>
示例,指定镜像维护者名称和电子邮件地址

- LABEL描述:给镜像添加元数据 语法 LABEL maintainer=<作者姓名>
eg. LABEL maintainer="jike <jike@example.com>"
示例,使用LABEL添加镜像维护者的姓名和邮箱

- RUN描述:在镜像中执行命令 语法 RUN <命令>
eg. RUN java -jar xxx.jar
示例,运行一个jar包

- COPY描述:将文件从主机复制到镜像中 语法 COPY <源路径> <目标路径>
eg. COPY ./src/demoFile /app/demoFile
示例,将主机中的 src/demoFile 复制到镜像中 /app/demoFile

- ADD描述:类似 COPY, 但可以自动解压压缩文件和获取远程文件 语法 ADD <源路径> <目标路径>
eg. ADD https://example.com/file.tar.gz /app/data/
示例,从指定url下载tar.gz 文件并解压到镜像中 /app/data/目录

- WORKDIR描述:设置工作目录 语法 WORKDIR <工作目录路径>
eg. WORKDIR /app/data
示例,将工作目录设置为 /app/data

- ENV描述:设置环境变量 语法 ENV <变量名>=<值> <变量名2>=<值2>
eg1. ENV PORT=18089
eg2. ENV USERNAME=san
     ENV PORT=18088
eg3. ENV USERNAME=shi \
         PORT=18087 \
         YEAR=2023
示例1,将 PORT 环境变量设置为 18089
示例2,设置多个环境变量,使用多个ENV,每行设置一个环境变量
示例3,设置多个环境变量,使用一个ENV,一行设置多个环境变量

- EXPOSE描述:声明容器运行时需要监听的端口 语法 EXPOSE <端口> EXPOSE <端口1> [<端口2>...]
eg. EXPOSE 8081 8082 
示例,声明容器监听8081,8082两个端口

- CMD描述:指定容器启动时要执行的命令 语法 CMD <命令>
eg. CMD ["java", "-jar", "app.jar"]
示例,容器启动后会执行 java -jar app.jar 命令

-  ENTRYPOINT描述:与 CMD 类似,但不会被 docker run 命令后的参数覆盖
eg. ENTRYPOINT ["java", "-jar", "app.jar"]
示例,容器启动后会执行 java -jar app.jar 命令,并且无法被 docker run 命令后的参数覆盖

- VOLUME指令:
定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。这样做可以避免重要的数据,因容器重启而丢失,这是非常致命的。也能避免容器不断变大。
在启动容器 docker run 的时候,我们可以通过 -v 参数修改挂载点。
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>

各位读者有不同的见解请留言。

关注我的公众号(追寻9)了解更多开发相关知识!!!

docker官网指南:
https://docs.docker.com/engine/reference/builder/

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

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

相关文章

Java基本概述

1、Java语言的特点 特点一&#xff1a;面向对象 两个基本概念&#xff1a;类、对象三大特性&#xff1a;封装、继承、多态 特点二&#xff1a;健壮性 去掉了C/C中影响程序健壮性的部分&#xff08;指针、内存的申请与释放等&#xff09;&#xff0c;有一个相对安全的内存管…

3-测试用例(CASE)

目录 1.什么是测试用例&#xff1f; 2.为什么要有测试用例&#xff1f; 3.练习 1.什么是测试用例&#xff1f; 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合。 这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结…

办公技巧:43个Excel函数,进阶必备,值得收藏

目录 一、关联匹配类 二、清洗处理类 三、逻辑运算类 四、计算统计类 五、时间序列类 今天给大家分享43个Excel函数&#xff0c;希望对大家能有所帮助&#xff01; 一、关联匹配类 经常性的&#xff0c;需要的数据不在同一个Excel表或同一个Excel表不同sheet中&#xff0c…

初阶编程题积累(3)——最接近的三数之和(题目描述、示例、题目思路、题解、解析)

目录 题目描述 示例 题目思路 题解 解析 题目描述 给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数&#xff0c;使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 示例 1&#xff1a; 输入&…

Vue生态及实践 - 配置中心

目录 目标 配置中心 config/config.js 皮肤/国际化 config/theme.js config/language.js app.js App.vue 权限管理 src/views/about.vue src/views/403.vue config/permission.js src/router.js src/store.js 献上一张通过ai生成的图片~ 目标 配置中心皮肤/国际…

编译SecureValueRecovery项目

准备 下载 git clone https://codeup.aliyun.com/6306306f95064d67d44656e5/lxr1907/SecureValueRecovery.git 进入目录 cd SecureValueRecovery编译enclave make -C ./enclave等待很长时间下载各种镜像后 报错&#xff1a; Fatal error: cant create build/kbupd_enclave_t.o:…

Dubbo详解,用心看这一篇文章就够了【重点】

1.1 Dubbo概述 Dubbo是阿里巴巴开源的基于 Java 的高性能RPC&#xff08;一种远程调用&#xff09; 分布式服务框架&#xff0c;致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案。 每天为2千多个服务提供大于30亿次访问量支持&#xff0c;并被…

DataFun:数据基础架构

翼支付 数据向量化 经营范围是否相同 背景特征提取器 质量过滤通用背景过滤预制场景标记 虚假地址风险分析 CCKS地址解析标签体系 FaissMilvus余弦相似度 Zilliz 大模型幻觉问题 极限科技

数据结构与算法_堆排序

堆排序&#xff0c;即利用堆的思想来进行排序。要实现堆排序&#xff0c;首先要建堆&#xff0c;建堆又分为建大堆和建小堆&#xff1b;然后再一步一步地删除堆的元素来进行排序。 目录 一、堆排序的时间复杂度 二、建堆 向上调整 向下调整 三、堆排序 四、代码实现 向…

ROS-Moveit和Gazebo联合仿真(二)

文章目录 URDF功能包配置configlaunchCMakeLists.txtpackage.xmlurdf文件 Moveit功能包配置configlaunch 运行 URDF功能包配置 config 首先在SW2URDF生成的功能包下Config目录下新建文件joint_trajectory_controller.yaml robot_arm_controller:type: "position_contro…

51单片机--利用独立按键控制LED

文章目录 独立按键的原理独立按键控制LED灯的状态按键抖动控制LED灯的状态 独立按键控制二进制独立按键控制移位 独立按键的原理 独立按键是一种基本的电子元件&#xff0c;它通常由一个按钮和两个引脚组成。在单片机中&#xff0c;我们可以将按键的一个引脚连接到某个IO口&…

基于单片机智能台灯坐姿矫正器视力保护器的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;LCD1602液晶显示当前当前光线强度、台灯灯光强度、当前时间、坐姿距离等&#xff1b;按键设置当前时间&#xff0c;闹钟、提醒时间、坐姿最小距离&#xff1b;通过超声波检测坐姿&#xff0c;当坐姿不正容易对眼睛和身体腰部等造成…

《MySQL》表的约束

文章目录 空属性null 和 默认值列描述zerofill主键和auto_increment唯一键外键 空属性null 和 默认值 空属性null是MySQL里面特有表示空信息的一个属性。 空属性比较的方法&#xff1a;<> &#xff0c;is not/is null&#xff0c;真返回1&#xff0c;否则返回零 一个字段…

大模型高效训练基础知识:梯度检查点(Gradient Checkpointing)

prerequiste: 大模型训练基础知识&#xff1a;梯度累积&#xff08;Gradient Accumulationn&#xff09; 梯度检查点&#xff08;Gradient Checkpointing&#xff09; 如今&#xff08;2023年&#xff09;大模型的参数量巨大&#xff0c;即使将batch_size设置为1并使用梯度累积…

【点云配准】刚性物体的鲁棒姿态估计

目录 什么是刚性物体的鲁棒姿态估计&#xff1f; 刚性物体的姿态估计时可能会遇到的问题及解决方法&#xff1a; 采样一致性&#xff08;SAC&#xff09;算法的原理 预配准采样一致性&#xff08;Prerejective Sample Consensus, PRSAC&#xff09;算法的原理 SAC算法与PRS…

Java用for循环打印三角形菱形

目录 一、打印矩形 二、打印直角三角形 1.直角三角形 2.打印九九乘法表 三、打印等腰三角形 四、打印平行四边形 五、打印菱形 六、打印两个直角三角形 1.打印两个直角三角形 2.打印倒着的两个直角三角形 七、打印“蝴蝶” 一、打印矩形 //打印矩形for (int i 0; i < a;…

[USACO23FEB] Equal Sum Subarrays G

题目描述 FJ gave Bessie an array aa of length N ( 2 ≤ N ≤ 500 , − 1 0 15 ≤ a i ≤ 1 0 15 ) N(2≤N≤500,−10^{15}≤ai≤10^{15}) N(2≤N≤500,−1015≤ai≤1015) with all N ( N 1 ) 2 \frac{N(N1)}2 2N(N1)​​ contiguous subarray sums distinct. For each i…

【随手记】使用Flask做代理为虚拟机提供pip源

最近在重做虚拟机环境&#xff0c;虚拟机不可连外网&#xff0c;最初python包都是通过离线whl进行安装。但是离线文件已经找不到了&#xff0c;不想重新去一个个下载&#xff0c;而且本地环境跟虚拟机环境也不一致&#xff0c;pip download可能会遇到版本问题&#xff0c;遂考虑…

【SQL】群辉 NAS 安装 Mysql 远程访问连接

群辉安装MySQL具有高效、安全、可靠、灵活等优势&#xff0c;可以为用户提供一个优秀的数据管理和分析环境。同时具有良好的硬件性能和稳定性&#xff0c;可以保障MySQL数据库的高效运行和数据安全. cpolar 是一款内网穿透工具,通过简单的设置,我们即可实现远程访问群辉中mysq…

地下饮用水除硝酸盐技术、生活用水提质增效

项目名称 北京某地下水除硝酸盐项目&#xff0c;出水未检出 工艺选择 两处水源&#xff0c;运行方式为一用一备 工艺原理 树脂官能团耐受硫酸盐、氯离子的干扰&#xff0c;实现选择性吸附硝酸根 项目背景 近年来由于农业活动及排污物的影响&#xff0c;部分地表…