前端破圈用Docker开发项目

为什么要用 Docker 开发 🤔

直接在系统上开发不香吗?香,但是 Docker 有下面4香

  1. 环境依赖管理:Docker 容器可以管理所有依赖项,例如前端里面的 nodenpm 版本,不需要在本地安装和维护这些依赖项

  2. 隔离:Docker 容器可以隔离应用程序和其运行环境,有助于防止应用程序之间的冲突,也能防止应用程序对主机系统产生意外的更改

  3. 易于分发:任何时候都可以将应用程序分发给其他开发人员或测试人员,因为他们可以在任何其他设备上以相同的方式运行该应用程序,而无需进行任何配置,可以直接使用同一个 docker file 文件构建镜像,也可以拉取私有服务中的 docker image

  4. 状态管理:如果应用程序是无状态的,可以使用 Docker Compose 来创建开发和调试环境,并轻松地在不同的环境中部署应用程序。

整体来看使用 Docker 开发应用程序可以提高开发效率,简化部署和分发过程,同时保证应用程序的运行环境和稳定性。

主要还是遇到了实际问题需要处理😅

遇到的问题

前端开发的项目在本地运行,打包没问题,然后发布到对应的测试环境和线上环境的时候,然后线上打包异常,线上打包使用 DevOps 平台进行的发布,经排查似乎是 Docker 容器中出的问题。

具体场景描述可以看这篇文章 DevOps发版失败,发版仿佛回到了石器时代😣

解决思路

由于没有 DevOps 服务的操作权限,尝试本地安装 Docker 拉取 node 镜像搭建前端环境容器,先在本地 Docker 容器中测试前端项目,如果运行打包都没问题,把本地的 Docker 容器环境导出来,再发给对应有权限的人帮忙到 DevOps 对应的服务器中再次测试

安装Docker

官网下载

官网地址: https://www.docker.com/

本地系统为 Windows11, 直接下载安装对应的 exe 文件即可, 运行后桌面右下角会出现鲸鱼小图标

也可以在 命令提示符Windows PowerShell 里面执行 docker -v 查看否是安装成功,后面所有的命令操作全部是在 Windows PowerShell 中执行的

拉取镜像

前端环境标配 node 环境,有的会搭配 yarn 等其他工具, 这里先拉取一个 node 镜像

docker pull node

镜像默认是从 Docker Hub 上拉取的,默认拉取的是 latest 最新版本,也可以指定 node 版本

docker pull node:<version>

关于 node 官方镜像详细描述,可以查看如下链接

node - Official Image | Docker Hub

注意⚠

如果遇到WSL相关报错,可能需要更新WSL,可以参考如下链接解决

https://learn.microsoft.com/zh-cn/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package

安装结束后重启系统

协议超时

再次执行 docker pull node,出现报错,提示 net/http: TLS handshake timeout,TLS握手协议超时,可能镜像服务响应太慢在国外导致的

> docker pull node
Using default tag: latest
Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: TLS handshake timeout

检查 VPN 的配置,发现是 Rule 模式,调整为 Global 模式,重试,好了

> docker pull node
Using default tag: latest
latest: Pulling from library/node
d52e4f012db1: Pull complete
6e5565e0ba8d: Downloading [====>                                              ]  19.85MB/211MB
...

如果没有装 VPN ,也可以配置镜像加速器解决镜像拉取失败的问题,国内很多云服务商都提供了国内加速器服务

科大镜像:https://docker.mirrors.ustc.edu.cn/

网易:https://hub-mirror.c.163.com/

阿里云:https://<你的ID>.mirror.aliyuncs.com

七牛云:https://reg-mirror.qiniu.com

几分钟后最新版的 node 镜像就下载好了,默认是下载的 latestnode 最新版,对于生产环境来讲这是不稳定的,我们需要控制生产环境的版本,使用 docker pull node:<version> 的方式下载对应的node版本,使用 docker pull node:16.17.0 下载对应版本 node 镜像,和本地系统上的环境保持一致

下载结束后,使用 docker images 命令检查是否镜像下载成功

> docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
node         latest    b098c9ebef91   13 days ago     1.1GB
node         16.17.0   e90654c39524   10 months ago   911MB

创建容器

Windows PowerShell 中的执行 docker run -ti --name node-16.17.0 -p 8080:8080 -v ${pwd}://workspace node:16.17.0 bash 启动命令,创建一个容器

PS D:\Code> docker run -ti --name node-16.17.0 -p 8080:8080 -v ${pwd}://workspace node:16.17.0 bash
root@4f786e914624:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  workspace

注意脚本运行位置

PS D:\Code> 这里是电脑系统里面的代码目录,里面是代码仓库文件

创建交互模式容器

docker run -ti --name <容器名> -p 端口号:端口号 -v ${pwd}://<自定义工作区> <镜像名> bash

命令参数

docker run -ti --name node-16.17.0 -p 8080:8080 -v ${pwd}://workspace node:16.17.0 bash 当前命令各个参数的含义

run: 根据镜像创建并运行一个容器

-ti bash: 输入(交互)模式创建一个容器, 并进入容器bash

--name node-16.17.0: 定义容器名称,这里的容器名称为 node-16.17.0

-v ${pwd}://workspace: 把当前目录目录结构映射到容器中的 workspace 目录下,这里映射的是 D:\Code> 目录下的内容

-p 8080:8080: 端口映射,容器内部的 8080 端口对应外部系统的 8080 端口,因为接下运行的前端项目端口是 8080,如果项目是其他端口,按需修改即可

root@4f786e914624:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var  workspace
root@4f786e914624:/# cd workspace
root@4f786e914624:/workspace# ls
vue3-project-01
root@4f786e914624:/workspace/vue3-project-01# ls
README.md  cypress.config.ts  index.html         package.json  src                tsconfig.json       tsconfig.vitest.json  vitest.config.ts
cypress    env.d.ts           package-lock.json  public        tsconfig.app.json  tsconfig.node.json  vite.config.ts

vue3-project-01 是一个 vue3 前端项目,在系统的 D:\Code> 目录下,接下来使用这个项目在容器中安装依赖,运行,打包等操作

项目地址: https://github.com/gywgithub/vue3-project-01

容器中查看环境

查看当前 nodenpm 版本

root@4f786e914624:/# node -v
v16.17.0
root@4f786e914624:/# npm -v
8.15.0

这时候容器中为我们需要的 node 版本, 接下来开始测试项目运行情况

容器中运行前端项目

安装项目依赖

进入 workspace 目录中的 vue3-project-01 前端项目,根目录执行 npm i 命令安装前端依赖

root@4f786e914624:/workspace# cd vue3-project-01/
root@4f786e914624:/workspace/vue3-project-01# npm iadded 612 packages, and audited 613 packages in 4m...
root@4f786e914624:/workspace/vue3-project-01#

前端项目的依赖包安装完成

运行项目

npm run dev 运行前端项目

root@4f786e914624:/workspace/vue3-project-01# npm run dev> vue3-project-01@0.0.0 dev
> viteVITE v4.3.9  ready in 3573 ms➜  Local:   http://localhost:8080/

运行成功了,浏览器访问如下效果,到这里就可以在容器中开发前端项目了

注意⚠

如果出现在容器中项目运行成功,但是在页面上无法访问的情况,需要检查创建容器时端口是否正确映射以及端口是否被防火墙拦截

打包项目

npm run build 打包前端项目,也正常没有报错,也正确生成了 dist 文件

root@4f786e914624:/workspace/vue3-project-01# npm run build
...
✓ built in 2.32s
root@59e1b6a61772:/workspace/vue3-project-01# ls
README.md  cypress.config.ts  env.d.ts    node_modules       package.json  src                tsconfig.json       tsconfig.vitest.json  vitest.config.ts
cypress    dist               index.html  package-lock.json  public        tsconfig.app.json  tsconfig.node.json  vite.config.ts

总结回顾

目前来看,使用 vue3-project-01 这个前端项目在 Docker 中开发所有模式都没问题。回到最初的目的,使用 Docker 也是排查公司的项目在 DevOps 中打包失败的原因,那么按照这个流程模式,把出问题的项目地址和端口重新创建对应的容器,然后在容器中进行复现对应的问题点就行了

欢迎大家讨论交流,如果文章感觉有用,随手点个赞再走呗 ^_^ 🥰🥰

微信公众号:草帽Lufei

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

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

相关文章

618入手不亏的好物有哪些?五款品质兼优的好物分享!

随着618购物狂欢节的到来&#xff0c;各位消费者们是否已经摩拳擦掌&#xff0c;准备开启一场购物盛宴&#xff1f;在这里&#xff0c;我们为您精心准备了一份不容错过的购物清单&#xff0c;无论您是科技迷、学生还是家居生活爱好者&#xff0c;都能找到心仪的好物。 1、学生…

经典文献阅读之--RepViT-SAM(利用语义分割提高NDT地图压缩和描述能力的框架)

0. 简介 Segment Anything Model (SAM) 最近在各种计算机视觉任务上展现了令人瞩目的零样本迁移性能 。然而&#xff0c;其高昂的计算成本对于实际应用仍然具有挑战性。MobileSAM 提出通过使用蒸馏替换 SAM 中的重图像编码器&#xff0c;使用 TinyViT&#xff0c;从而显著降低了…

在VSCode 中增加文件与文件夹的可辨识度

今天重新打开VSCode&#xff0c;打算新建一个项目做测试&#xff0c;看到VSCode中的文件与文件夹很不容易辨认&#xff0c;有时候容易导致一些误操作&#xff0c;需要做一些配置来改变。 效果图&#xff1a; 只需要做简单的2步就可以了。 1、安装插件 ⑴ 打开VSCode的扩展搜索并…

降雨量应急监测站的工作原理

TH-YJ3】雨量监测站是一种自动化的气象监测设备&#xff0c;主要用于实时、准确地监测和记录降雨量数据。它通过安装在特定位置的传感器和数据处理设备&#xff0c;连续监测降雨的强度、持续时间和降雨分布等信息&#xff0c;为气象、水文、环境等领域的研究和应用提供数据支持…

OpenBuild推出Sui Quiz任务,瓜分500SUI奖励

Quiz 功能 让用户可以&#xff1a; - 测试对某个知识点的理解力&#xff1b; 通过测试后获得 NFT 凭证&#xff0c;未来该凭证可用于求职认可、Bounty 任务、空投门槛。 Sui 是一个高性能的去中心化平台&#xff0c;旨在解决传统区块链系统中的可扩展性和效率问题。其独特的架…

福建聚鼎科技:装饰画生意到底有没有前景

在当今社会&#xff0c;随着人们生活水平的提高和审美需求的多样化&#xff0c;家居装饰行业迎来了新的发展机遇。装饰画作为家居装饰的重要组成部分&#xff0c;其市场前景备受关注。那么&#xff0c;装饰画生意到底有没有前景呢? 从市场需求的角度来看&#xff0c;装饰画市场…

视频监控业务平台LntonCVS运用国标协议对接视频汇聚管理综合平台应用方案

为了实现“以信息化推动应急管理能力现代化”的目标&#xff0c;应急管理部提出了加速现代信息技术与应急管理业务深度融合的计划。这一计划是国家加强和改进应急管理工作的关键举措&#xff0c;也是满足日益严峻的应急管理形势和人民群众不断增长的公共安全需求的紧迫需求。 为…

vue3 调用本地exe

1、注册表注册 在注册表中直接按照图2注册数据&#xff1b;也可以按照图3注册表的文件创建文档&#xff0c;然后点击打开&#xff0c;将会将注册表写入window系统。 图2 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\F1] "URL:F1 Protocol Handler" &q…

国产POE芯片,芯昇电子成熟量产POE芯片,在PSE端和PD端均成熟量产产品

随着技术的发展和市场的需求&#xff0c;国产POE芯片已经逐渐崭露头角。在POE技术领域&#xff0c;POE芯片分为供电设备PSE和受电设备PD&#xff0c;而选择参与802.3bt标准与以太网联盟徽标计划的厂商来生产这些芯片&#xff0c;可以确保在互操作性和合规性上更有把握。过去…

按组计算每列最大最小值并横向填入格中

第 1 列是分组列&#xff0c;之后是N个数据列。 ABCD1ZN_1N_2Q_122A100200-1003A101-10-2004A102201-1045A991993006B1000110013007B10041200-9008C2000-210022009C1900-2090-2180 现在要按第 1 列分组&#xff0c;每组横向的2N个列&#xff0c;依次是组内每个数据列的最大值…

华为昇腾310 ATC转换工具安装

参考: https://bbs.huaweicloud.com/blogs/393282?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content https://www.hiascend.com/document/detail/zh/canncommercial/601/inferapplicationdev/atctool/atctool_0004.html 1、基本工具…

K8s中配置使用ingress

Ingress是什么 在Kubernetes中&#xff0c;Ingress是一种用于将外部流量路由到集群内部服务的API对象。它通常与Ingress控制器一起使用&#xff0c;Ingress控制器负责根据Ingress规则路由外部流量到不同的服务上。   Ingress 提供从集群外部到集群内服务的 HTTP 和 HTTPS 路由…

Vue中的常用指令

Vue 会根据不同的【指令】&#xff0c;针对标签实现不同的【功能】 概念&#xff1a;指令&#xff08;Directives&#xff09;是 Vue 提供的带有 v- 前缀 的 特殊 标签属性。 为啥要学&#xff1a;提高程序员操作 DOM 的效率。 vue 中的指令按照不同的用途可以分为如下 6 大…

【Unity iOS打包】Library not loaded: ‘@rpath/AdjustSdk.framework/AdjustSdk‘

Unity打包iOS&#xff0c;XCode运行App黑屏卡死&#xff0c;报错&#xff1a; dyld[8412]: Library not loaded: rpath/AdjustSdk.framework/AdjustSdkReferenced from: /private/var/containers/Bundle/Application/C019F943-138F-4B33-AAC1-F18453F942D9/AnimalsBAMBAM.app/…

采用Java+ SpringBoot+ IntelliJ+idea开发的ADR药物不良反应监测系统源码

采用Java SpringBoot IntelliJidea开发的ADR药物不良反应监测系统源码 ADR药物不良反应监测系统有哪些应用场景&#xff1f; ADR药物不良反应监测系统有哪些应用场景&#xff1f; ADR药物不良反应监测系统具有广泛的应用场景&#xff0c;以下是一些主要的应用场景&#xff1a…

发现一个可以白嫖GPU的平台

网址 https://platform.virtaicloud.com/gemini_web/auth/register?inviteCodeb0322161368ead7f49716688486796dd 驱动云注册有100点的算力点&#xff0c;目前最便宜的机器大概是0.49算力点每小时&#xff0c;安装个sd或者简单学习训练数据的话&#xff0c;应该能用挺久的。…

【豆伴匠】L1-L12更新完,一站式解决文史积累、阅读、写作难题,弯道超车,寒假必备

合抱之木&#xff0c;生于毫末&#xff1b; 九层之台&#xff0c;起于垒土&#xff1b; 千里之行&#xff0c;始于足下。 豆伴匠是什么&#xff1f; 豆伴匠内容包括&#xff1a;人、文、史、作四个模块&#xff0c;全面覆盖文史知识及读写技巧。 目前&#xff0c;豆伴匠有L…

【408真题】2009-24

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

[C++]红黑树

一、概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;因而是…

CIM分级

定义 以建筑信息模型&#xff08;BIM&#xff09;、地理信息系统&#xff08;GIS&#xff09;、物联网&#xff08;IoT&#xff09;等技术为基础&#xff0c;整合城市地上地下、室内室外、历史现状未来多维多尺度信息模型数据和城市感知数据&#xff0c;构建起三维数字空间的城…