將一個react+nodejs聊天軟件前後端項目進行docker打包並運行

news/2024/5/20 9:44:06/文章来源:https://blog.csdn.net/weixin_39289876/article/details/127514325

文章目录

  • 1概述
  • 2将react前端打包入docker
    • 2.1打包react项目
    • 2.2nginx配置
    • 2.3创建Docker镜像
    • 2.4打包和运行
    • 2.5上传dockerhub
  • 3将nodejs打包入docker
    • Dockerfile文件
    • .dockerignore 文件
    • 打包和运行
    • 上传dockerhub

1概述

https://gitee.com/chuge325/practise–chat-app-react-nodejs.git
这时聊天项目的文件,前端是react技术,后端是nodejs进行编写,现在将前后端分开打包。
mongodb的docker打包运行
不想看得化直接运行也可以运行

sudo docker run -itd  -p 27017:27017 yutianchi/mymongo:1.0

2将react前端打包入docker

2.1打包react项目

执行命令yarn build进行打包,打包后项目的目录build下多出打包文件。

2.2nginx配置

创建nginx.conf文件,配置如下。如果是不打算用Docker部署,那直接修改Nginx的配置文件也可以
在这里插入图片描述

user  root;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {worker_connections  1024;
}
http {include       /etc/nginx/mime.types;default_type  application/octet-stream;underscores_in_headers on;client_max_body_size   20m;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;keepalive_timeout  65;server {listen 3000 default_server;server_name _;location  / {root /usr/share/nginx/html;index  index.html ;try_files $uri $uri/ /index.html;}}
}

2.3创建Docker镜像

在react根目录创建Dockerfile文件,并写入如下内容。

FROM nginx:latest 
LABEL maintainer "yutianchi" 
ADD ./build /usr/share/nginx/html/ 
ADD ./nginx-conf/nginx.conf  /etc/nginx/ 
EXPOSE 3000# sudo docker build -t='yutianchi/chat-app-react-public:1.0.0' .
# sudo docker run  --name  chat-app-react-public -p 3000:3000 -it -d yutianchi/chat-app-react-public:1.0.0

2.4打包和运行

sudo docker build -t='yutianchi/chat-app-react-public:1.0.0' .
sudo docker run  --name  chat-app-react-public -p 3000:3000 -it -d yutianchi/chat-app-react-public:1.0.0

2.5上传dockerhub

sudo docker login -u yutianchi
sudo docker push   yutianchi/chat-app-react-public:1.0.0

3将nodejs打包入docker

可以参考官方教程

https://nodejs.org/zh-cn/docs/guides/nodejs-docker-webapp/

Dockerfile文件

nodejs文件有package.json文件描述你应用程序以及需要的依赖:

{"name": "server","version": "1.0.0","license": "MIT","main": "index.js","scripts": {"start": "nodemon index.js","test": "echo\"Error:no test specified\"&&exit 1"},"dependencies": {"bcrypt": "^5.0.1","cors": "^2.8.5","dotenv": "^16.0.2","express": "^4.18.1","mongoose": "^6.6.1","nodemon": "^2.0.20","socket.io": "^4.5.2"}
}

创建一个空文件,命名为 Dockerfile:

touch Dockerfile

用你最喜欢的文本编辑器打开这个 Dockerfile。

我们要做的第一件事是定义我们需要从哪个镜像进行构建。这里我们将使用最新的 LTS(长期服务器支持版),Node 的版本号为 12。你可以从 Docker 站点 获取相关镜像:

FROM node:12

下一步在镜像中创建一个文件夹存放应用程序代码,这将是你的应用程序工作目录:

# Create app directory
WORKDIR /usr/src/app

此镜像中 Node.js 和 NPM 都已经安装,所以下一件事对于我们而言是使用 npm 安装你的应用程序的所有依赖。请注意,如果你的 npm 的版本是 4 或者更早的版本,package-lock.json 文件将不会自动生成。

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./RUN npm install
# If you are building your code for production
# RUN npm ci --only=production

请注意,我们只是拷贝了 package.json 文件而非整个工作目录。这允许我们利用缓存 Docker 层的优势。bitJudo 对此有一个很好的解释,请见此。 进一步说,对于生产环境而言,注释中提及的 npm ci 命令协助提供了一个更快、可靠、可再生的构建环境。欲知详情,可以参考此处。

在 Docker 镜像中使用 COPY 命令绑定你的应用程序:

# Bundle app source
COPY . .

你的应用程序绑定的端口为7000,所以你可以使用 EXPOSE 命令使它与 docker 的镜像做映射:

EXPOSE 7000

最后但同样重要的事是,使用定义运行时的 CMD 定义命令来运行应用程序。这里我们使用 node server.js 来启动你的服务器:

CMD [ "node", "index.js" ]

完整的Dockerfile

FROM node:12# Create app directory
WORKDIR /usr/src/app# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./# Bundle app source
COPY . .
EXPOSE 7000CMD [ "node", "index.js" ]#sudo docker build -t='yutianchi/chat-app-nodejs-server:1.0.0' .
#sudo docker run --net=host --name  chat-app-nodejs-server -p 7000:7000 -it -d yutianchi/chat-app-nodejs-server:1.0.0

.dockerignore 文件

在 Dockerfile 的同一个文件夹中创建一个 .dockerignore 文件,带有以下内容:

node_modules
npm-debug.log

这将避免你的本地模块以及调试日志被拷贝进入到你的 Docker 镜像中,以至于把你镜像原有安装的模块给覆盖了。

打包和运行

sudo docker build -t='yutianchi/chat-app-nodejs-server:1.0.0' .
sudo docker run --net=host --name  chat-app-nodejs-server -p 7000:7000 -it -d yutianchi/chat-app-nodejs-server:1.0.0

上传dockerhub

sudo docker login -u yutianchi
sudo docker push   yutianchi/chat-app-nodejs-server:1.0.0

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

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

相关文章

爱上源码,重学Spring IoC深入

回答: 我们为什么要学习源码? 1、知其然知其所以然 2、站在巨人的肩膀上,提高自己的编码水平 3、应付面试1.1 Spring源码阅读小技巧 1、类层次藏得太深,不要一个类一个类的去看,遇到方法该进就大胆的进 2、更不要一行…

左程云老师算法课笔记( 四)

前言 仅记录学习笔记,如有错误欢迎指正。 啊啊,才发现二被我挤掉了,有空补下! 一、图: 图的深度优先遍历:(和二叉树的区别就是有环,不能重复打印)(Queue队…

网课搜题接口-查题校园题库系统

网课搜题接口-查题校园题库系统 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台&…

全球名校AI课程库(28)| MIT麻省理工 · 基因组学机器学习课程『Machine Learning for Genomics』

🏆 课程学习中心 | 🚧 AI生物医疗课程合辑 | 🌍 课程主页 | 📺 中英字幕视频 | 🚀 项目代码解析 课程介绍 MIT 6.047/6.878是全球顶校麻省理工开设的基因组学与机器学习的交叉专业课程。课程以基因组学为主要应用领域…

智慧城市万亿级蓝海赛道机遇何在?

工商业的发展,为人类居住历史增添了“城市”这一全新的选项。从春秋战国时期的“货市”,到13世纪地中海沿岸星罗棋布的都市,风格迥异的城市为身处不同时代的居民提供了栖居之地。仅在中国,城市就以不到6%的土地面积,维…

个人征信预测

个人征信预测 --数据分析项目报一、项目概述 通过脱敏的现有数据,如:用户基本身份信息,消费行为,银行还款等,进行数据处理特征,选取并建立逾期预测模型,预测用户是否会逾期还款。二、项目概述数…

SSD目标检测网络ONNX推理,为tensorrt推理做准备【附代码】

本篇文章是实现SSD的onnx推理,主要是为后期tensorrt推理打下基础,YOLOv4以及YOLOv5的tensorrt推理可以看我之前的文章。 SSD的代码我这里下载的是b站up主Bubbliiiing的pytorch版SSD,大家可自行下载【我这里就不传代码了,等最近把…

期货开户用心服务每个客户

用心服务每一个客户!以信为本,点石成金! 蓄之既久,其发必速 如果价格连续多天在—个狭窄的幅度内升降,在图表上形成一幅有如建筑地盘布满地基桩的图景,习惯上称之为密集区,亦即专家所说的技术…

【GraphQL】Node + Postgres + adminer实现demo应用

1、程序目录 在第一级目录下存在三个文件, db.sql用于创建tables和demo数据,可以直接在adminer里登录执行sql语句进行创建,可以看到如下图绿色部分的执行结果 docker-compose.yaml用于为node、postgres和adminer分别创建一个容器&#xff0…

数明SLM27517能驱动MOSFET和IGBT功率开关 低侧栅极驱动器兼容UCC27517

SLM27517 单通道,高速,低侧栅极驱动器器件可以有效地驱动MOSFET和IGBT功率开关。使用设计其固有地最小化击穿电流,可以源汇高峰值电流脉冲转换为电容性负载轨对轨驱动能力非常小传播延迟通常为15ns。可提供4 A电源,5 A接收器12 V …

语音识别 CTC Loss

(以下内容搬运自 PaddleSpeech) Derivative of CTC Loss 关于CTC的介绍已经有很多不错的教程了,但是完整的描述CTCLoss的前向和反向过程的很少,而且有些公式推导省略和错误。本文主要关注CTC Loss的梯度是如何计算的,关于CTC的介绍这里不做…

泛海微告诉你电压检测IC主要用途会是什么呢

泛海微告诉你电压检测IC主要用途会是什么呢: FS61CN3302MR电压检测IC(芯片)是一款高精度,低功耗的电压检测器芯片,并采用了CMOS生产工艺和激光微调技术。XC61C温度漂移特性的影响很小,电压检测精度很高。 ​ ①充电电池配电设备的开关电源一部分。 ②鼠标&#x…

MaxViT:多轴视觉Transformer

论文链接:https://arxiv.org/abs/2204.01697 代码链接:https://github.com/google-research/maxvit 如果进入不了github就直接在这里下载,不过没有权重文件,免费的:https://download.csdn.net/download/weixin_4491103…

THREE.JS实现看房自由(VR看房)

VR看房一、前言二、基础知识三、场景3.1 网络模型3.2 光照3.2.1 环境光3.2.2 平行光3.2.3 点光源3.2.4 聚光灯3.2.5 半球光四、相机4.1 正交相机4.2 透视相机五、渲染器六、贴图纹理6.1 基础介绍6.2 环境贴图6.3 HDR处理七、拓展7.1 坐标系7.2 控制器7.3 自适应7.4 全屏响应7.5…

Vue3官方出的Playground你都用了吗?没有没关系,直接原理讲给你听

相比Vue2,Vue3的官方文档中新增了一个在线Playground: 打开是这样的: 相当于让你可以在线编写和运行Vue单文件组件,当然这个东西也是开源的,并且发布为了一个npm包,本身是作为一个Vue组件,所以可…

Eureka注册中心微服务搭建

1、application.yml server:port: 6001 # 服务端口eureka:instance:hostname: eureka6001.com # eureka服务端的实例名称client:registerWithEureka: false # 服务注册,false表示不将自已注册到Eureka服务中fetchRegistry: false # 服务发现,false表示自…

Unity 加载资源

直接把资源放在unity的目录里是不行的 打包的时候 不会打进去 要想打包到apk里 只有两种选择 1 放到 StreamingAssets 里 – Application.streamingAssetsPath 2 场景里有引用 他会自动打包进apk里 资源放到预制体里 并且预制体没在场景里 也不打包 先安装 https://github.co…

无法找到 Adobe PDF资源文件。“Acrobat PDFMaker“您必须具有”管理员”权限方可安装这些文件...错误怎么解决

在学习和工作中我们经常会碰到将Word转化为PDF的情况,PDF文件的可读性要比Word更好一点,而且打印出来的格式也和PDF文件的排版一致,不会出错。 电脑里安装有 Word 和 Adobe Acrobat DC 软件时,在将Word转为PDF文件时只需要在Word下…

擎创动态 | 1024 这么过,隔壁公司都馋哭了

左手咖啡杯,右手耍魔方 身穿潮流衣,眼戴金丝镜 发型酷帅炫,多才又多艺 百变外观,精致容颜 可盐可甜,又御又萌 技术高超,能力卓越 没错,描述的这种靓仔靓女 就是擎创的中流砥柱——程序员 …

Mybatis-p2

优先建表: USE mybatis;DROP TABLE IF EXISTS user;CREATE TABLE user ( id INT(20) NOT NULL, name VARCHAR(30) DEFAULT NULL, pwd VARCHAR(30) DEFAULT NULL, PRIMARY KEY (id) ) ENGINEINNODB DEFAULT CHARSETutf8;INSERT INTO user(id,name,pwd) VALUES (1,…