docker容器应用学习

《容器与容器云》学习--搭建第一个Docker应用栈 docker的设计理念是希望用户能够保证一个容器只运行一个进程,即只提供一种服务。然而对于用户而言,大多数时候单一容器是无法满足需求的;通常来说,需要利用多个容器,分别提供不同的服务,并在不同的容器间互连通信,以形成一个docker集群,来完成特定的功能需求。 应用栈结构 HAproxy是负载均衡代理节点;redis的非关系型数据库,这里由一个主数据库节点和两个从数据库节点组成;APP1和APP2是应用节点,本例中是使用python语言和Django架构设计的访问数据库的基础Web应用。 获取应用栈中各节 阅读详情

学习目标:

掌握Docker基础知识,能够理解Docker镜像与容器的概念
完成Docker安装与启动
掌握Docker镜像与容器相关命令
掌握Tomcat Nginx 等软件的常用应用的安装
掌握docker迁移与备份相关命令
能够运用Dockerfile编写创建容器的脚本
能够搭建与使用docker私有仓库

什么是docker?

网上很多资料,不做介绍了。

Docker安装与启动

安装Docker Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般 Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持 更新最新的一些补丁包的。 由于我们学习的环境都使用的是CentOS,因此这里我们将Docker安装到CentOS 上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要 安装其他很多的环境而且Docker很多补丁不支持更新。

(1)yum 包更新到最新
sudo yum update
(2) 移除docker旧版本(如果有的话)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
(3)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是 devicemapper驱动依赖的
sudo yum install ‐y yum‐utils device‐mapper‐persistent‐data lvm2
(4)设置yum源为阿里云
sudo yum‐config‐manager ‐‐add‐repo http://mirrors.aliyun.com/docker‐ ce/linux/centos/docker‐ce.repo
(5)更新yum缓存
yum makecache fast
(6)安装docker
sudo yum install docker‐ce
(7)安装后查看docker版本
docker ‐v
安装后后台启动
sudo systemctl start docker

(8)安装docker-compose
cd /usr/local/src
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-(uname−s)−(uname -s)-(uname−s)−(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

镜像下载很慢解决办法

##使用阿里云镜像加速器
##使用阿里云镜像加速器
[root@localhost ~]# mkdir -p /etc/docker
[root@localhost ~]# tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“http://f2d6cb40.m.daocloud.io”]
}
EOF
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

设置ustc的镜像

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc 的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正 的公共服务。 https://lug.ustc.edu.cn/wiki/mirrors/help/docker

编辑该文件: vi /etc/docker/daemon.json

在该文件中输入如下内容:
{“registry‐mirrors”: [“https://docker.mirrors.ustc.edu.cn”] }

Docker的启动与停止
systemctl命令是系统服务管理器指令
启动docker:
systemctl start docker
停止docker:
systemctl stop docker
重启docker:
systemctl restart docker
查看docker状态:
systemctl status docker
开机启动:
systemctl enable docker
查看docker概要信息
docker info
查看docker帮助文档
docker ‐‐help

常用命令

镜像相关命令
查看镜像
docker images
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小 这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

搜索镜像

如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

拉取镜像

拉取镜像就是从中央仓库中下载镜像到本地
docker pull 镜像名称
例如,我要下载centos7镜像
docker pull centos:7
删除镜像
按镜像ID删除镜像
docker rmi 镜像ID
删除所有镜像
docker rmi docker images ‐q

容器相关命令

查看容器
查看正在运行的容器
docker ps
查看所有容器
docker ps –a
查看最后一次运行的容器
docker ps –l
查看停止的容器
docker ps ‐f status=exited

创建与启动容器

创建容器常用的参数说明:
创建容器命令:docker run

-i:表示运行容器 -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分 配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使 用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共 享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会 自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做 多个端口映射 (1)交互式方式创建容器 docker run ‐it ‐‐name=容器名称 镜像名称:标签 /bin/bash 这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态 退出当前容器 exit (2)守护式方式创建容器: docker run ‐di ‐‐name=容器名称 镜像名称:标签 登录守护式容器方式: docker exec ‐it 容器名称 (或者容器ID) /bin/bash 3.2

停止与启动容器

停止容器: docker stop 容器名称(或者容器ID)
启动容器: docker start 容器名称(或者容器ID)
文件拷贝 如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录

目录挂载

我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可 以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:
docker run ‐di ‐v /usr/local/myhtml:/usr/local/myhtml ‐‐name=mycentos3 centos:7 如果你共享的是多级的目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 – privileged=true 来解决挂载的目录没有权限的问题
查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器ID)
也可以直接执行下面的命令直接输出IP地址
docker inspect ‐‐format=’{{.NetworkSettings.IPAddress}}’ 容器名称(容器ID)

删除容器

删除指定的容器:
docker rm 容器名称(容器ID)

迁移与备份

容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit mynginx mynginx_i
镜像备份
我们可以通过以下命令将镜像保存为tar 文件

docker save ‐o mynginx.tar mynginx_i

镜像恢复与迁移

首先我们先删除掉mynginx_img镜像 然后执行此命令进行恢复
docker load ‐i mynginx.tar
-i 输入的文件 执行后再次查看镜像,可以看到镜像已经恢复

Dockerfile

什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个 新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新 的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。

常用命令

FROM image_name:tag
定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name
声明镜像的创建者
ENV key value 设置环境变量 (可以写多条)
RUN command 是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件, 将会在复制后自动解压
COPY source_dir/file dest_dir/file 和ADD相似,但是如果有压缩文件并不能解压 WORKDIR path_dir 设置工作目录

使用脚本创建镜像

步骤:
(1)创建目录 mkdir –p /usr/local/dockerjdk8
(2)下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中 的/usr/local/dockerjdk8目录
(3)创建文件Dockerfile vi Dockerfile
#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk‐8u171‐linux‐x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVAH​OME/lib/dt.jar:JAVA_HOME/lib/tools.jar:JREHOME/lib:JRE_HOME/lib:JREH​OME/lib:CLASSPATH ENV PATH JAVAHOME/bin:JAVA_HOME/bin:JAVAH​OME/bin:PATH
(4)执行命令构建镜像 docker build ‐t=‘jdk1.8’ . 注意后边的空格和点,不要省略 (5)查看镜像是否建立完成 docker images 7 Docker私有仓库

私有仓库搭建与配置

(1)拉取私有仓库镜像(此步省略)
docker pull registry
(2)启动私有仓库容器
docker run ‐di ‐‐name=registry ‐p 5000:5000 registry
(3)打开浏览器 输入地址http://192.168.184.141:5000/v2/_catalog看 到 {“repositories”:[]} 表示私有仓库搭建成功并且内容为空
(4)修改daemon.json
vi /etc/docker/daemon.json
添加以下内容,保存退出。
{“insecure‐registries”:[“192.168.184.141:5000”]}
此步用于让 docker信任私有仓库地址
(5)重启docker 服务 systemctl restart docker

镜像上传至私有仓库

(1)标记此镜像为私有仓库的镜像
docker tag jdk1.8 192.168.184.141:5000/jdk1.8
(2)再次启动私服容器
docker start registry
(3)上传标记的镜像
docker push 192.168.184.141:5000/jdk1.8

Win11下CH340串口识别失败的终极排查指南:从驱动更新到硬件电路检查 本文提供了Windows 11系统下CH340串口芯片识别失败的全面排查指南。从驱动更新、系统设置等软件层面入手,逐步深入到USB线缆、电源测量等硬件连接检查,并重点剖析了硬件设计细节,如电源退耦电容容值对设备描述符请求的关键影响,最终帮助开发者系统性地定位并解决识别难题。 阅读详情

相关推荐

粒子群算法实战:用Matlab解决旅行商问题(TSP)的完整代码解析

本文提供了使用粒子群算法解决旅行商问题的完整Matlab实战指南。通过将连续空间的粒子群算法进行离散化改造,采用基于交换序的策略来更新粒子位置与速度,并给出了从问题定义、数据结构设计、核心函数实现到主迭代循环的详细代码解析。文章还探讨了参数调优、性能优化及处理复杂TSP变体的进阶思路,为物流规划、路径优化等领域的工程应用提供了可直接复用的解决方案。

m2n3o4p5的博客 350

Docker容器化学习

01学习目标 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关明兰 掌握Tomcat Nginx等软件的常用应用的安装 掌握docker迁移与备份相关命令 能够运用Dockerfile编写创建容器的脚本 能够搭建与使用docker私有仓库 02什么是Docker 1.什么是虚拟化 一种资源管理技术,将计算机的各种实体资源予以抽象、转换后呈现出来,打破实体结构间的障碍,使用户可以比原来的组态更好的方式来应用这些资源。虚拟化技术种类很多,

weixin_39795049的博客 310

声发射传感器的工作原理是什么?

介绍声发射传感器的工作原理。

qq_39948394的博客 9246

Docker容器化技术笔记

学习目标 掌握Docker基础知识,能够理解Docker镜像与容器概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx等软件的常用应用的安装 掌握docker迁移与备份相关命令 能够运用Dockerfile编写创建容器脚本 能够搭建与使用docker私有仓库 Docker安装 官方建议使用Ubuntu操作系统,由于我的服务器是Centos7.X,我...

qq_45455361的博客 375

从数学到机床:RTCP背后的几何变换与工业实现

本文深入解析RTCP(Rotary Tool Center Point)技术在五轴数控加工中的核心作用,通过几何变换与运动学原理实现刀尖点跟随,确保加工精度。从数学基础到工业实现,详细探讨了算法架构、机床结构适配及精度保障方法,为数控系统开发和高效加工提供关键技术支撑。

jump7的博客 258

Python爬虫实战:全网政府招标信息采集与整合

本文详细介绍了如何使用Python构建一个完整的政府招标信息爬虫系统,涵盖了从数据采集、解析、存储到质量监控的全流程。多源采集:支持多个地方政府网站的同时采集智能解析:自动适应不同网站结构,智能提取关键信息异步高效:使用异步编程提高采集效率反爬应对:内置多种反爬虫应对策略数据质量:完善的数据清洗和质量监控机制易于扩展:模块化设计,便于添加新的数据源。

2201_76125261的博客 1380

Docker容器化的机器学习应用

1.背景介绍 1. 背景介绍 机器学习(Machine Learning)是一种利用数据训练算法以便在没有明确程序的情况下进行预测或决策的技术。随着数据规模的增加和计算能力的提高,机器学习应用的范围不断扩大。然而,在实际应用中,机器学习模型的训练和部署过程中可能会遇到一些挑战,如环境依赖、版本控制、部署复杂性等。 Docker是一个开源的应用容器引擎,它可以用来打包应用及其依赖项,以便在任何...

AI天才研究院 497

【DRAM存储器四十三】LPDDR5介绍--寻址

简要说明LPDDR5 X16、x8 die的寻址

highman110的博客 966

Docker学习笔记:应用容器引擎(很详细)

一、Docker相关概念扫盲 二、Docker安装卸载与配置 三、Docker常用命令汇总 四、Docker操作详解 五、Docker容器数据卷 六、DockerFile 七、Docker部署实例 八、Docker 网络 九、Docker compose——容器互联技术 十、可视化面板...

2630

Fiori Elements Analytical List Page 标题区配置全攻略:从变体、过滤模式到 UI.KPI 的工程化落地

ALP标题区是Fiori Elements Analytical List Page的核心交互区域,承担变体管理、过滤模式切换、KPI展示等关键功能。本文系统解析了标题区的组成结构、可用能力及工程实现要点,包括:1)标题区包含过滤类型切换、全局KPI、变体管理等交互元素;2)详细说明视觉过滤与紧凑过滤的同步规则及实现方式;3)介绍OData V2下通过UI.KPI注解配置标题区KPI的方法;4)提供manifest.json配置示例和CDS注解写法。文章还对比了V2与V4版本的差异,为ALP开发提供实用指导

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 244

通用、可复用的 AI Skill 开发基本流程

-----name:唯一标识符(建议用领域-功能格式):自然语言描述触发条件(AI 依赖此判断是否激活)tags(可选):便于分类和搜索version:支持后续迭代步骤输出物1. 定范围触发场景描述2. 写元数据name3. 填内容结构化 Markdown 文件4. 做验证可运行 + 符合规范5. 去集成放入对应 IDE 目录6. 持续维护跟进框架更新通过这套流程,你不仅可以开发(Hooks 最佳实践)(原生 WebGL 优化)(Pandas/Numpy 高效写法)

lpfasd123的博客 721

通过容器化一个Python Web应用学习Docker容器技术

容器在软件开发、测试和部署环节应用的越来越广泛,那么测试人员应该如何掌握容器技术呢?应该掌握哪些基本的容器操作呢?本文通过容器化一个 Python Web 应用,来快速掌握 Docker...

Docker的专栏 625

DRM全解析 —— encoder详解(3)

DRM全解析 —— encoder详解(3)

phmatthaus的专栏 489

Docker学习(应用容器化)

应用容器化(Docker化) 完整的应用容器化过程主要分为以下几个步骤。 (1) 编写应用代码。 (2) 创建一个Dockerfile, 其中包括当前应用的描述、 依赖以及该如何运行这个应用。 (3) 对该Dockerfile执行docker image build 命令。 (4) 等待Docker将应用程序构建到Docker镜像中。 一旦应用容器化完成(即应用被打包为一个Docker镜像) ...

dreamLC1998的博客 426

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

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

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Docker容器学习梳理--应用程序容器环境部署

转:https://www.cnblogs.com/kevingrace/p/6425424.html 关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用。 如果我们需要在Docker环境下部署tomcat、redis、mysql、nginx、php等应用服务环境,有下面三种方法: 1 2 3 4 5...

qq_35845964的博客 2万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【开发工具 docker】值得学习的应用容器引擎docker安装

概述: Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker的应用场景 Web 应用的...

lomtom's Blog 1136

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

应用容器引擎之 docker 学习(1) ——基础知识篇

文章目录应用容器引擎之 docker 学习(1) ——基础知识篇1.什么是docker2.为什么要使用docker3.容器和虚拟机的区别4.Docker的优势5.Docker的三个基本概念1.Image Definition(镜像)2.容器3.仓库 应用容器引擎之 docker 学习(1) ——基础知识篇 1.什么是docker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以...

qq_36275923的博客 549

Docker基础学习——使用Compose编排多容器应用

一、前言 Docker compose 是docker容器编排的工具,定义和运行多个容器的应用,可以一条命令启动多个容器。 使用Compose 基本上分为三步: Dockerfile 定义应用的运行环境 docker-compose.yml 定义组成应用的各服务 docker-compose up 启动整个应用 二、安装Compose 直接从github下载即可,前提要先安装Docker,版本...

Hou_guang的博客 598

Spring系列学习之构建SpringBoot 的Docker容器应用

英文原文:https://spring.io/guides/gs/spring-boot-docker/ 目录 你要构建什么 你需要什么 如何完成本指南 Gradle构建 Maven构建 IDE构建 设置一个Spring Boot应用程序 应用容器化 使用Maven构建Docker镜像 使用Gradle构建Docker镜像 Push推送镜像之后 使用Spring Prof...

纸上得来终觉浅,绝知此事要躬行 586

Docker学习笔记03_容器的简单应用

执行docker pull training/webapp 下载一个简单的web应用镜像,并执行docker images查看 执行docker run -d -P training/webapp python app.py启动此容器 Ports这一列信息显示了容器里运行的webapp使用端口号 tcp 5000被映射到了主机的端口32770,这个端口号32770是随机生成,...

a630165326的博客 197

Docker学习(一)在Docker容器中部署一个基于TCP的简单Java应用——Windows

Docker学习(一)Docker入门、部署一个简单的基于TCP的Java应用——Windows目录环境准备安装Dcoker运行hello-world部署自己的java应用

free_main的博客 1731

Docker学习与应用(四)-容器数据卷

docker的理念回顾将应用和环境打包成一个镜像!数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!这就是卷技术!目录的挂载将我们容器内的目录,挂载到Linux上面!总结一句话:容器的持久化和同步操作!容器间也是可以数据共享的!

小孔靠得住的博客 1129

docker停止容器后配置_Docker学习—概念及基本应用 - chaney1992

1、Doker基本概念: Docker架构:  Docker使用客户端-服务器架构。Docker客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作  相关描述:概念说明Docker 镜像(Images)Docker 镜像是用于创建 Docker 容器的模板,比如 mysql、Nginx等Docker 容器(Container)容器是独立运行的一个或...

weixin_39569894的博客 114

容器云入门学习心得:基于 Docker 实现 Web 应用容器化部署实践

通过本次容器云课程的学习与实操,我真切体会到了容器技术 “一次构建,到处运行” 的核心优势。传统部署方式需要手动配置环境、处理依赖冲突,而容器化部署将应用与环境打包为镜像,在任意安装 Docker 的设备上都能直接运行,大幅降低了部署成本与环境差异带来的问题。目前我仅掌握了 Docker 基础部署操作,后续还会继续学习 Docker Compose 多容器编排、Kubernetes 容器集群管理等进阶内容,深入理解容器云的完整技术体系。

2501_94690713的博客 177

Docker学习笔记(二)使用容器部署一个Web应用

Docker中容器和镜像的概念 镜像和容器类比于面向对象编程中的类和对象的概念 下面这个例子是从网上下载一个 ubuntu:15.10的镜像(类), 然后使用该镜像在本地运行了一个容器(该类生成的实例), 这里的容器就相当于一个精简的ubuntu系统,我们在这个ubuntu系统里运行了命令 /bin/echo "Hello world" 一个例子 runoob@runoob:~$ docker ...

wck0617 1923
上一篇: 码农日志2020-05-26
下一篇: 码农日志2020-05-31
沐果果
博客等级 码龄10年 19粉丝 85原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值