怎么通过docker/portainer部署vue项目

news2024/11/19 15:19:43

这篇文章分享一下今天通过docker打包vue项目,并使用打包的镜像在portainer上部署运行,参考了vue-cli和docker的官方文档。

首先,阅读vue-cli关于docker部署的说明

vue-cli关于docker部署的说明icon-default.png?t=N7T8https://cli.vuejs.org/guide/deployment.html#docker-nginx

部署前端项目需要依赖比如tomcat、apache、nginx等http服务器。

目录

第一步、通过git拉取vue项目ttsx

第二步、安装npm工具

 第三步:下载node.js镜像

第四步、下载nginx镜像

第五步、下载项目依赖并编译

第六步、创建Dockerfile文件

第七步、创建 .dockerignore 文件

第八步、构建ttsx的镜像

第九步、在docker/portainer上部署

docker上部署

portainer上部署


第一步、通过git拉取vue项目ttsx

在ubuntu的任意目录下执行以下命令拉取git项目的代码,建议在根目录下。

git clone https://gitee.com/he-yunlin/ttsx.git

第二步、安装npm工具

安装node.js或者npm都可以

apt install npm

 第三步:下载node.js镜像

docker pull node:14.16.0

第四步、下载nginx镜像

docker pull nginx

第五步、下载项目依赖并编译

进入项目的根目录下

cd /ttsx

下载项目依赖

npm install

编译项目

npm run build

编译完成后,生成了一个dist目录

第六步、创建Dockerfile文件

在ttsx项目的根目录下创建一个Dockerfile文件,文件内容如下:

FROM node:14.16.0 as build-stage
WORKDIR /app
COPY package*.json ./
COPY ./ .
​
FROM nginx as production-stage
RUN mkdir /app/
COPY --from=build-stage /app/dist /app
COPY nginx.conf /etc/nginx/nginx.conf

这个Dockerfile文件做了以下几件事:

  • 基于node.js构建一个docker容器A,在这个容器内部创建工作目录/app
  • 把项目ttsx的根目录下的文件复制到容器内部工作目录/app下
  • 基于nginx构建一个容器B,在这个容器内部创建工作目录/app
  • 把容器A的/app/dist目录下的文件复制到容器B的/app目录下
  • 把项目ttsx根目录下的nginx.conf复制为容器B的/etc/nginx/nginx.conf文件

第七步、创建 .dockerignore 文件

在项目根目录下创建名为.dockerignore的文件。

.dockerignore文件配置在Dockerfile中执行COPY命令时忽略的文件,比如COPY ./ .这条命令会把当前项目根目录下的所有文件都复制到docker容器内部。

注意:上面的Dockerfile会从容器A中复制/app/dist,所以这里不能忽略/dist,否则就找不到了,镜像会构建失败。

**/node_modules
README.md
.gitignore
.dockerignore
Dockerfile
.idea

第八步、构建ttsx的镜像

docker build . -t ttsx-20231003hyl

第九步、在docker/portainer上部署

docker上部署

只需要通过docker的run命令运行刚刚打包的镜像,命令如下:

docker run ttsx-20231003hyl

portainer上部署

在portainer中添加一个应用程序栈stack,填写docker-compose.yml

version: "3"
​
services:
  ttsx:
    container_name: ttsx
    image: ttsx-20231003hyl
    ports:
      - 8088:8088

填写完成后页面下拉,找到并点击Depoly the stack按钮,portainer就会帮我们通过指定的镜像和端口信息创建并运行一个docker容器。

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

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

相关文章

智慧工地源代码 SaaS模式云平台

伴随着技术的不断发展,信息化手段、移动技术、智能穿戴及工具在工程施工阶段的应用不断提升,智慧工地概念应运而生,庞大的建设规模催生着智慧工地的探索和研发。 什么是智慧工地? 伴随着技术的不断发展,信息化手段、移…

八、动态规划(Dynamic Programming)

文章目录 一、理论基础二、题目分类(一)基础题目2.[70.爬楼梯](https://leetcode.cn/problems/climbing-stairs/)(1)思路(2)代码(3)复杂度分析 3.[746. 使用最小花费爬楼梯](https:/…

正点原子嵌入式linux驱动开发——U-boot顶层Makefile详解

在学习uboot源码之前,要先看一下顶层Makefile,分析gcc版本代码的时候一定是先从顶层Makefile开始的,然后再是子Makefile,这样通过层层分析Makefile即可了解整个工程的组织结构。顶层Makefile也就是uboot根目录下的Makefile文件&am…

怪兽智能推出3D数字人虚拟主播,实时动作捕捉赋能直播营销,打造全新营销场景

怪兽智能科技推出了数字人直播新功能——3D数字人虚拟主播,通过实时动作捕捉技术,为直播营销场景注入了全新的活力和创意。这一功能将为企业带来更加生动、鲜活的营销体验,助力品牌在竞争激烈的市场中占据优势。 传统的直播营销方式往往依赖于…

论文笔记:Contrastive Trajectory Similarity Learning withDual-Feature Attention

ICDE 2023 1 intro 1.1 背景 轨迹相似性,可以分为两类 启发式度量 根据手工制定的规则,找到两条轨迹之间基于点的匹配学习式度量 通过计算轨迹嵌入之间的距离来预测相似性值上述两种度量的挑战: 无效性: 具有不同采样率或含有噪…

spring的面向切面编程

如果您觉得本博客的内容对您有所帮助或启发,请关注我的博客,以便第一时间获取最新技术文章和教程。同时,也欢迎您在评论区留言,分享想法和建议。谢谢支持! 一、介绍什么是面向切面编程(AOP) 1.…

lv7 嵌入式开发-网络编程开发 05 字节序及IP地址转换

目录 1 主机字节序和网络字节序 1.1 什么是字节序? 1.2 查看主机字节序 2 字节序转换函数 3 IP地址字节序转换函数 4 练习 1 主机字节序和网络字节序 1.1 什么是字节序? 字节序是指多字节数据在计算机内存中存储或者网络传输时各字节的存储顺序&a…

Qt creator+cmake编译并安装

1、qt creator打开项目中的CMakeLists.txt 2、修改“构建设置“-“Cmake”-”Current Configuration“,其中,安装路径为CMAKE_INSTALL_PREFIX 3、修改“构建设置“-“构建的步骤”-”目标“,勾选"all"和"install" 4、构…

acwing198反素数(题解)

对于任何正整数 x,其约数的个数记作 g(x),例如 g(1)1、g(6)4�(1)1、�(6)4。 如果某个正整数 x满足:对于任意的小于 x 的正整数 i,都有 g(x)>g(i),则称 x为反素数。 例如,整数 1…

孔雀东南飞:经济高质量发展与人才流动(数据复现)

数据简介:人才是经济高质量发展的动力源泉。中国ZF一直高度重视人才培养,积极发挥人才作用。“人才是第一资源”,“深入实施……人才强国战略”,“坚持……人才引领驱动”。与此同时,地方ZF大力引进人才,不断推出各类人才优待政策…

提升您的工作效率:TechSmith Snagit for Mac:强大的屏幕截图软件

在当今数字化的时代,屏幕截图已成为我们日常生活和工作中必不可少的一部分。无论是为了保存重要的信息、分享有趣的内容,还是为了制作教程和演示文稿,一款优秀的屏幕截图软件都能极大地提升我们的效率。而在所有的屏幕截图软件中,…

开源python双屏图片浏览器软件

源代码 需要安装pyqt5这个库 # -*- coding: utf-8 -*-from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QVBoxLayout, QPushButton, QFileDialog, QAction, QSlider, QHBoxLayout, QWidget from PyQt5.QtGui import QPixmap from PyQt5.QtCore import Qt, QS…

UWB高精度定位系统:引领精准定位技术的新纪元

在现代社会中,精准定位技术对于各行各业都至关重要。为了满足对高精度定位的需求,超宽带(Ultra-Wideband, UWB)技术应运而生。UWB高精度定位系统以其出色的定位精度和多样化的应用领域而备受关注。本文将深入探讨UWB高精度定位系统…

国庆day5---QT实现TCP服务器客户端搭建的代码,现象

ser.h #ifndef SER_H #define SER_H#include <QWidget> #include<QTcpServer> //服务器头文件 #include<QTcpSocket> //客户端头文件 #include<QMessageBox> //消息对话框 #include<QList> //链表头文件QT_BEGIN_NAMESPACE nam…

pycharm中添加固定的作者的信息

一. pycharm中添加作者信息,日期,等 如图所示 里面还可以添加一些固定的信息 #专业 计算机科学与技术 #姓名 小明

Java泛型理解

什么是泛型&#xff1f; 我们都知道 Java 中有形参和实参之分&#xff0c;是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数&#xff0c;其本身没有确定的值。在调用函数时&#xff0c;实参将赋值给形参。 而泛型是一种参数化的类型&#xff08…

【云备份】

文章目录 [toc] 1 :peach:云备份的认识:peach:1.1 :apple:功能了解:apple:1.2 :apple:实现目标:apple:1.3 :apple:服务端程序负责功能:apple:1.4 :apple:服务端功能模块划分:apple:1.5 :apple:客户端程序负责功能:apple:1.6 :apple:客户端功能模块划分:apple: 2 :peach:环境搭建…

Cocos Creator3.8 实战问题(四)巧用九宫格图像拉伸

一、为什么要使用九宫格图像拉伸 相信做过前端的同学都知道&#xff0c;ui &#xff08;图片&#xff09;资源对包体大小和内存都有非常直接的影响。 通常ui 资源都是图片&#xff0c;也是最占资源量的资源类型&#xff0c;游戏中的ui 资源还是人机交互的最重要的部分&#xff…

【Java】main方法的深入理解

目录 深入理解 main 方法 public static void main(String[] args) ​编辑示例代码&#xff1a; 编译运行&#xff08;String[] args&#xff09;&#xff1a; main 方法的注意事项 示例代码&#xff1a; 深入理解 main 方法 public static void main(String[] args) mai…