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

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


### 使用 JsonUtility 在 Unity WebGL 平台上读取 JSON 数据 在 Unity 中,`JsonUtility` 是一个轻量级的序列化工具,用于处理 JSON 格式的字符串和 C# 对象之间的转换。对于 Unity WebGL 平台而言,使用 `JsonUtility` 的方法与其他平台相同。 为了更好地理解如何利用 `JsonUtility` 来解析 JSON 数据,在此提供一段简单的代码示例来展示这一过程: ```csharp using UnityEngine; public class JsonExample : MonoBehaviour { void Start() { string jsonString = "{\"name\":\"John\",\"age\":30,\"city\":\"New York\"}"; PlayerData playerData = JsonUtility.FromJson<PlayerData>(jsonString); Debug.Log($"Name: {playerData.name}, Age: {playerData.age}, City: {playerData.city}"); } } [System.Serializable] public class PlayerData { public string name; public int age; public string city; } ``` 这段代码创建了一个名为 `PlayerData` 的可序列化的类,并通过调用 `JsonUtility.FromJson<T>()` 方法将 JSON 字符串反序列化为该类型的实例[^1]。 需要注意的是,当应用程序作为 Docker 容器启动时,确保容器环境配置正确以便支持 WebGL 构建版本正常运行[^2]。然而这与具体使用 `JsonUtility` 解析 JSON 文件关系不大;主要关注点在于编写正确的脚本逻辑以及确保构建设置无误即可。 #### 注意事项 - 确认已启用开发构建选项并勾选调试模式,这样可以在浏览器控制台查看日志输出。 - 如果遇到任何问题,请检查浏览器开发者工具中的网络请求部分,确认资源加载情况良好。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值