Dockerfile

news2024/11/25 0:40:32

Dockerfile指令集

 对于Dockerfiel而言,是在学习docker工具里面,最重点的内容,它可以帮助我们生成自己想要的基础镜像。部署一个容器最重要的就是镜像,指令都已经内置好了。

FROM                这个镜像的妈妈是谁?(指定基础镜像)

MAINTAINER    告诉别人,谁负责养它?(指定维护者信息,可以没有)

RUN                  你想让它干啥(在命令前面加上RUN即可)

ADD/COPY        给它点创业资金(COPY文件,会自动解压)

WORKDIR          我是cd,今天刚化了妆(设置当前工作目录)

VOLUME             给它一个存放行李的地方(设置卷,挂载主机目录)
ENV                     告诉这个镜像你有哪些工具(设置环境变量 )不会占用镜像层数       echo $PATH
EXPOSE 它要打开的门是啥(指定对外的端口)希望暴露的端口号

CMD 奔跑吧,兄弟!(指定容器启动后的要干的事情)写的是shell的指令

Dockerfile中的copy和add差别

add:如果所拷贝的文件是一个压缩包,在增加一个目标位置,它会先将压缩包解压,然后把压缩包解压后的内容放到压缩位置。add把压缩包解压过去,(一般情况下压缩包这种东西除非回滚会使用,打镜像的时候一定是单一任务完成的指令是最稳妥的因为最容易控制)

copy:拷贝一个压缩包,只会把压缩包放到对应的目录就完事了。没有任何的多余动作。(copy常用)

cd /opt/test

touch Dockerfile

vim Dockerfile

 看run能不能正常实现创建文件。

docker build -t test:v0.1 .

镜像的打包构建,目标镜像名test:v0.1 根据当前目录进行构建

Dockerfile单阶段构建镜像

单阶段构建镜像采用前端的vue项目作为基点,打包vue项目到机器中进行部署。

在公司,前端进行工作是需要电脑里面装有node js的环境的,需要把安装包放在机器里,才能进行前端代码的编写,需要先下载一个node,js的包。

 18.12.1 LTS 长期支持版本   19.0.1 Current 开发版本

需要先下载一个包,安装到你的机器,再去开发前端的程序,才能开发,必须有一个开发的环境。就像python,必须下载python的解释器,才能写python。

解决环境的途径是:有一个镜像,在镜像里包含了环境。

 环境有了,把代码拷贝进去就成了。以node:18.12.1为基底镜像,将我的代码拷贝进去,然后给代码运行起来,就能形成一个前端的项目,而服务器里不用装node js的环境,只需要把新打包的环境放上去运行就ok。现在需要node js的环境。

单阶段构建:一个阶段使用编程语言的环境,将代码拷到编程语言的环境,再把代码运行起来,就完成了单阶段的构建。

缺点:打出来的镜像比较大。

 去安装它的一些依赖,js代码,包括html的代码就把它运行起来了。

 Dockerfile多阶段构建镜像

单阶段构建所产生的镜像太大了,如果既想完成代码的测试,又想缩小镜像的大小。如何去做到?

采用第一个node js的镜像,去对我们的前端代码进行打包编译,把编译后的产物给它拷贝到另外一台基底镜像中,以此就可以把源代码正常的解析出来,就可以完成对源代码镜像的封装。实际上在前端的vue基础之上可以进行依赖的安装。

run build  这个指令会生成一个dist目录,dist目录就是把前端的代码,包括依赖的一些包全都打包到dist目录中,这个目录中就是由vue这个项目写出来的一堆代码,由于脱离了node js环境无法运行的代码,让它能够达到纯净度极高的一个html css js 的代码程度,让它摆脱node js 照样可以运行。

在这个过程中只需要向浏览器去提供这些文件就可以,需要一个中间件nginx,只要把dist目录放到nginx里就完成能摆脱node js的环境,从而实现最终打出来的镜像大小。

在一个dockerfile遍写两个集体镜像。

第一个集体镜像专门用作将前端的项目代码,打包出js目录来

第二个集体镜像只需要拷贝从第一个阶段到第二个阶段

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

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

相关文章

数据结构每日亿题(四)

复制带随机指针的链表 原题传送门:力扣 题目: 这题的大概意思就是: 有这样一个链表,他比普通的链表多一个成员变量:random指针,这个random指针指向的是这个链表中随机一个地方,这个地方是其它节…

NetSim网络仿真使用及静态路由配置

🍰 个人主页:__Aurora__ 🍞如果文章有什么需要改进的地方还请各位大佬指正。 🍉如果我的文章对你有帮助➡️ 关注🙏🏻 点赞👍 收藏⭐️ NetSim网络仿真使用及静态路由配置。 实验要求及其步骤 使用Boson N…

Java面试笔记:Java线程安全的集合类有哪些?线程不安全的集合类有哪些?ArrayList为什么会发生并发修改异常?

一、Java的集合类有哪些? 二、如何定义集合是线程不安全的? 当多个并发同时对线程不安全的集合进行增删改的时候会破坏这些集合的数据完整性,例如:当多个线程访问同一个集合或Map时,如果有超过一个线程修改了A…

3A企业认定有哪些好处?

企业参与申报和认证有什么益处?这个问题可能应该是广大企业参与前最为关心的问题之一了 1、可快速有效提升企业资质、获得国家政府的认可;并将获得由商务部颁发的具有统一编号的牌匾和证书。 2、是企业履约能力、投标信誉、综合实力与竞争力的体现&…

数学建模--优化类模型

目录 一、根据目标函数约束条件类型分类 1、线性规划 ①线性规划模型的一般形式 ​②用MATLAB优化工具箱解线性规划 ③模型分析 2、非线性规划 ①非线性规划的基本概念 ②非线性规划的基本解法 ③二次规划 ④一般非线性规划 二、控制变量类型分类 1、整数规划 …

总结线程安全问题的原因和解决方案

一. 线程安全问题 概念 首先, 线程安全的意思就是在多线程各种随机调度的情况下, 代码不出现 bug 的情况. 如果在多线程调度的情况下, 出现 bug, 那么就是线程不安全. 二. 观察线程不安全的情况 下面我们用多线程来累加一个数, 观察线程不安全的情况: 用两个线程, 每个线程…

树--堆和优先权队列

数据结构中的堆和栈与操作系统内存划分中的堆和栈没有关系 一、堆的定义 一个大小为n的堆是一棵包含n个结点的完全二叉树,其根节点称为堆顶。 根据堆中亲子结点的大小关系,分为大堆和小堆: (1)最小堆:树中…

高斯原型网络原论文高质量翻译

论文地址:Gaussian Prototypical Networks for Few-Shot Learning on Omniglot 文章目录摘要1 引言1.1 Few-shot learning1.2 高斯原型网络2 相关工作3 方法3.1 编码器3.2 偶发性训练3.3 定义一个类3.4 评估模型4 数据集5 实验5.1 协方差估计的用法6 结论摘要 我们…

万字长文解读计算机视觉中的注意力机制(附论文和代码链接)

文中论文和代码已经整理,如果需要,点击下方公众号关注,领取,持续传达瓜货 所向披靡的张大刀 注意力机制是机器学习中嵌入的一个网络结构,主要用来学习输入数据对输出数据贡献;注意力机制在NLP和CV中均有使…

目标检测算法——YOLOv5/YOLOv7改进之结合无参注意力SimAM

目录 (一)前言介绍 1.摘要 2.不同注意力步骤比较 (二)相关实验 (三)YOLOv5结合无参注意力SimAM 1.配置.yaml文件 2.配置common.py 3.修改yolo.py SimAM:无参数Attention助力分类/检测/分…

点云应用——三维空间边界点排序+机器人轨迹引导(1)

三维空间边界点排序机器人轨迹引导一、前言二、思路一:利用重建思路三、思路二:利用PCL边界提取方法三维空间点排序四、后续一、前言 最近做了点云边界提取、并实时发送至机器人进行引导的研究,主要遇到了两个问题: 1)…

Python画爱心——一颗会跳动的爱心~

节日就快到来了,给你的Ta一个惊喜吧~ 今天给大家分享一个浪漫小技巧,利用Python制作一个立体会动的心动小爱心 成千上百个爱心汇成一个大爱心,从里到外形成一个立体状,给人视觉上的冲击感!浪漫极了↓ 微信扫码添加&a…

CUDA 从入门到放弃(一)

CUDA从入门到放弃系列包含内容 异构并行计算CUDA编程模型CUDA执行模型CUDA内存CUDA流和并发CUDA指令级原语GPU加速库多GPU编程 本文你将了解到 异构并行计算CUDA编程模型 温馨提示: 本文可能引发C/C零基础的读者不适,请谨慎观看. 一、聊聊异构并行计算 异构并行计算的本质是…

MQTT Broker mosquito配置以及使用tls证书登录附上Python调用代码

MQTT Broker mosquito配置以及使用tls证书登录 文章目录MQTT Broker mosquito配置以及使用tls证书登录1. 前言2. 安装3. mosquito相关命令3.1 运行停止查看状态3.2 创建可以登录mosquito的用户3.3 配置权限规则文件3.4 配置mosquito3.5 使用mosquito_pub和mosquito_sub测试3.5.…

web手势库Alloyfinger

前言 在上一篇文章 前端pdf预览、pdfjs的使用,我们使用pdf.js 来实现了pdf的预览。但是客户车间里的电脑是触摸屏,要求能够手势放大图纸,能够拖动图纸。最终决定使用 Alloyfinger 来解决手势的问题。 官方github https://github.com/Alloy…

计算机网络(一):计算机网络概念、功能、组成

计算机网络的概念 计算机网络:是一个将分散的、具有独立功能的计算机系统,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统 计算机网络是互连的、自治的计算机集合。 互连:互联互通 自治:无…

前端面经 前端优化

前端面经 前端优化 文章目录前端面经 前端优化HTTP/2 Web优化最佳实践DNS与解析如何使用CDN分发缓存策略页面渲染优化避免CSS、JS阻塞CSS阻塞JS的阻塞改变JS阻塞的方式使用字体图标iconfont代替图片图标降低CSS选择器的复杂性减少重绘和回流如何避免图片资源优化Webpack优化降低…

【Vue】VueCLI 的使用和单文件组件(1)

学习内容: 1)了解一下 Vue 的脚手架工具; 2) 认识一下 Vue 里面的单文件组件。‍‍ 在真正开发大型项目的时候,实际上我们并不能通过一个这样的index点html的方式去编写一个比较大型的项目,‍‍ 所以我们要学习使用 V…

JavaScript 69 JavaScript Web API 69.3 Web History API

JavaScript 文章目录JavaScript69 JavaScript Web API69.3 Web History API69.3.1 History back() 方法69.3.2 History go() 方法69.3.3 History 对象属性69.3.4 History 对象方法69 JavaScript Web API 69.3 Web History API Web History API 提供了访问 windows.history 对…

Linux进程与操作系统详解

文章目录一:冯诺依曼体系二:操作系统三:进程和PCB四:进程相关的指令五:getpid和getppid系统调用六:fork系统调用七:进程状态八:Linux下进程状态大全8.1:R(running)8.2&am…