基于docker images 搭建2048游戏与部署nginx服务

通过Docker搭个游戏——疯狂大陆(Pkland) Docker游戏项目——疯狂大陆(PKland) 阅读详情

一.安装docker

从官网先得到安装包和依赖包

#安装包
docker-ce-18.06.1.ce-3.el7.x86_64.rpm
#依赖包
container-selinux-2.21-1.el7.noarch.rpm
libsemanage-2.5-8.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
pigz-2.3.4-1.el7.x86_64.rpm
policycoreutils-2.5-17.1.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm

安装docker

[root@foundation66 docker]# yum install -y *

查看网络接口,发现多了一个docker0

[root@foundation66 docker]# ip addr

在这里插入图片描述

启动docker

systemcrtl start docker

查看系统信息,版本信息

docker info
docker version

在这里插入图片描述

在这里插入图片描述

二.搭建2048游戏

从官网下载game.2048tar
导入镜像

docker load -i game2048.tar

在这里插入图片描述
查看镜像

docker images

在这里插入图片描述
创建并运行容器

创建并运行game容器; -d表示打入后台,--name表示容器名称,-p表示端口映射
docker run -d --name game -p 80:80 game2048
查看所有容器状态
docker ps -a
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
    ef5a1c1640e4        game2048            "/bin/sh -c 'sed -i …"   3 days ago          Up 13 minutes       443/tcp, 0.0.0.0:8080->80/tcp   game
查看正在运行的容器进程
docker ps 
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
    ef5a1c1640e4        game2048            "/bin/sh -c 'sed -i …"   3 days ago          Up 16 minutes       443/tcp, 0.0.0.0:80->80/tcp   game

在这里插入图片描述

测试:
在这里插入图片描述

三.部署nginx

访问阿里云获取镜像加速器的方法
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
配置镜像加速器

 cd /etc/docker/
 ls
certs.d  key.json

修改配置文件

vim daemon.json

{
  "registry-mirrors": ["https://2izot27h.mirror.aliyuncs.com"]
}

在这里插入图片描述重载守护进程

systemctl daemon-reload

重启docker服务

 systemctl restart docker

下载nginx镜像
在这里插入图片描述
查看镜像

docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              881bd08c0b08        8 days ago          109MB
game2048            latest              19299002fdbe        2 years ago         55.5MB
docker images | grep nginx
nginx               latest              881bd08c0b08        8 days ago          109MB

创建并运行vm1容器

docker run -d --name vm1 nginx

查看正在运行的容器进程

 docker ps 

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
7098faa5f638        nginx               "nginx -g 'daemon of…"   14 seconds ago      Up 12 seconds       80/tcp              vm1

查看容器详情(获取容器元数据)

docker inspect vm1

在这里插入图片描述测试:
在网页山上输入: 172.18.0.2(容器详情中的IPAddress) 即可访问nginx的默认发布页面

在这里插入图片描述
更改发布页面
第一种方法:

编写发布页面
 vim index.html
 cat index.html 
<h1>westos.org</h1>
拷贝;/usr/share/nginx/html为nginx的默认发布目录
docker cp index.html vm1:/usr/share/nginx/html

测试:
在这里插入图片描述
第二种方法:
先删除之前的vm1容器

docker rm -f vm1

重新创建并运行vm1容器,-v表示目录映射

 docker run -d --name vm1 -v /tmp/docker/:/usr/share/nginx/html nginx

编写发布页面

cd /tmp/docker/
 vim index.html
cat index.html 
<h1>westos.org</h1>
<h1>westos.org</h1>
<h1>westos.org</h1>

测试:
在这里插入图片描述

Docker 1(docker 的安装部署,docker镜像的分层结构,docker commit 与dockerfile,镜像加速,docker部署游戏2048,docker容器化部署nginx) 1.Docker的安装和部署: 1-1:yum源的配置: docker 需要重新配置新的虚拟机; 配置新的docker源(阿里云的): vim docker.repo [docker] name=docker-ce baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable gpgcheck=0 使用阿里云配置新的centos源解决安装的依赖性: curl -o /etc/yum.repos.d/CentOS-Base 阅读详情

相关推荐

【好玩的游戏项目】使用Docker快速部署属于你的RPG网页小游戏

【好玩的游戏项目】使用Docker快速部署属于你的RPG网页小游戏

jks212454的博客 5574

Docker游戏Dos小游戏,一个web版的dos游戏库

今天的教程里面收集了近2000款金典dos小游戏,做了一个web版的docker镜像

JAVA拾贝 9052

玩转Docker小游戏项目系列:Docker部署单人冒险小游戏

Docker部署单人冒险小游戏

jks212454的博客 1262

利用docker image搭建2048游戏与部署Nginx服务

1.安装docker 安装包: container-selinux-2.21-1.el7.noarch.rpm docker-ce-18.06.1.ce-3.el7.x86_64.rpm libsemanage-2.5-8.el7.x86_64.rpm libsemanage-python-2.5-8.el7.x86_64.rpm pigz-2.3.4-1.el7.x86_64.rpm polic...

lilygg的博客 940

【好玩的经典游戏】Docker环境下部署RPG网页小游戏

【好玩的经典游戏】Docker环境下部署RPG网页小游戏

jks212454的博客 2373

MCP协议桥接AdsPower:AI原生时代的浏览器自动化新范式

浏览器自动化是Web开发和数据采集领域的核心技术,其核心原理是通过程序控制浏览器内核执行页面导航、元素交互和数据提取等操作。传统方案如Selenium和Playwright虽功能强大,但在管理多实例、指纹隔离等复杂场景下,配置和维护成本较高。随着AI原生应用的发展,Model Context Protocol(MCP)作为一种标准化协议,为AI助手与外部工具间的通信提供了统一接口,显著提升了自动化流程的构建效率和自然语言交互能力。通过MCP Server桥接AdsPower指纹浏览器的本地API,开发者可将

weixin_30552811的博客 295

Docker搭建2048游戏,搭建Nginx服务器,Docker数据卷管理

一,搭建2048小游戏: [root@foundation92 Desktop]# docker load -i game2048.tar #导入镜像 [root@foundation92 Desktop]# docker run -d -p 8000:80 --name game game2048 #运行小游戏,并将容器的80端口映射到本机的8090端库执行 在本机浏览器执行: ...

ly的博客 1384

HDMI与DisplayPort混搭方案:如何用Xilinx Video PHY Controller实现多协议视频接口转换

本文详细解析了如何利用Xilinx Video PHY Controller IP核实现HDMI与DisplayPort协议转换,涵盖混合视频接口架构设计、GT收发器动态重配置策略及跨协议时钟域处理方案。通过实战案例和配置技巧,帮助开发者构建高性能多协议视频转换系统,适用于医疗影像、工业控制等场景。

weixin_30776273的博客 447

Docker容器搭建,及简单应用

Docker容器的简介已经在前面的博客提到 本篇博客讲解Docker的安装和基本指令用法 一、 Docker的部署与安装 安装docker和相关依赖性: [root@foundation19 docker]# ls container-selinux-2.21-1.el7.noarch.rpm docker-ce-18.06.1.ce-3.el7.x86_64.rpm libsemanag...

Treasured ——的博客 1795

手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南

本文提供了手动安装SeuratData包中pbmc3k数据集的详细步骤与避坑指南。针对国内用户网络不稳定导致自动下载失败的问题,文章核心介绍了如何从错误信息中获取下载链接,使用浏览器或下载工具完成手动下载,并通过指定本地文件路径和参数在R中成功安装。该方法同样适用于SeuratData包中的其他数据集,是单细胞分析入门的必备生存技能。

weixin_29054399的博客 183

云桌面如何部署?云桌面系统方案部署详细教程

云桌面作为一种比较新的技术工具,核心解决的场景是方便设计师的灵活办公,本身技术就是非常的灵活性,所以在安装部署方面青椒云也做到了十足的灵活。

2301_79113726的博客 1633

Docker(3)具体的安装部署过程和一些简单应用(2048小游戏,nginx,ubuntu)

1.实验环境 一台rhel7.3的虚拟机server1和一台rhel7.3的物理机 主机信息 作用 server1(172.25.70.1) 搭建docker 物理机(172.25.70.250) 测试以及给server1提供资源 (1)为了保证我们的实验环境是纯净的,先在真机当中创建一个全新的快照并且开启 (2)用真机ssh连接server1,这样操作起来更方...

yunyuzhu的博客 495

STC8H8K64U ADC采样实战:从蜂鸣器控制到电压测量(附完整代码)

本文以STC8H8K64U单片机为核心,通过两个实战案例详细讲解ADC采样的应用。首先介绍如何利用ADC采样值动态控制蜂鸣器响度,实现模拟PWM效果;其次深入探讨高精度外部电压测量的方法,包括硬件连接、两点校准技巧以及软件滤波,旨在帮助开发者从理论到实践全面掌握ADC功能。

weixin_29159441的博客 558

企业版Docker<3>——安装部署和一些简单应用(2048小游戏,nginx,ubuntu)

以下所有的实操都是在redhat7.3上 1.实验环境 一台rhel7.3的虚拟机server1和一台rhel7.3的物理机 主机信息 作用 server1(172.25.70.1) 搭建docker 物理机(172.25.70.250) 测试以及给server1提供资源 (1)为了保证我们的实验环境是纯净的,先在真机当中创建一个全新的快照并且开启 #物理机 ...

AmourHaiti的博客 237

WPS占用C盘空间解决方案与优化技巧

办公软件在长期使用过程中会产生大量缓存和历史文件,这些文件往往隐藏在系统目录中,导致磁盘空间被无声占用。以WPS为例,其版本历史备份、云同步缓存和模板库是主要空间占用源。通过分析文件存储机制,可以定位到具体的缓存路径,如AppData目录下的Kingsoft文件夹。针对这一问题,有效的解决方案包括手动清理、自动化脚本和注册表优化。对于需要持续监控的场景,可以结合PowerShell脚本和任务计划实现自动化管理。在实际应用中,这些技术不仅适用于WPS,也可迁移到其他办公软件的空间优化中,是每位IT运维人员和高

weixin_30788239的博客 455

SmartFusion从FPGA到ARM(一)——MSS_GPIO点灯

文章目录前言GPIO点灯 前言 GPIO点灯

whik1194的博客 5270

Docker学习(3)——安装部署过程及简单应用

一、 Docker的部署与安装 1.安装docker和相关依赖性 [root@server1 docker]# ls container-selinux-2.21-1.el7.noarch.rpm docker-ce-18.06.1.ce-3.el7.x86_64.rpm libsemanage-2.5-8.el7.x86_64.rpm libsemanage-python-2.5-8.el7.x...

meltsnow的博客 587

(第78天)DB RU 补丁升级:19C 升级到 19.22

目前 Oracle 19C 是最新的稳定支持的版本,生产环境中使用的越来越多。当然,随着客户使用量的增多,自然无可避免的产生了很多 BUG,Oracle 每季度都会发布一个 RU 补丁来修复当前季度所产生的一些重要 BUG 补丁。作为 DBA,DB 补丁修复必然是需要掌握的一项技能。本文将介绍如何将数据库升级到最新的 RU 版本。

LuciferLiu_DBA 843

docker(3)——具体创建(nginx以及一些其他的应用)

1 实验环境 (1)先封装一台rhel7.6的虚拟机,对真实物理机(rhel7.6)进行快照 (2)通过快照进行安装虚拟机server1(172.25.254.1) 注:真实物理机已经关闭了防火墙和selinux,并开启了共享yum源 小技巧: 真机与虚拟机ping 不通,检查桥接 真机可以上网,虚拟机不可以,检查真机的路由与防火墙伪装功能 (3)用ssh连接server1,并检查yu...

qq_42024433的博客 193

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

docker工具之搭建2048游戏、镜像仓库、数据卷的管理、4种网络模式

通过集群来部署容器 一、Docker简介 Docker是什么? Docker的英文本意是“搬运工”,在程序员的世界里,Docker搬运的是集装箱(Container),集装箱里装的是任意类型的App,开发者通过Docker可以将App变成一种标准化的、可移植的、自管理的组件,可以在任何主流系统中开发、调试和运行。 说白了,docker是一种用了新颖方式实现的轻量级虚拟机,类似于VM,但是在...

love_sunshine_999的博客 2429

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Linux系统Docker学习(1)

一、什么是docker Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。 而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux 容器不是模拟一个完整的操作系统, 而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。 对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统...

Garfield777的博客 626

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Docker 容器与 swarm 集群实战——docker容器的安装、常用指令、简单应用的搭建(http、nginx)

一、Docker 容器的安装 1.安装docker,docker 容器软件包具有依赖性 注意:此处采用yum仓库解决,安装18.06版本 [root@server1 yum.repos.d]# yum install -y docker-ce-18.06.1.ce-3.el7.x86_64 [root@server1 ~]# systemctl start docker [root@serve...

weixin_44209804的博客 460

Docker(2)--安装部署及简单应用的添加

1.部署docker的具体操作 1>在阿里云上下载docker镜像 yum install wget -y cd /etc/yum.repos.d/ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo vim docker-ce.repo #编辑文件,只留下稳定版本的内容 2>下载...

qq_45594312的博客 841

Docker的安装部署以及私有仓库的搭建

安装 网络下载所需要的额外安装包 配置成本地的yum仓库 createrepo /var/www/html/docker 配置yum源 [docker] name=docker baseurl=http://172.25.33.250/docker gpgcheck=0 安装docker查看依赖 yum install docker-ce bash-* -y 开启docker syste...

zhangyu_sing的博客 330
上一篇: 剖析Docker(简介与常用命令)
下一篇: 利用docker registry搭建私有仓库(自签发证书+登陆认证)
小杨118709
博客等级 码龄8年 141粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值