Dockerfile通过一系列的命令和参数,构建自定义镜像。一般步骤如下:

在这里插入图片描述

一. 常用命令说明

基础命令具体命令描述例子
FROMFROM[基础镜像:版本号]基于指定的基础镜像构建自定义镜像FROM eclipse-temurin:17-jdk-alpine
RUNRUN构建容器需要运行的命令,在执行 docker build的时候运行 ,支持shell 和 exec两种格式
CMD**shell格式:**CMD <shell 命令>
**EXEC格式:**CMD ["<可执行文件或命令>","<param1>","<param2>",...]
参数格式: CMD ["<param1>","<param2>",...] # 该写法是为 ENTRYPOINT 指令指定的程序提供默认参数
构建容器需要运行的命令, 在docker run 时运行只有最后一个才会生效,支持shell 、exec、参数列表三种格式
ENTRYPOINTENTRYPOINT ["<executeable>","<param1>","<param2>",...]构建容器需要运行的命令, 在docker run 时运行只有最后一个才会生效,不会被docker run覆盖,一般和CMD的参数格式配合使用,组合结果会变成<ENTRYPOINT>“<CMD>”
EXPOSEEXPOSE <端口1> [<端口2>...]暴露端口,相当于docker run -p XXX:[端口1],主要是声明一下容器需要哪些端口,易于后续维护
WORKDIRWORKDIR <工作目录路径>指定工作目录,镜像的工作目录就是该指定的目录
ENVENV <key1>=<value1> <key2>=<value2>...相当于定义了个变量,后续的指令可以直接通过这个变量名
ADDADD [--chown=<user>:<group>] <源路径1>... <目标路径>源目录中复制文件或者目录到容器里目标路径,强制将tar的压缩文件解压,不能处理非压缩文件
COPYCOPY [--chown=<user>:<group>] <源路径1>... <目标路径>源目录中复制文件或者目录到容器里目标路径
VOLUMEVOLUME ["<路径1>", "<路径2>"...]将容器指定路径的目录与主机挂载,缺点是无法在直接指定对应的路径要挂载的主机目录,而是会自动生成。看起来不如docker run -v

二. 实践

上述过于枯燥,都是一些基本概念,让我们通过实践进一步加深理解。

1. 基于Dockerfile制作微服务镜像

1.1 准备一个微服务的jar包

这里就不提供了

1.2 编写Dockerfile

Dockerfile和该jar包应该在同一目录下

Dockerfile

#openJDK 基础镜像
FROM eclipse-temurin:17-jdk-alpine
# 作者
MAINTAINER yamu
# 设置工作目录
WORKDIR ./app
# 复制构建好的 JAR 文件到容器
COPY gulimall-gateway-0.0.1-SNAPSHOT.jar app.jar
# 暴露服务端口
EXPOSE 8600
# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]

1.3 构建镜像

docker build -t myGateway:1.0 .

在这里插入图片描述

1.4 运行镜像

docker run -p 8600:8600 --net mydata_default mygateway:1.0

运行成功

在这里插入图片描述

2. 基于Dokcerfile构建vim + ifconfig + jdk8 的Centos7

2.1 获取Centos7基本镜像

docker pull centos:7

运行容器

docker run -itd 命令将创建一个在后台运行的容器,同时保持标准输入开放,并分配一个伪终端。这种模式通常用于需要长时间运行的服务容器,同时也需要保留与容器交互的能力

docker run -itd --name centos7 -p 8600:80 --privileged=true centos:7 /usr/sbin/init

进入容器

docker exec -it centos7 /bin/bash

可以看到,当前centos7这个镜像是不具备有这些命令的

在这里插入图片描述

2.2 编写Dockerfile

如果没下载JDK镜像的先去小柒博客 | 开源软件镜像站下载,这里下载的版本是jdk-8u221-linux-x64.tar.gz

Dockerfile

ENV MYPATH /usr/local
WORKDIR $MYPATH
# 安装vim
RUN yum -y install vim
# 安装ifconfig
RUN yum -y install net-tools
# 安装jdk17和lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 由于下载的是.gz的jdk压缩包,通过ADD可以直接解压到镜像工作目录
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
# 配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
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:$PATHEXPOSE 80CMD /bin/bash

2.3 构建镜像

docker build -t mycentos7:1.0 .

如果出现了如下报错,应该是centos的yum的源的问题,需要在Dockerfile中加入对阿里云yum镜像源的配置

在这里插入图片描述

修改后的Dokcerfile

FROM centos:7
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置阿里云yum镜像源
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all
RUN yum makecache
# 安装vim
RUN yum -y install vim
# 安装ifconfig
RUN yum -y install net-tools
# 安装jdk17和lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
# 由于下载的是.gz的jdk压缩包,通过ADD可以直接解压到镜像工作目录
ADD jdk-8u221-linux-x64.tar.gz /usr/local/java/
# 配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_221
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:$PATHEXPOSE 80CMD /bin/bash

在这里插入图片描述

2.4 运行镜像和测试

docker run -itd --name mycentos7 -p 8600:80 --privileged=true  mycentos7:1.0
docker exec -it mycentos7 /bin/bash

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【三大前端语言之一】静态网页语言:HTML详解

你知道你在浏览器中所看到的每一个按钮&#xff0c;每一个框&#xff0c;都是怎么创造出来的吗&#xff1f;它们并非魔法&#xff0c;而是由一种被称为HTML的语言精心构建的骨架。作为前端世界的三大基石之一&#xff08;HTML、CSS、JavaScript&#xff09;&#xff0c;HTML是万…

04、谁发明了深度学习的方法,是怎么发明的?

深度学习的发展是多位研究者长期探索的结果,其核心方法的形成并非由单一人物 “发明”,而是历经数十年理论积累与技术突破的产物。以下从关键人物、核心技术突破及历史背景三个维度,梳理深度学习方法的起源与发展脉络: 一、深度学习的奠基者与关键贡献者 1. Geoffrey Hin…

Jmeter ServerAgent在arm环境启动报错no libsigar-aarch64-linux.so in java.library.path

使用Jmeter压测的时候&#xff0c;用ServerAgent监测arm服务器的性能指标&#xff0c;在启动ServerAgent时&#xff0c;报错了&#xff1a;no libsigar-aarch64-linux.so in java.library.path 解决方案&#xff1a; 下载libsigar-aarch64-linux.so文件&#xff0c;放置在Serv…

AJAX拦截器失效排查指南:当你的beforeSend有效但error/complete沉默时

问题现象 开发者常遇到这样的场景&#xff1a; $.ajaxSetup({beforeSend: () > console.log("✅ 触发"), // 正常执行error: () > console.log("❌ 未触发"), // 静默失效complete: () > console.log("⚡ 未触发") // 同样沉默 })…

【模型微调】负样本选择

1.核心设计理念 非对称检索任务&#xff08;例如&#xff0c;用一个简短的问题去文档库里查找答案&#xff09;的一个核心挑战是查询&#xff08;query&#xff09;和文档&#xff08;passage&#xff09;在文本特征上的巨大差异。以往的研究发现&#xff0c;为查询和文档提供…

下载安装redis

有任何问题&#xff0c;都可以私信博主&#xff0c;共同探讨学习。 正文开始 一、下载安装redis一、启动redis总结 一、下载安装redis redis官方下载地址是github&#xff0c;有条件的同学可以自行搜索下载。针对部分网速不太好的同学&#xff0c;可以通过网盘获取&#xff0c…

flutter 项目配置Gradle下载代理

如图&#xff0c; 在Android Studio中配置代理是不生效的。 需要在flutter sdk的Gradle中去配置代理

世冠科技亮相TMC,以国产MBD工具链赋能汽车电控系统开发新未来

2025年6月12日至13日&#xff0c;第十七届国际汽车动力系统技术年会&#xff08;TMC2025&#xff09;在南通国际会展中心盛大召开。作为全球汽车动力系统领域规模最大、规格最高、内容最前沿的标杆性国际盛会&#xff0c;汇聚了来自全球整车企业、核心零部件供应商、顶尖科研机…

将本地项目与远程 Git 仓库关联的完整步骤

将本地项目与远程 Git 仓库关联的完整步骤 现在的情景是&#xff1a;本地文件项目已经写好了&#xff0c;亦或者远程仓库已经建好了&#xff0c;需要与本地项目关联起来 以下是详细的操作流程&#xff0c;我会用清晰的步骤说明如何将你的本地项目与远程 Git 仓库关联&#xf…

3DS 转换为 STP 全攻略:迪威模型网在线转换详解

在三维模型创作与应用的多元场景中&#xff0c;不同格式的文件承担着独特的角色。3DS&#xff08;3D Studio&#xff09;格式是 Autodesk 3ds Max 早期广泛使用的文件格式&#xff0c;常用于游戏开发、影视特效制作等领域&#xff0c;能够存储模型的几何形状、材质、动画等信息…

Linux下iptables和firewalld详解

Linux下iptables和firewalld详解 Linux下iptables和firewalld简述Iptables四表五链策略与规则链命令参数Firewalld终端管理工具图形管理工具服务的访问控制列表Linux下iptables和firewalld 简述 ​ 保障数据的安全性是继保障数据的可用性之后最为重要的一项工作。防火墙作为公…

Kafka Connect高级开发:自定义扩展与复杂场景应对

引言 在掌握Kafka Connect基础操作与内置连接器应用后&#xff0c;面对企业复杂的业务需求&#xff0c;如对接非标准数据源、实现特定数据处理逻辑&#xff0c;就需要深入到高级开发领域。本篇博客将围绕自定义Connector开发、数据转换编程、错误处理与容错机制展开&#xff0…

吴恩达机器学习笔记:正则化2

1.正则化线性回归 对于线性回归的求解&#xff0c;我们之前推导了两种学习算法&#xff1a;一种基于梯度下降&#xff0c;一种基于正规方程。 正则化线性回归的代价函数为&#xff1a; J ( θ ) 1 2 m [ ∑ i 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 λ ∑ j 1 n θ j 2 …

Unity中的Resources加载

Unity的Resources加载是Unity引擎中一种在运行时动态加载资源&#xff08;assets&#xff09;的方式&#xff0c;允许开发者将资源放置在特定的Resources文件夹中&#xff0c;并通过代码按名称加载这些资源&#xff0c;而无需在场景中预先引用。这种方式在需要动态加载资源时非…

对Vue2响应式原理的理解-总结

根据这张图进行总结 在组件实例初始化阶段&#xff0c;通过 observe() 方法对 data 对象进行递归遍历。在这个过程中&#xff0c;Vue 使用 Object.defineProperty() 为data 中的每个属性定义 getter 和 setter 来拦截对象属性的“读取“操作和“写入”操作。 Vue 的依赖追踪是…

基于深度学习的智能音频增强系统:技术与实践

前言 在音频处理领域&#xff0c;音频增强技术一直是研究的热点。音频增强的目标是改善音频信号的质量&#xff0c;去除噪声、回声等干扰&#xff0c;提高音频的可听性和可用性。传统的音频增强方法主要依赖于信号处理技术&#xff0c;如滤波器设计、频谱减法等&#xff0c;但这…

从代码学习深度强化学习 - DQN PyTorch版

文章目录 前言DQN 算法核心思想Q-Learning 与函数近似经验回放 (Experience Replay)目标网络 (Target Network)PyTorch 代码实现详解1. 环境与辅助函数2. 经验回放池 (ReplayBuffer)3. Q网络 (Qnet)4. DQN 主类5. 训练循环6. 设置超参数与开始训练训练结果与分析总结前言 欢迎…

AI与大数据如何驱动工业品电商平台的智能决策?

在轰鸣的工厂里&#xff0c;一台关键设备因某个密封圈失效而骤然停机。生产线停滞、订单延误、经济损失每分钟都在扩大。此刻&#xff0c;采购经理在工业品电商平台上疯狂搜索&#xff0c;却迷失在海量零件参数与供应商信息中。工业品的沉默&#xff0c;往往意味着生产线的沉默…

连接器全解析:数据库连接器和文件连接器的区别和联系

目录 一、数据库连接器和文件连接器的基本概念 1. 数据库连接器 2. 文件连接器 二、数据库连接器和文件连接器的区别 1. 数据存储方式 2. 数据处理能力 3. 数据安全性 4. 数据更新频率 三、数据库连接器和文件连接器的联系 1. 数据交互 2. 数据处理流程 3. 应用场景…

Uniapp 中根据不同离开页面方式处理 `onHide` 的方法

Uniapp 中根据不同离开页面方式处理 onHide 的方法 在 Uniapp 开发中&#xff0c;onHide 生命周期会在页面隐藏时触发&#xff0c;但默认无法直接区分用户是通过何种方式离开页面的。不过我们可以通过组合其他钩子函数和路由事件来实现对不同离开方式的识别和处理。 一、常见…