Docker Desktop 打包Unity WebGL 程序,在Docker 中运行Unity WebGL 程序

Docker中如何运行Unity服务 本文主要的目的基于Unbuntu系统将Unity作为一个后台服务,运行在Docker环境上,结合微服务等框架,将unity作为一个微服务。 阅读详情

Docker Desktop 打包Unity WebGL 程序,在Docker 中运行Unity WebGL 程序

目录

  1. 环境准备
  2. Nginx配置
  3. 容器操作
  4. 镜像管理
  5. 常用命令

环境准备

前提条件

  • 已安装Unity并完成WebGL构建
  • 已安装Docker环境

验证Docker安装

# 检查Docker版本
docker --version

# 测试基础功能
docker pull hello-world
docker run hello-world

获取Nginx镜像

#获取最新版本nginx
docker pull nginx

#获取指定版本的ngixn
docker pull nginx:1.25.3      

拉取镜像下载中

下载完成


Nginx配置

目录结构准备

mkdir F:\DockerHostFiles\nginx_data\html
mkdir F:\DockerHostFiles\nginx_data\conf

目录结构2

目录结构

配置文件 (default.conf)

这里的配置很奇怪,只要有server块就行,有其他块会报错。

server {
    listen       7963;
    server_name  localhost;
    root   /usr/share/nginx/html;
    index  index.html index.htm;

    # 日志配置
    error_log  /var/log/nginx/error.log debug;
    access_log /var/log/nginx/access.log main;

    # 静态文件服务
    location / {
        try_files $uri $uri/ /index.html;
        gzip off;  # 禁用动态压缩
        
        # CORS配置
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
    }

    # 预压缩文件处理
    location ~ \.gz$ {
        sendfile off;
        directio off;
        tcp_nopush off;
        gzip off;
        add_header 'Content-Encoding' 'gzip';

        # 按类型设置MIME
        location ~ \.js\.gz$ { types { application/javascript gz; } }
        location ~ \.wasm\.gz$ { types { application/wasm gz; } }
        location ~ \.data\.gz$ { default_type application/octet-stream; }
    }

    # 原始文件处理
    location ~ \.(js|wasm|data)$ {
        sendfile off;
        location ~ \.js$ { types { application/javascript js; } }
        location ~ \.wasm$ { types { application/wasm wasm; } }
        location ~ \.data$ { default_type application/octet-stream; }
    }

    # 错误页面
    error_page 404 /404.html;
    location = /404.html { internal; }
}
配置2
server {
    listen 7963;
    server_name localhost;
    root /usr/share/nginx/html;
    index index.html index.htm;

    # 日志配置
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    # 开启静态gzip服务(自动提供预压缩文件)
    gzip_static on;

    location / {
        try_files $uri $uri/ /index.html;
        
        # CORS配置
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        
        # 禁用动态压缩(使用预压缩)
        gzip off;
    }

    # 正确设置MIME类型
    location ~ \.js$ {
        types { }  # 清除默认类型
        default_type application/javascript;
    }
    
    location ~ \.wasm$ {
        types { }
        default_type application/wasm;
    }
    
    location ~ \.data$ {
        types { }
        default_type application/octet-stream;
    }

    # 错误页面
    error_page 404 /404.html;
    location = /404.html {
        internal;
    }
}

容器操作

启动Nginx容器

运行nginx并且设置卷映射,
这里映射的端口应该和ngixn中的端口一致,在主机的58231端口绑定到容器的7963端口上

docker run -d --name my-nginx docker运行容器名称为 my-nginx
-v F:\DockerHostFiles\nginx_data\html:/usr/share/nginx/html \绑定html路径
-v F:\DockerHostFiles\nginx_data\conf:/etc/nginx/conf.d \绑定conf路径
-p 58231:7963 \绑定端口主机端口58231 映射到docker的7963端口
nginx使用的镜像是 nginx
docker run -d --name my-nginx \
  -v F:\DockerHostFiles\nginx_data\html:/usr/share/nginx/html \
  -v F:\DockerHostFiles\nginx_data\conf:/etc/nginx/conf.d \
  -p 58231:7963 \
  nginx

镜像管理

提交容器为新镜像

-a 创作者名称
-m 日志信息
my-nginx 容器名称
my-nginx-unity-webgl-app 导出的新的镜像名称

命令内容
docker commit提交
-a作者名称
-m日志内容
my-nginx容器名称
my-nginx-unity-webgl-app保存的镜像名称
docker commit -a "wyh" -m "Unity WebGL应用镜像" my-nginx my-nginx-unity-webgl-app

这时候可以使用docker images 看到有一个新的镜像被添加到镜像列表

导出镜像

将指定的镜像保存到指定的路径中,路径应使用双引号包裹

docker save -o将文件保存输出
“M:\DockerHostFiles\outFiles\Nginx_outFiles\my-unity-webgl-app.tar”输出路径,包名
my-nginx-unity-webgl-app
docker save -o "M:\DockerHostFiles\outFiles\Nginx_outFiles\my-unity-webgl-app.tar" my-nginx-unity-webgl-app

导入镜像

将刚刚的镜像导入到docekr中,但是需要先将之前的镜像删除docker rmi my-nginx-unity-webgl-app

docker load -idocker 加载
“M:\DockerHostFiles\outFiles\Nginx_outFiles\my-unity-webgl-app.tar”被包的路径
docker load -i "M:\DockerHostFiles\outFiles\Nginx_outFiles\my-unity-webgl-app.tar"

验证镜像

docker images

常用命令参考

# 查看Docker系统信息
docker info

# 查看版本信息
docker version

# 查看运行中的容器
docker ps

# 查看所有容器
docker ps -a

# 重启容器
docker restart [容器名称/ID]

# 启动已停止容器
docker start [容器名称/ID]

# 停止容器
docker stop [容器名称/ID]

# 执行容器内命令
# 在my-nginx 这个容器中执行nginx -s reload 命令
docker exec -it my-nginx nginx -s reload


Unity开发效率提升:CLI命令行工具与MCP协议在工作流中的选择与实践 在游戏开发与软件工程领域,自动化工具链是提升团队协作效率和项目稳定性的核心技术。其原理在于通过脚本和标准化接口替代重复性手动操作,减少人为错误,实现流程的可重复与可验证。从技术价值看,自动化不仅能显著缩短构建、测试和部署周期,更是现代CI/CD(持续集成/持续部署)和DevOps实践的基石。在Unity开发这一具体应用场景中,开发者常面临资源管理、多平台构建和与AI助手集成等任务。此时,选择稳定高效的工具方案至关重要。命令行接口(CLI)提供了底层直接的控制能力,而模型上下文协议(MCP)则旨在通过自然语言 阅读详情

相关推荐

Unity项目.gitignore终极指南:告别臃肿备份,实现高效版本控制

在软件开发和版本控制中,.gitignore文件是管理项目文件、避免冗余数据进入代码仓库的核心工具。其工作原理是通过模式匹配规则,让Git自动忽略临时文件、编译缓存、本地配置等非核心资产,从而确保版本库只包含必要的源代码和资源。这一机制对于提升团队协作效率、减少存储开销和加速备份流程具有重要技术价值,尤其适用于Unity、Unreal等会产生大量中间文件的游戏引擎项目。在Unity开发场景中,合理配置.gitignore能有效解决项目体积臃肿、备份缓慢和版本历史污染等常见痛点。本文基于Unity项目结构解析

weixin_33834137的博客 490

如何使用Docker搭建Unity引擎开发环境?

Unity 项目的自动构建持续集成与测试服务器端构建与部署无头模式下的游戏服务器虽然 Docker 化 Unity 开发环境有一定挑战,但它为自动化构建、测试和 CI/CD 流程提供了强大基础。持续集成系统中自动构建游戏项目在多个平台上进行自动化测试部署游戏服务器标准化团队构建环境通过上述配置,您可以创建一个完全自动化的 Unity 构建管道,显著提高开发效率,确保构建质量和一致性。特别是对于大型团队和需要频繁构建的项目,这种方法可以节省大量时间和资源。

小宝哥Code的专栏 1285

游戏服务器与微服务交叉实践:确定性架构落地指南

在分布式系统与实时交互场景中,‘确定性’是保障服务稳定与体验一致的核心技术诉求。本文从游戏服务器对延迟敏感、状态强一致、故障零容忍的硬性约束切入,解析微服务在高并发脉冲流量、跨服务状态协同、客户端智能路由等典型挑战下的真实应对逻辑。结合Unity客户端服务发现、gRPC超时熔断、Consul+OpenTelemetry链路追踪等可验证方案,揭示如何将‘理论微服务’转化为经受百万DAU考验的生产级架构。内容聚焦于开发者最常遭遇的‘凌晨三点问题’——如WebSocket黑屏、Loot服务线程阻塞、Combat接

ciyinzhi8788的博客 403

[Unity workflows] Unity 5.6.1f1 与 Docker 和 Bitrise 的持续集成

CI 过程在软件开发的大多数领域都广为人知,尽管很难应用于 Unity 项目。那么是什么让 CI 难以在 Unity 项目中实施呢?多平台支持。当然,Unity 在营销方面做得很好,因为它坚持同时为多个平台开发是多么容易。然而,在实践中,它并不像“一键启动”那么简单。每个平台都有自己的工作流程,必须单独考虑(尤其是 iOS)。有限的命令行支持。Unity 提供了用于构建的 CLI;理论上对于 headless 系统来说非常棒的功能。但是,它往往会破裂,并且没有很好的文档记录。

unity尧明的博客 647

M1 Mac mini:ARM桌面开发范式的起点

ARM架构已从移动终端延伸为现代计算的通用底座,其核心优势在于SoC级高度集成与能效比突破。依托统一内存、Rosetta 2动态翻译和原生ARM64生态,M1 Mac mini实现了跨平台开发、iOS真机调试、ARM Linux容器运行等关键工作流的物理压缩。它并非x86的替代品,而是以低功耗、静音、高集成度重构了开发者对‘工作站’的定义——尤其在嵌入式、IoT、边缘计算及跨端应用开发场景中,成为可触达的ARM原生实践入口。热词如‘ios打包’‘arm交叉编译’正快速向‘原生ARM构建’收敛,标志着开发范式

weixin_34007886的博客 478

Aedifex:开源对话式建筑编辑器,让AI成为本地化协理建筑师

建筑信息模型(BIM)本质是参数化对象与规范约束的有机集合,而非简单几何体;其核心挑战在于设计意图、工程规范与三维几何之间的高维耦合。传统CAD/BIM工具依赖菜单式操作,难以承载空间指代、多目标权衡与动态合规检查等自然语言所隐含的语义。Aedifex通过对话式驱动架构,将LLM作为语义路由器嵌入OpenCascade重构的几何内核,并构建双向约束图谱实现规范-构件实时映射,使‘改幕墙K值’‘加光伏倾角’等指令可自动触发结构校验、节能计算与图纸同步更新。它强调本地运行、数据不出设备,兼容IFC与glTF标准

weixin_34198762的博客 344

记一次基于开源微信机器人实现的Unity构建完成通知(两种实现方法 Docker 和 Hook)

构建事件触发,然后调用类库Api通知到本地系统,由本地的机器人系统给指定的目标微信名称的账号发送消息。

ShowMe 889

docker-unity:Docker Unity映像

MTB游戏-Docker Unity映像

vue项目结合unity webgl通信(亲身实践 Unity2022.3版本)

在参考网上众多资料后,终于将Vue与Unity Webgl双向通信的功能完成。在此过程中遇到了很多问题,故记录下整体流程。1.unity端实现一个jslib文件预定义函数作为桥接。2.c#使用DllImport引入和调用预定义的函数。3.web端使用js定义被调用函数。1.Unity Webgl程序嵌入vue1.Unity -> vue通信2.vue -> Unity通信。

蓝紫色的忧郁的博客 1万+

linux-Unity3D的Docker映像

Unity 3D 的 Docker 映像

docker:用于Unity的一系列CI专用docker映像。 取代著名的gablerouxunity3d图像

适用于Unity的Docker映像 (不隶属于Unity Technologies) CI适用于Unity的CI专业Docker映像的来源,可供所有人免费使用。 请找到我们的以获取任何相关。 基础 有关基本映像的用法,请参见。 枢纽 有关集线器映像的用法,请参见。 编辑 有关器映像的用法,请参见。 社区 随时加入我们 并与社区互动。 贡献 要做出贡献,请在同意我们并阅读后,查看。 执照

x11docker 完全指南:在 Docker 与 podman 容器中安全运行 GUI 桌面应用

本文围绕开源项目 x11docker 的核心论文文档([paper.md](https://link.gitcode.com/i/9fe66b524ff366f816354ec8fe8e11a0))展开,系统讲解它如何填补 Docker/podman 缺少显示服务器的空白,让用户可以在 Linux 容器中运行图形界面(GUI)应用乃至完整桌面环境,并聚焦于容器与宿主机之间的安全隔离。读完本文,你将

gitblog_00335的博客 485

从Cartographer3D到LIO-SAM:主流3D激光SLAM算法怎么选?一份给机器人工程师的实战避坑指南

本文深入探讨了从Cartographer3D到LIO-SAM等主流3D激光SLAM算法的选型策略,为机器人工程师提供实战避坑指南。通过对比不同算法在传感器配置、环境特性和计算资源等方面的表现,帮助开发者根据项目需求选择最优方案,并分享传感器标定、资源优化等实用技巧。

weixin_27310985的博客 154

GLSL pow() 幂函数完全指南:The Book of Shaders 中的塑形、缓动与曲线构造

`pow()` 是 GLSL(OpenGL Shading Language)内置的指数族核心函数之一,用于将第一个参数(底数 `x`)按第二个参数(指数 `y`)求幂。它不只是返回 `x^y` 的数学结果——在着色器编程中,`pow()` 是构造曲线、设计缓动(easing)、塑造明暗过渡与生成程序化纹理的"数据针灸"工具。本文以 The Book of Shaders 仓库中 [glossar

gitblog_00575的博客 448

存储关键技术·RAID技术·RAID2.0·华为RAID2.0+·华为服务器·云计算

一.RAID基本概念 常见的RAID级别组合RAID级别 二.RAID的数据组织形式 三.RAID的数据保护功能 方法一:镜像方法二:奇偶校验算法(XOR) 四.RAID热备和重构 1.热备(Hot Spare)的定义2.热备的分类3.热备的工作原理 五.RAID 2.0技术 1.RAID 2.02.RAID 2.0+3.华为RAID 2.0+ 六.RAID 2.0+块虚拟化技术 1.什么会出现RAID 2.0+技术?2.什么是RAID 2.0?3.RAID 2.0+的原理是什么?

qq_47480932的博客 3320

苏宁易购手机行情比价系统:构建一个完整的Python爬虫实战指南

在当今数字化时代,智能手机已成为人们生活中不可或缺的一部分。随着各大手机品牌每年推出多款新品,消费者面临着越来越多的选择。然而,不同电商平台、不同时间段的价格波动使得消费者很难把握最佳购买时机。苏宁易购作为国内领先的电商平台之一,拥有丰富的手机商品信息和价格数据。本文将带领读者构建一个完整的苏宁易购手机行情比价系统,帮助消费者实时掌握手机价格动态。

2201_76125261的博客 207

Ollama v0.32.15本地部署指南:安装、API调用与显存优化

本地大模型推理正成为开发者和企业内网部署的重要趋势,它能在数据不出域的前提下提供智能对话与文本生成能力。Ollama作为最流行的本地模型管理工具,通过简洁的命令行和OpenAI兼容HTTP接口,大幅降低了模型拉取、运行和集成的门槛。其核心原理是将量化后的开源模型加载至CPU或GPU,并通过统一API对外提供服务,支持多平台部署与批量任务调度。在工程实践中,合理规划显存占用、配置模型下载镜像、优化并发参数,能显著提升推理稳定性。本文以Ollama v0.32.15版本为背景,系统梳理从环境准备、安装启动、模型

weixin_34174422的博客 358

HDMI接口及其在编程中的应用

在编程中,我们可以使用HDMI接口来控制和管理连接到计算机的HDMI设备。本文将介绍HDMI接口的基本原理以及如何在编程中使用HDMI接口。在编程中,我们可以使用HDMI接口来控制和管理连接到计算机的HDMI设备。本文介绍了HDMI接口的基本原理,并提供了使用Python编程语言和相关库实现HDMI接口应用的示例代码。我们可以使用编程语言提供的音频库来生成和播放音频,并将其通过HDMI接口输出到连接的设备上。我们可以使用编程语言提供的音频库来生成和播放音频,并将其通过HDMI接口输出到连接的设备上。

CodeByte的博客 802

Mac Mini M5开发者指南:性能预期、升级决策与开发环境优化

Apple Silicon架构作为苹果自研芯片技术的核心突破,通过统一的内存架构和异构计算设计,实现了CPU、GPU和神经网络引擎的高效协同。其技术价值在于为开发者提供了强大的本地计算能力,显著提升了编译效率、机器学习工作流和跨平台开发体验。在移动应用开发、后端服务、数据科学等应用场景中,Apple Silicon的持续演进直接影响开发工具链的选择和工作效率。基于M5芯片的预期技术规格,开发者需要理性评估性能提升对Xcode编译、Docker容器部署等具体开发任务的实际影响,从而制定合理的设备升级策略和环境

dianchaozong3657的博客 432

116、影像质量主观评价方法论:标准场景与专家判读

本文探讨了影像质量主观评价的方法论,强调标准场景构建和专家判读体系的重要性。作者基于15年行业经验指出,仅靠客观指标无法保证观感质量,提出四类标准场景(灰阶、肤色、纹理、动态)的构建原则和四种专家判读维度(通透性、干净度、自然感、流程化)。文章揭示了主观评价中的常见误区,包括光源单一性、个人判读偏差、显示设备影响等,并建议建立多专家交叉验证机制和主观评价数据库。最后强调主观评价是可标准化的专业技术,需要将人眼感知转化为可追溯的技术参数。

sundong_81的博客 38

Docker:安装Apache Pulsar 消息队列的详细指南

本文详细介绍了Apache Pulsar的Docker化安装部署方法,包括单节点Pulsar服务和管理界面Pulsar Manager的安装配置。通过Docker命令快速搭建Pulsar环境,并演示了租户和命名空间的基础管理操作。同时提供了Spring Boot项目与Pulsar集成的完整方案,从依赖配置到客户端初始化,为开发人员构建实时消息系统提供实用参考。

木头 2209

Godot跨平台部署全流程解析:从开发到发布的实战指南

跨平台开发是现代游戏与应用开发的核心需求,旨在实现一次编写、多端运行,以降低开发成本并扩大用户覆盖。其原理在于通过抽象底层系统差异,构建统一的运行时环境与资源包。这项技术的核心价值在于提升开发效率,确保应用在不同操作系统和设备上拥有一致的体验。在游戏开发、工具软件及教育应用等场景中尤为关键。Godot引擎通过其架构设计与导出模板系统,高效实现了这一目标,其资源打包与平台特定配置流程是确保成功部署的【关键环节】。开发者需掌握从环境配置、导出预设到签名分发的完整【工作流】,方能应对各平台的独特要求,最终交付高质

weixin_33694620的博客 532

FreeRTOS系统从入门到精通万字保姆级教程

例如,在基于ARM的硬件平台上,可能需要实现针对ARM处理器的上下文切换代码,并确保FreeRTOS能够正确地响应和处理ARM架构的中断。需要注意的是,在删除任务之前应确保任务已经完成了其所有重要的工作,并且没有其他的任务依赖于它,以避免数据丢失或系统不稳定。任务的优先级设定是其中的关键环节。在复杂的系统中,可能会有大量的任务需要同时运行,而这些任务的重要性和紧急程度各不相同。这通常包括创建初始任务(这些任务将负责系统的初始化和后续任务的调度)、设置系统时钟(以确保任务的准时调度和延时功能的正确性)等。

大模型大数据攻城狮的专栏 2069

同为ARM为何不互通?指令集、ABI与系统API的底层真相

在计算机体系结构中,指令集架构(ISA)是CPU与软件之间的契约,它定义了二进制指令、寄存器与内存寻址方式。然而,仅靠指令集相同,并不能保证软件跨平台运行。真正决定兼容性的,还有操作系统层面的ABI、系统调用接口以及系统框架。ABI涵盖了可执行文件格式、动态链接方式、C/C++运行时甚至语言运行时,这些在不同操作系统间各不相同。系统调用则是应用与内核的交互协议,Linux与XNU语义迥异。理解这些层次,对跨平台开发、ARM服务器部署以及架构适配至关重要。当两个设备同样基于ARM,但系统生态截然不同,二进制兼

weixin_34059951的博客 323

UNet改进(47):Deformable Convolution在UNet中的集成与应用

本文提出了一种可变形U-Net(DeformableUNet)结构,通过在U-Net的双卷积模块中集成可变形卷积(DeformConv2d)来提升模型对物体形变和复杂结构的建模能力。传统卷积受限于固定感受野,而可变形卷积通过动态调整采样位置,能更好地适应不规则形状。实现中,在DoubleConv模块的第二个卷积层替换为可变形卷积,同时保持第一层为标准卷积以确保稳定性。实验表明,该方法在保持参数量基本不变的情况下,显著提升了分割精度(mIoU从0.712提升到0.743)。

2501_91516851的博客 201

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Madeira 总被 iOS 杀进程?GetMoreRam 免越狱注入 increased-memory-limit 内存权限完整教程

游戏正打到关键处,屏幕一黑直接回桌面,没有任何提示,重进又得从头再来。连玩两次都是这样,问题大概率不是你的操作。 别急着怀疑配置,大概率是 iOS 的内存保镖 Jetsam 出手了:它盯着每个 App 的物理内存占用,一旦超过阈值就直接终止进程。而 Madeira 这类跑 x86-64 Windows 游戏的应用,内存占用天然比一般 App 高得多,很容易越线。 给 Madeira 补上 `i

gitblog_00213的博客 132

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: c#接口_抽象类_多态学习
下一篇: window下MySQL安装(一) 安装教程
先生沉默先
博客等级 码龄6年 920粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值