当前位置: 首页 > news >正文

前后端通过docker部署笔记

  1. 项目背景:这是一个SpringBoot+vue3的项目,通过maven打包后,需要在Linux服务器上部署,本篇博客主要记录docker-compose.yaml文件的含义:
    在这里插入图片描述

docker-compose.yml 文件中定义了一个 algorithm_platform_frontend 容器,该容器基于 nginx:latest 镜像,并通过数据卷 (volumes) 绑定了 前端静态文件Nginx 配置文件。下面详细解析各个参数的作用,以及 :z 选项的含义。


1. docker-compose.yml 解析

algorithm_platform_frontend:image: nginx:latestcontainer_name: algorithm_platform_frontendhostname: algorithm_platform_frontendrestart: unless-stoppedvolumes:- ./frontend/html:/usr/share/nginx/html:z- ./frontend/nginx.conf:/etc/nginx/nginx.conf:zports:- "8000:80"networks:- algorithm_platform_network

参数解析

参数作用
image: nginx:latest使用官方 nginx 最新版镜像
container_name: algorithm_platform_frontend指定容器名称,方便管理
hostname: algorithm_platform_frontend设置容器的主机名
restart: unless-stopped容器异常退出时自动重启,但如果手动停止,则不会重启
volumes挂载数据卷(绑定前端文件和 Nginx 配置文件)
ports映射端口(宿主机 8000 -> 容器 80,外部访问 http://localhost:8000
networks指定容器加入 algorithm_platform_network 网络

2. volumes 详解

volumes:- ./frontend/html:/usr/share/nginx/html:z- ./frontend/nginx.conf:/etc/nginx/nginx.conf:z

挂载的路径

  1. ./frontend/html:/usr/share/nginx/html:z

    • 作用:将宿主机 ./frontend/html 目录(即前端 HTML 代码)挂载到 Nginx 的 /usr/share/nginx/html,使 Nginx 直接读取宿主机的静态资源。
    • 效果:修改 ./frontend/html 里的文件后,Nginx 自动加载更新,无需重新构建镜像。
  2. ./frontend/nginx.conf:/etc/nginx/nginx.conf:z

    • 作用:将 nginx.conf 配置文件挂载到容器的 /etc/nginx/nginx.conf,自定义 Nginx 配置。

3. :z 选项的作用

volumes 挂载路径的末尾,:z 选项是 SELinux 相关的设置,适用于启用了 SELinux(如 CentOS、RHEL)的环境。

:z 的作用

  • 改变 SELinux 上的标签,让容器能访问宿主机文件。
  • SELinux 默认会阻止 Docker 访问 docker 目录的文件:z 选项会自动添加 共享访问权限

是否需要 :z

  • 如果使用 CentOS / RHEL,而且 SELinux 开启,那么需要 :z 选项。
  • 如果是 Ubuntu / Debian / macOS / Windows,则不需要 :z,可以去掉。

📌 示例:去掉 :z

volumes:- ./frontend/html:/usr/share/nginx/html- ./frontend/nginx.conf:/etc/nginx/nginx.conf

如果你的环境 没有 SELinux,可以去掉 :z,避免不必要的权限修改。


4. 启动容器

📌 启动 docker-compose

docker-compose up -d
  • -d:后台运行容器
  • 访问 http://localhost:8000,应该能看到你的前端页面

📌 查看运行状态

docker ps

📌 查看日志

docker logs -f algorithm_platform_frontend

📌 更新配置后重启
如果修改了 nginx.confhtml 文件:

docker restart algorithm_platform_frontend

5. 总结

  • 这个 docker-compose.yml 文件创建了一个 nginx 容器,负责运行前端静态页面。
  • 挂载数据卷
    • html 目录:提供前端代码
    • nginx.conf:自定义 Nginx 配置
  • :z 选项:用于 SELinux 权限管理,非 SELinux 环境可以去掉。
  • 端口映射 8000:80,让外部可以通过 http://localhost:8000 访问前端。

🚀 建议

  • 确保 ./frontend/html 目录存在,否则 Nginx 可能无法启动。
  • 如果 nginx.conf 有错误,可以进入容器调试:
    docker exec -it algorithm_platform_frontend /bin/sh
    cat /etc/nginx/nginx.conf
    nginx -t  # 测试 Nginx 配置是否正确
    

如果你有更具体的问题,欢迎找博主讨论!😊

相关文章:

前后端通过docker部署笔记

项目背景:这是一个SpringBootvue3的项目,通过maven打包后,需要在Linux服务器上部署,本篇博客主要记录docker-compose.yaml文件的含义: docker-compose.yml 文件中定义了一个 algorithm_platform_frontend 容器&#…...

五十天精通硬件设计第四天-场效应管知识及选型

场效应管(FET,Field-Effect Transistor)是一种利用电场效应控制电流的半导体器件,广泛应用于放大、开关等电路中。以下是场效应管的基本知识及选型要点: 一、场效应管的基本知识 1. 类型: - **结型场效应管(JFET)**: - N沟道和P沟道两种类型。 - 栅极与…...

了解 ALV 中的 field catalog (ABAP List Viewer)

在 ABAP 中,字段目录是使用 ALV (ABAP List Viewer) 定义内部表中的数据显示方式的关键元素。它提供对 ALV 中显示的字段的各种属性的控制,例如列标题、对齐方式、可见性、可编辑性等。关键概念: Field Catelog 字段目…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之修改密码和个人资料

🧸安清h:个人主页 🎥个人专栏:【Spring篇】【计算机网络】【Mybatis篇】 🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。 目录 🎃1.修改密码 -持久…...

十一、CentOS Stream 9 安装 Docker

一、Docker 环境安装 1、软件源(仓库)信息 使用如下命令可列出当前系统配置的所有软件源(仓库)信息 # 列出所有软件源 dnf repolist 这表明系统有三个仓库 AppStream 、 BaseOS、Extras-Common 被启用 2、配置软件源镜像 使用如下命令可配置 Docker 软件包下载的镜像地址 …...

FreeRTOS学习 --- 中断管理

什么是中断? 让CPU打断正常运行的程序,转而去处理紧急的事件(程序),就叫中断 中断执行机制,可简单概括为三步: 1,中断请求 外设产生中断请求(GPIO外部中断、定时器中断…...

如何在Intellij IDEA中识别一个文件夹下的多个Maven module?

目录 问题描述 理想情况 手动添加Module,配置Intellij IDEA的Project Structure 问题描述 一个文件夹下有多个Maven项目,一个一个开窗口打开可行但是太麻烦。直接open整个文件夹会发现Intellij IDEA默认可能就识别一个或者几个Maven项目,如…...

机器学习模型--线性回归、逻辑回归、分类

一、线性回归 级别1:简单一元线性回归(手工实现) import numpy as np import matplotlib.pyplot as plt# 生成数据 X np.array([1, 2, 3, 4, 5]) y np.array([2, 4, 5, 4, 5])# 手动实现梯度下降 def gradient_descent(X, y, lr0.01, epo…...

gitlab个别服务无法启动可能原因

目录 一、gitlab的puma服务一直重启 1. 查看日志 2. 检查配置文件 3. 重新配置和重启 GitLab 4. 检查系统资源 5. 检查依赖和服务状态 6. 清理和优化 7. 升级 GitLab 8. 查看社区和文档 二、 gitlab个别服务无法启动可能原因 1.服务器内存或磁盘已满 2.puma端口冲突…...

react的antd表格数据回显在form表单中

1、首先为table添加编辑按钮 {title: 操作,align: center,render: (_: any, record: any) > (<div style{{ display: flex, alignItems: center, justifyContent: space-evenly }}><Buttonsize"small"onClick{() > deitor(record)} style{{ margin…...

深度分析:网站快速收录与网站内容多样性的关系

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/87.html 网站快速收录与网站内容多样性之间存在着密切的关系。以下是对这一关系的深度分析&#xff1a; 一、网站内容多样性对快速收录的影响 提升搜索引擎抓取效率&#xff1a; 多样化的…...

feign 远程调用详解

在平常的开发工作中&#xff0c;我们经常需要跟其他系统交互&#xff0c;比如调用用户系统的用户信息接口、调用支付系统的支付接口等。那么&#xff0c;我们应该通过什么方式进行系统之间的交互呢&#xff1f;今天&#xff0c;简单来总结下 feign 的用法。 1&#xff1a;引入依…...

【Android】jni开发之导入opencv和libyuv来进行图像处理

做视频图像处理时需要对其进行水印的添加&#xff0c;放在应用层调用工具性能方面不太满意&#xff0c;于是当下采用opencvlibyuv方法进行处理。 对于Android的jni开发不是很懂&#xff0c;我的需求是导入opencv方便在cpp中调用&#xff0c;但目前找到的教程都是把opencv作为模…...

【Elasticsearch】terms聚合误差问题

Elasticsearch中的聚合查询在某些情况下确实可能存在误差&#xff0c;尤其是在处理分布式数据和大量唯一值时。这种误差主要来源于以下几个方面&#xff1a; 1.分片数据的局部性 Elasticsearch的索引通常被分成多个分片&#xff0c;每个分片独立地计算聚合结果。由于数据在分…...

深入理解 `box-sizing: border-box;`:CSS 布局的利器

深入理解 box-sizing: border-box;&#xff1a;CSS 布局的利器 默认行为示例代码 使用 box-sizing: border-box;示例代码 全局应用 box-sizing: border-box;示例代码 实际应用场景1. 表单布局2. 网格布局 总结 在 CSS 中&#xff0c;box-sizing 属性决定了元素的总宽度和高度是…...

【原子工具】快速幂 快速乘

题幂算.一切即1 阴阳迭变积微著&#xff0c;叠浪层峦瞬息功 莫道浮生千万事&#xff0c;元知万象一归宗 文章目录 快速幂原始快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 模下意义的快速幂&#xff08;O(logn)&#xff09;二分递归形式非递归形式 快速乘龟速…...

Apache SeaTunnel 整体架构运行原理

概述 SeaTunnel 缘起 数据集成在现代企业的数据治理和决策支持中扮演着至关重要的角色。随着数据源的多样化和数据量的迅速增长及业务需求的快速变化&#xff0c;企业需要具备强大的数据集成能力来高效地处理数据。SeaTunnel通过其高度可扩展和灵活的架构&#xff0c;帮助企业…...

Nginx如何实现 TCP和UDP代理?

文章目录 前言 Nginx之TCP和UDP代理 工作原理示意图 配置文件和命令参数注释 基本命令 配置实例说明 TCP代理实例UDP代理实例 总结 前言 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;同时也支持TCP/UDP代理。在1.9.13版本后&#xff0c;Nginx已经支持端口转发&…...

蓝桥杯思维训练营(三)

文章目录 题目详解680.验证回文串 II30.魔塔游戏徒步旅行中的补给问题观光景点组合得分问题 题目详解 680.验证回文串 II 680.验证回文串 II 思路分析&#xff1a;这个题目的关键就是&#xff0c;按照正常来判断对应位置是否相等&#xff0c;如果不相等&#xff0c;那么就判…...

开箱即用的.NET MAUI组件库 V-Control 发布了!

之前写过挺多的MAUI Sample&#xff0c;其中有很多代码可以打包成组件&#xff0c;当组件完善到一定程度&#xff0c;我会把控件封装起来放到控件库中。 今天&#xff0c;在这个仓库建立一年零八个月后&#xff0c;我觉得可以考虑将其作为开源库发布。 有很多网友在观望.NET …...

别再瞎猜了!LaTeX排版中em、ex、pt、px到底该用哪个?一篇讲透所有单位

LaTeX排版单位全指南&#xff1a;从em到px的精准选择法则 当你第一次打开LaTeX文档&#xff0c;准备调整行距或设置边距时&#xff0c;那些神秘的缩写——em、ex、pt、px——是否让你感到困惑&#xff1f;每个单位似乎都有其存在的理由&#xff0c;但何时使用哪个才是最合适的&…...

保姆级教程:用R的ggstatsplot包,一键生成带统计检验的SCI级小提琴图

科研绘图革命&#xff1a;用ggstatsplot一键生成统计检验小提琴图的终极指南 在生物医学和生物信息学研究中&#xff0c;数据可视化与统计分析是论文写作中不可或缺的环节。传统流程中&#xff0c;研究者需要先进行统计检验&#xff0c;再将结果手动添加到图表中&#xff0c;这…...

FPGA异构计算与模块化SoM:赋能边缘智能与工业应用实战

1. 项目概述&#xff1a;一次行业深度交流的契机最近&#xff0c;我作为Enclustra团队的一员&#xff0c;有幸受邀参加了今年的嵌入式计算大会。这不仅仅是一次简单的行业聚会&#xff0c;更是一个观察技术风向、碰撞思想火花、探寻合作机会的绝佳窗口。对于所有深耕于嵌入式系…...

MobaXterm远程桌面实战:在Ubuntu上配置与连接RDP服务

1. 为什么选择MobaXterm连接Ubuntu远程桌面 作为一名常年和Linux服务器打交道的开发者&#xff0c;我深知纯命令行操作有时会遇到效率瓶颈。特别是当需要处理图形界面应用或者进行复杂配置时&#xff0c;SSH终端就显得力不从心了。这时候&#xff0c;RDP远程桌面协议就成了救命…...

3分钟搞定容器镜像加速:public-image-mirror 终极实战指南

3分钟搞定容器镜像加速&#xff1a;public-image-mirror 终极实战指南 【免费下载链接】public-image-mirror 很多镜像都在国外。比如 gcr 。国内下载很慢&#xff0c;需要加速。致力于提供连接全世界的稳定可靠安全的容器镜像服务。 项目地址: https://gitcode.com/GitHub_T…...

RISC-V开发踩坑实录:从编译错误‘csrr a5,mhartid’到GDB报错‘E14’的完整排错指南

RISC-V开发实战&#xff1a;从编译到调试的完整排错手册 在嵌入式开发领域&#xff0c;RISC-V架构正以惊人的速度改变着行业格局。作为一名长期从事ARM架构开发的工程师&#xff0c;当我第一次接触RISC-V时&#xff0c;本以为凭借多年的嵌入式经验可以轻松上手&#xff0c;却没…...

FinalBurn Neo终极指南:如何轻松搭建经典街机游戏模拟器

FinalBurn Neo终极指南&#xff1a;如何轻松搭建经典街机游戏模拟器 【免费下载链接】FBNeo FinalBurn Neo - We are Team FBNeo. 项目地址: https://gitcode.com/gh_mirrors/fb/FBNeo FinalBurn Neo&#xff08;简称FBNeo&#xff09;是一款开源街机游戏模拟器&#xf…...

SAP 报SNAP_NO_NEW_ENTY错误【DB2 LOGSECOND参数】

1、在AI的指导下&#xff0c;备份并删除sapprd.snap db2 > create table sapqas.snap_bak_20250101 as (select * from sapqas.snap) with data; DB21034E The command was processed as an SQL statement because it was not a valid Command Line Processor command. D…...

赣州 GEO 科普|AI 时代品牌信息基建,七文 GEO 助力品牌长效可见

赣州GEO科普&#xff5c;AI时代品牌信息基建&#xff0c;读懂生成式引擎优化逻辑人工智能全面普及的当下&#xff0c;生成式AI正在重塑大众的信息获取方式。如今多数用户习惯借助文心一言等AI工具检索品牌、查询行业服务&#xff0c;人工智能会整合全网信息进行智能作答。在此行…...

STM32F407 USART3串口DMA不定长接收与中断发送实战:从零构建高效通信框架

1. 为什么需要DMAUSART组合方案 在嵌入式开发中&#xff0c;串口通信就像设备与外界对话的"嘴巴"和"耳朵"。传统的中断方式就像每次只说一个字就要停下来等回应&#xff0c;效率实在太低。想象一下&#xff0c;如果你跟朋友聊天&#xff0c;每说一个字就要…...