前端眼里的Docker概念、工作流和实践-前端开发者也需要掌握Docker:加速你的开发流程

news2024/12/23 4:43:31

如果现在有个厨王争霸赛,比赛的菜式是做一道🐔相关的菜式,选手们需要做不同的鸡,有需要公鸡和母鸡的,有需要鸡仔的,为了让选手们完美的进行比赛,主办方为每个选手准备了独立厨房,厨房里的厨具和材料应有尽有,但问题是如果选手只做白斩鸡,你却给了他炸鸡的面粉和其他不用的材料就太浪费了,这其实就和虚拟机差不多,如果有些应用需要node8.0,有些应用需要安装node16,虚拟机虽然可以创建独立的环境,使得每个都环境都有对应的版本,但是每个环节都有自己的客户机操作系统,占用非常大的资源和空间,要解决这个问题就可以用到Docker了。

先回到厨王争霸赛选手们依然有独立的厨房,但现在的厨房并不会具有全套的厨具和材料,除了最基本的水电是公用的,其他东西都是按照实际需求进行提供,大大减少主办方费用,我们的Docker也是如此,Docker并不需要创建完整的虚拟操作系统,但还是会创建独立的环境,也就是容器 container,容器里面也是有操作系统的,这样可以跑着各自的应用程序,互不干扰,容器之间共用的是主机的内核,但是容器不会直接访问内核,而是通过Docker引擎来访问,容器里面需要什么应用再根据需求添加,不多也不少。每个选手的菜都是独一无二的,给选手的菜进行拍照,照片就相当于Docker里的镜像,假设其中一个应用或者多个应用的版本不一样,就是另一个镜像里,镜像是一个相对静态的东西,要让镜像动起来,我们可以让不同的镜像运行在不同的容器里面,做到相互隔离,厨师根据特定步骤材料做菜,也就是根据不同的菜谱,比如第一步烧开水,第二步给鸡泡汤,第三步去毛等等,这个菜谱就相当于制作镜像的Dockerfile。

如果你在特定的操作系统,使用特定版本的应用,以及各种依赖,那我们就可以把这些写入Dockerfile,要真正形成一个镜像,我们需要使用docker build命令来构建,运行的时候Docker引擎就会构建镜像,这个镜像实际上还是没有运行的,docker run这个命令可以让Docker引擎为我们分配一个新的容器,一个镜像分别在多个容器进行,镜像除了可以在自己的主机运行,还可以分享给别人,把制作好的镜像推送到Docker Hub,使用的就是docker push,docker pull拉到本地就可以使用镜像里。

实践

使用node的experss来构建

1.npm install express

创建一个app实例,随便一个端口

2.创建一个Dockerfile的文件

随便引用一个node镜像,这里使用hub上的node镜像

pakcage.json引到镜像里

RUN npm install 安装依赖,这样我们的镜像在运行时就可以自行安装express,并且生成node_modules文件里的内容了,然后把剩余的文件全部复制到镜像里。

我们在容器里的端口号和本机的端口号不同,各自不处于同个操作系统,不同的环境,所以暴露端口,然后用CMD命令运行,CMD接的内容需要用数组形势,这样我们的镜像就构建完了。

接着启动docker,在Dockerfile的当前目录输入docker build .命令

这些步骤提示就对应着我们镜像的内容

查看镜像只需要进行docker images,会显示所有的镜像

然后登录docker,push到hub在仓库里就可以看到了

构建的时候,docker build -t cxx .就可以添加名字 .表示相对地址,docker使用缓存构建,非常快。

镜像创建完成了,接下来我们需要在容器里运行一下我们的镜像了,也就是使用docker run命令 添加

docker run -d cxx -d让在后台运行,不会占用当前命令窗口

docker ps命令确认镜像是否在运行

进行端口映射docker run -d -p 3000:3000 意思就是访问主机3000端口的时候,就会访问容器端口3000

修改文件后,我们需要生成新的镜像,我们查看容易里的app.js的时候,容器正在运行,需要使用docker exec来查看,可以看到app.js内容修改后查看 镜像内的app.js是不改动的,如果每次本地文件修改都要重新构建镜像,然后新建容器运行,显然是很麻烦的,这时候我们需要+ -v选项,可以把本地指定文件夹和容器文件绑定,本地路径也可以用环境变量的方式来写,只不过不同 操作系统写法有所不同。这时候按道理热更新还是没有实现的,因为虽然我们已经绑定了文件,但是我们根据镜像启动服务的时候,也就是node执行app.js的时候,是根据执行时的服务器文件来启动的,如果文件有修改,我们需要重新用node执行app.js,我们可以用nodemon来自动重启。

每次启动容器的时候,都要写一长串命令,如果要启动多个容器来处理不同版本应用,这样肯定费劲,这个时候可以用到docker-compose,首先创建一个docker-compose.yml文件,使用yml编写

这样就可以使用docker-compose来管理容器

通过这个简单的实操可以让我们对docker有个清晰的认知了,Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

最后在使用docker的时候,docker远程连接注意别随便开启,用完记得关哦!

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

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

相关文章

代码随想录算法训练营第五十七天|647. 回文子串|516.最长回文子序列

LeetCode647. 回文子串 动态规划五部曲: 1,确定dp数组(dp table)以及下标的含义:本题如果我们定义,dp[i] 为 下标i结尾的字符串有 dp[i]个回文串的话,会发现很难找到递归关系。dp[i] 和 dp[i-…

【备战秋招】每日一题:4月29日美团春招:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站(含题解) www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200道互联网大厂模拟练习题&a…

好用的Windows数据恢复软件--傲梅恢复之星

​数据恢复软件有什么用? 现在,人们拥有大量的文件需要保留和保护,包括照片、视频、文档、游戏等等。了解数据安全的用户会利用云存储服务和外部设备来存储和备份重要的数据。 但更多的用户并不重视数据备份。这样做是相当危险的&#xf…

网络安全进阶学习第一课——认证崩溃之弱口令与暴力破解

文章目录 一、什么是弱口令?二、暴力破解1、暴力破解攻击产生原因2、暴力破解分类3、具体案例 一、什么是弱口令? 弱口令没有严格和准确的定义,通常认为它是容易被别人猜测到或被工具破解的口令均为弱口令。 在允许社会工程学攻击的情况下&…

一文搞懂 AB Testing 的分层分流

一、定义 在网络分析中,A / B测试(桶测试或分流测试)是一个随机实验,通常有两个辩题,A和B。利用控制变量法保持有单一变量的前提下,将A、B数据进行对比,得出实验结论。 二、简述 通常网站会利…

CentOS7配置教程(十三)安装Python3

由于 yum install python3 默认安装的 Python 版本较低,(也可能自带了python3的版本过低)现如今有更高版本的 Python 需求,就想用编译安装的方法安装一个较高版本的 Python,顺道记录一下安装过程。 注意:不…

通过ETLCloud自动化数据处理:用友U8数据一键同步

用友U8 用友U8是一款成熟的企业管理软件,是一套适用于企业全面管理的ERP(Enterprise Resource Planning)软件。主要用于管理企业的财务、人力资源、供应链、生产制造等业务。它具有模块化设计和高度可定制化的特点,可以根据企业的…

X Toolkit影像工具

最近发现一款3d影像工具,在网页版的表现很流畅,没有使用独显的情况下也非常的流畅。 X Toolkit 是一个开源工具包和框架,用于构建在浏览器中运行的医学和科学 3D 可视化,它使用 WebGL 的强大功能,只需几行代码即可提供…

探讨开源法律共识|2023开放原子全球开源峰会开源法律与合规分论坛成功举办

6 月 11 日,以“开源知识产权的深度现实与广阔未来”为主题的 2023 开放原子全球开源峰会“开源法律与合规分论坛”在北京经济开发区国家信创园顺利召开。全球开源领域法律与合规专家共同从理论和实践维度,就开放创新模式下知识产权纠纷的最新案例、开源…

ZooKeeper【客户端的API操作、写数据流程】

前置工作 创建Maven工程 导入依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><dependency><groupId>org.apache.loggi…

Flink TableAPI Aggregation And DataType

序言 这里整理下聚合的优化选项 以及 数据类型 Stream Aggregation SQL 是数据分析中使用最广泛的语言。Flink Table API 和 SQL 使用户能够以更少的时间和精力定义高效的流分析应用程序。此外&#xff0c;Flink Table API 和 SQL 是高效优化过的&#xff0c;它集成了许多查询…

springcloud-Nacos-注册表结构

// Map(nameSpace:: Group,Service) Map<String,Map<String,Service>> service new ConcurrentHashMap<>(); //Service 中有个属性 clusterMap // Map(服务名称,集群) Map<groupNameserviceName,Cluster> clusterMap new HashMap<>(); //而Clus…

局部聚集系数

最近在打一个图数据库算法的比赛&#xff0c;分到了计算局部聚集系数这道题&#xff0c;要求速度快&#xff0c;空间复杂度可以不首要考虑。这对我是一个全新的知识&#xff0c;用此博客记录我的学习历程。 搜了一圈视频教程&#xff0c;b站没有这块的知识&#xff0c;只有yout…

系统码的编译码与汉明码

本专栏包含信息论与编码的核心知识&#xff0c;按知识点组织&#xff0c;可作为教学或学习的参考。markdown版本已归档至【Github仓库&#xff1a;https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 系统码的编译码线性…

Android使用WebView与Native交互的三种方式 ( 附源码 )

先附上assets目录中html的源代码文件内容&#xff0c;下面的demo都是使用这几个文件&#xff1a; javascript.html: <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>Carson</title><script>function callAn…

深入理解多层感知机(MLP):原理与代码解析

文章目录 1. MLP的原理1.1 结构1.2 激活函数1.3 前向传播1.4 反向传播算法 2.MLP分类任务应用3.参考文献&#xff1a; 多层感知机&#xff08;MLP&#xff09;是一种经典的神经网络模型&#xff0c;由多个神经元层组成。它的结构和功能使其成为深度学习中的重要组成部分。MLP在…

【Java算法题】剑指offer_算法之01搜索算法

前言 刷题链接&#xff1a; https://www.nowcoder.com/exam/oj/ta?page2&tpId13&type265 1. 搜索算法 JZ53 数字在升序数组中出现的次数 思路&#xff1a;遍历数组&#xff0c;count记录k值出现次数&#xff0c;返回count public class Solution {public int GetN…

【word wps文字】目录页码中的格式在打印或打印预览时变为和正文页码格式一样,如何调整?

一、问题背景 之前在闲鱼上&#xff0c;有个人找我改word排版&#xff0c;有一个需求就是正文页码两边需要横杠。 但是目录中显示的页码&#xff0c;不需要横杠。 我当时是一个一个在目录中删除横杠的&#xff0c;借助了查找与替换功能。 更改后&#xff0c;目录页码如下所…

Java与SpringBoot对redis的使用方式

目录 1.Java连接redis 1.1 使用Jedis1.2 使用连接池连接redis1.3 java连接redis集群模式 2.SpringBoot整合redis 2.1 StringRedisTemplate2.2 RedisTemplate 1.Java连接redis redis支持哪些语言可以操作 &#xff08;去redis官网查询&#xff09; 1.1 使用Jedis (1)添加jedis…

HTML+CSS实训——Day14——项目其他页面的完善

仓库地址&#xff1a;HTML实训 前言 今天我们继续用老师提供的api&#xff0c;完善一些剩余的功能&#xff0c;因为我的git push好像传乱了&#xff0c;所以仓库大家看看最新的就好&#xff0c;最新的一天一定包括前一天所做的内容。 Collect.htmlcss 收藏界面 <!DOCT…