目录
二、docker可视化管理概述
[2.1 什么是docker可视化管理](#2.1 什么是docker可视化管理)
[2.1.1 Docker可视化管理常用功能](#2.1.1 Docker可视化管理常用功能)
[2.2 为什么需要docker可视化管理工具](#2.2 为什么需要docker可视化管理工具)
[2.3 docker可视化工具带来的好处](#2.3 docker可视化工具带来的好处)
[3.1 Portainer](#3.1 Portainer)
[3.2 Rancher](#3.2 Rancher)
[3.2.1 Rancher功能特性](#3.2.1 Rancher功能特性)
[3.3 Docker Desktop](#3.3 Docker Desktop)
[3.3.1 Docker Desktop功能特性](#3.3.1 Docker Desktop功能特性)
[3.4 Kitematic](#3.4 Kitematic)
[3.4.1 Kitematic 功能特性](#3.4.1 Kitematic 功能特性)
[3.5 Shipyard](#3.5 Shipyard)
[3.5.1 Shipyard主要功能特性](#3.5.1 Shipyard主要功能特性)
[四、Portainer 介绍](#四、Portainer 介绍)
[4.1 Portainer 概述](#4.1 Portainer 概述)
[4.1.1 Portainer 整体架构](#4.1.1 Portainer 整体架构)
[4.2 Portainer主要特点和功能](#4.2 Portainer主要特点和功能)
[4.3 Portainer 使用场景](#4.3 Portainer 使用场景)
[4.4 Portainer 相对其他可视化工具的优势](#4.4 Portainer 相对其他可视化工具的优势)
[五、Portainer 部署与使用](#五、Portainer 部署与使用)
[5.1 部署前准备](#5.1 部署前准备)
[5.1.1 Portainer 安装部署方式介绍](#5.1.1 Portainer 安装部署方式介绍)
[5.2 使用docker搭建Portainer](#5.2 使用docker搭建Portainer)
[5.2.1 创建数据卷](#5.2.1 创建数据卷)
[5.2.2 拉取镜像](#5.2.2 拉取镜像)
[5.2.3 启动镜像](#5.2.3 启动镜像)
[5.2.4 web界面访问](#5.2.4 web界面访问)
[5.2.5 添加admin账户密码](#5.2.5 添加admin账户密码)
[5.3 Portainer 界面基本使用](#5.3 Portainer 界面基本使用)
[5.3.1 界面基本功能](#5.3.1 界面基本功能)
[5.3.2 添加新的docker节点](#5.3.2 添加新的docker节点)
[5.3.3 Portainer 添加swarm集群](#5.3.3 Portainer 添加swarm集群)
[5.4 Portainer Image(镜像)相关操作](#5.4 Portainer Image(镜像)相关操作)
[5.4.1 拉取镜像](#5.4.1 拉取镜像)
[5.4.2 删除镜像](#5.4.2 删除镜像)
[5.4.3 添加自定义镜像仓库](#5.4.3 添加自定义镜像仓库)
[5.5 Portainer Networks(网络)相关操作](#5.5 Portainer Networks(网络)相关操作)
[5.5.1 创建自定义网络](#5.5.1 创建自定义网络)
[5.6 Portainer Container(容器)相关操作](#5.6 Portainer Container(容器)相关操作)
[5.6.1 启动容器](#5.6.1 启动容器)
[5.6.2 创建新容器](#5.6.2 创建新容器)
一、前言
伴随着云原生技术的广泛使用,作为最底层的容器技术docker,在越来越多的公司中得到认可和规模化使用,但是在实践过程中发现,当docker技术运用于生产实践时,纯命令式的操作仍然给很多开发和运维带来了较多的学习和使用成本,为此,经过多年的发展,市面上也逐渐开始产生了可视化的docker容器和镜像管理工具,利用这些可视化界面工具,可以更简单的运维docker镜像,本文将详细探讨下docker可视化容器管理工具的使用。
二、docker可视化管理概述
2.1 什么是docker可视化管理
Docker可视化管理是指通过图形用户界面(GUI)或其他可视化工具来管理Docker容器、镜像、网络和数据卷等资源的过程。这种管理方式通过图形化操作界面代替了传统的命令行操作,使得Docker的管理更加直观和易用。
2.1.1 Docker可视化管理常用功能
Docker可视化管理工具,通常会提供如下功能:
-
图形化展示Docker容器、镜像和网络等资源的关系和状态。
-
提供容器的创建、启动、停止和删除等基本操作的图形化界面。
-
允许用户通过可视化方式对镜像进行拉取、推送、构建和管理。
-
提供监控和日志查看功能,方便用户实时监控和调试容器的运行状态。
-
支持多节点的集群管理,可以管理多个Docker节点上的容器和服务。
-
可能提供一些高级功能,如滚动更新、安全审查、自动扩展等。
通过Docker可视化管理工具,用户可以以图形化的方式管理整个Docker环境,降低了学习难度和操作复杂度,使得更多的人可以方便地使用Docker进行容器化应用的开发、部署和管理。
2.2 为什么需要docker可视化管理工具
在一定程度上,团队使用docker可视化管理工具是为了提升团队对docker容器的管理和使用效率,通常来说需要Docker可视化管理工具有下面几个原因:
-
降低学习门槛:对于不熟悉命令行操作的用户,可视化管理工具提供了更直观、易于理解的界面,降低了使用Docker的学习难度。
-
提高效率:可视化管理工具能够简化一些繁琐的操作,通过图形化界面可以更快速、方便地管理和监控容器、镜像和网络等Docker资源。
-
监控和调试:可视化工具通常提供了监控和调试功能,用户可以通过界面实时监控容器的运行状态、资源使用情况等,方便排查问题和优化性能。
-
团队协作:在团队开发和运维中,可视化管理工具提供了统一的界面和操作方法,有助于团队成员之间的协作和沟通,提高工作效率。
-
可视化展示:通过可视化管理工具,用户可以直观地展示Docker容器之间的关系、网络拓扑等,有助于更清晰地理解整个容器化环境。
2.3 docker可视化工具带来的好处
使用Docker可视化工具可以带来以下好处:
-
直观性更好
- 可视化工具能够以图形化界面展示Docker容器、镜像、网络等资源,使得用户可以通过直观的方式了解和管理这些资源。
-
使用难度降低
- 对于不熟悉命令行操作的用户来说,可视化工具提供了更加用户友好的界面,使得他们可以更轻松地进行Docker的管理和操作。
-
监控和调试方便
- 可视化工具通常提供了监控和调试的功能,用户可以通过界面查看容器的运行状态、资源利用情况等,方便排查问题和优化性能。
-
能够快速部署
- 通过可视化工具,用户可以方便地进行容器的部署和管理,简化了一些繁琐的操作,提高了工作效率。
-
团队协作方便
- 在团队开发和运维中,可视化工具可以提供统一的界面和操作方法,有助于团队成员之间的协作和沟通。
三、常用的docker容器可视化管理工具解决方案
随着docker技术的发展成熟,以及行业对可视化管理工具的需求增强,市场上也陆续出现了不少企业级docker容器可视化管理工具解决方案,下面列举一些较为成熟的解决方案。
3.1 Portainer
Portainer 是一个开源的轻量级Docker管理界面,提供直观的图形化用户界面,支持快速部署、操作和监控Docker容器、镜像、服务等。
Portainer提供用户管理、权限控制、容器生命周期管理、镜像操作、服务堆栈管理等功能。支持多节点管理和面板化展示。
3.2 Rancher
Rancher 是一个开源的容器管理平台,支持Kubernetes和Docker Swarm,提供了强大的集群管理和应用部署功能。官网地址:Enterprise Kubernetes Management Platform & Software | Rancher 。
-
开源的企业级的Pass容器管理平台,通过rancher,企业不需要再适用一系列的开源组件从头搭建自己的容器平台了;
-
Rancher提供了在生产环境下使用的管理Docker和Kubernetes的全栈化容器部署与管理平台;
3.2.1 Rancher功能特性
-
作为企业级容器编排的基础设施
-
可以使用任何公有云或者私有云的linux主机资源;
-
linux主机可以是虚拟机,也可以是物理机;
-
Rancher 只需要主机有CPU,内存,本地磁盘和网路资源即可,即从Rancher 的角度讲,一台云厂商提供的虚拟机和自己的一台物理机是一样的;
-
-
集中式的容器编排与调度
-
几乎包含了当下全部主流的编排调度引擎,比如:Docker Swarm ,Kubernetes,Mesos;
-
同一个用户可以创建Swarm或者Kubernetes集群,并且可以使用原生的Kubernetes或者Swarm工具管理创建的应用;
-
除了 Swarm ,Kubernetes,Mesos 之外,Rancher还支持自己的Cattle容器编排调度引擎;
-
Cattle被广泛用于编排Rancher自己的基础设施服务以及用于Swarm 集群,Kubernetes集群和Mesos集群的配置,管理与升级等;
-
3.3 Docker Desktop
Docker Desktop 是 Docker 公司为个人开发者和小型团队提供的一个桌面应用程序,用于在本地计算机上运行和管理 Docker 容器化应用。它提供了一个集成的开发环境,让用户可以在自己的电脑上轻松使用 Docker 技术进行开发、测试和部署。
3.3.1 Docker Desktop功能特性
Docker Desktop主要功能特性如下:
-
跨平台支持
- Docker Desktop 支持在 Windows 和 macOS 操作系统上运行,为这两个主要的桌面操作系统提供了 Docker 引擎的功能;
-
容器化开发环境
- 允许开发者在本地快速搭建和管理容器化的开发环境,无需连接到远程服务器或使用云服务。这样可以保持开发环境与生产环境的一致性;
-
集成工具
- 包括 Docker Engine、Docker CLI(命令行接口)和 Docker Compose。用户可以通过 Docker CLI 进行容器的操作管理,使用 Docker Compose 管理多容器应用的配置和部署;
-
图形用户界面 (GUI)
- 提供了用户友好的图形界面,方便用户进行容器和服务的管理。通过 GUI,用户可以直观地查看、启动、停止和删除容器,管理容器的网络和卷等;
-
应用商店和模板
- Docker Desktop 提供了一个集成的应用商店,用户可以从中获取和部署预先配置好的应用模板,加速开发和测试流程。
-
配置选项
- 支持用户对 Docker 环境进行高级配置,如内存和 CPU 的分配、网络设置等,以满足不同场景下的需求;
3.4 Kitematic
Kitematic 是一个由 Docker 官方提供的图形用户界面 (GUI) 工具,专门用于简化 Docker 容器的管理。它提供了直观的界面和易用的功能,旨在帮助用户更轻松地使用 Docker 容器化技术。
3.4.1 Kitematic 功能特性
Kitematic 具备如下功能特性:
-
提供图形用户界面
- Kitematic 提供了直观、易于理解的图形化用户界面,用户无需深入学习命令行操作,即可进行 Docker 容器的管理;
-
部署简便
- 用户可以通过 Kitematic 快速地拉取、启动和停止容器,无需记忆复杂的 Docker 命令;
-
便于容器搜索和浏览
- 提供容器的搜索和浏览功能,用户可以浏览 Docker Hub 上的各种容器镜像,以及已有的本地镜像
-
便于容器管理
- 用户可以通过 Kitematic 方便地管理容器,进行启动、停止、删除等操作,也可以查看容器的日志和状态信息;
-
本地与远程连接
- 支持连接到本地 Docker 安装,同时也可以连接到远程 Docker 主机,便于管理和操作容器
-
跨平台支持
- Kitematic 可以在 Windows 和 macOS 操作系统上运行,为用户提供了跨平台的容器管理解决方案;
总的来说,Kitematic 提供了一个简单直观的容器管理工具,适用于入门级用户和那些希望快速上手 Docker 技术的个人开发者和小型团队。
3.5 Shipyard
Shipyard是一个用于管理Docker容器和集群的开源Web用户界面。它提供了一个直观的图形用户界面,用于管理和监控Docker容器和集群。Shipyard可以让用户轻松地进行容器的部署、监控容器的状态、管理容器的网络和卷等操作。
3.5.1 Shipyard主要功能特性
-
可视化用户界面
- 提供直观、用户友好的图形界面,无需深入学习命令行操作,即可进行Docker容器的管理;
-
容器管理
- 支持容器的创建、启动、停止、删除等基本操作,用户可以方便地管理容器的生命周期;
-
集群管理
- 支持管理多个Docker主机,提供集中式的管理和监控功能;
-
容器监控
- 提供实时的容器监控功能,用户可以查看容器的运行状态、资源使用情况等;
-
网络和存储管理
- 支持管理容器使用的网络和存储卷,方便用户配置容器之间的通信和数据存储;
-
用户权限和认证
- 支持用户权限管理和认证,允许管理员分配不同的权限给不同的用户或用户组
Shipyard提供了一个简单直观的容器管理工具,适用于入门级用户和希望快速上手Docker技术的个人开发者和小型团队。
四、Portainer 介绍
4.1 Portainer 概述
Portainer 是一个开源的轻量级容器管理界面,专门用于管理 Docker 容器引擎。它提供了直观的图形化用户界面,使用户可以更轻松地进行 Docker 容器、镜像、卷以及网络的管理和操作。
4.1.1 Portainer 整体架构
如下是官网提供的关于Portainer 的整体架构
4.2 Portainer主要特点和功能
Portainer主要的特点和功能如下:
-
用户友好的界面
- Portainer 提供了直观、易于理解的用户界面,使得用户无需深入学习命令行操作,即可轻松进行 Docker 容器的管理。
-
功能丰富
-
支持容器的创建、启动、停止、删除等基本操作,同时支持镜像的拉取、构建、推送和管理。
-
提供容器和服务的堆栈(Stack)管理,方便用户进行多容器应用的编排和部署。
-
-
多节点管理支持
-
可以管理多个 Docker 主机节点,提供集中式的管理和监控功能。
-
支持在多个 Docker Swarm 节点或者 Docker 主机上进行统一的管理和操作。
-
-
权限控制
- 提供基于角色的访问控制和权限管理,允许管理员分配不同的权限给不同的用户或用户组,保障系统安全。
-
监控和日志查看
- 可以实时查看容器的运行状态、资源使用情况和日志,方便用户快速定位和解决问题。
-
应用模板
- 支持从应用模板库中快速部署常见应用,简化了容器化应用的部署流程。
-
轻量级和易部署
- Portainer 本身是一个轻量级的容器应用,易于部署和管理,可以作为容器运行在任何支持 Docker 的环境中
4.3 Portainer 使用场景
Portainer 可以在多种场景下发挥作用,主要适用于以下几个方面的使用场景:
-
个人开发者
-
本地开发环境: 在个人计算机上使用 Portainer 管理本地的 Docker 容器,方便快速部署、管理和测试应用。
-
学习和实验: 对于初学者或者希望快速上手 Docker 的人员,Portainer 提供了直观的图形界面,降低了学习曲线。
-
-
小型团队
-
团队协作: 小型开发团队可以使用 Portainer 统一管理团队成员的 Docker 容器和应用,提高团队的协作效率。
-
持续集成/持续部署 (CI/CD): 可以结合 CI/CD 工具,如 Jenkins 或 GitLab CI,使用 Portainer 管理容器化的构建和部署流程。
-
-
中小型企业
-
生产环境管理: 在生产环境中,Portainer 可以帮助企业管理多个 Docker 主机或 Docker Swarm 集群,提供集中式的监控和管理。
-
安全审查和权限管理: 提供基于角色的访问控制和权限管理功能,保障容器和数据的安全性。
-
-
教育和培训
- 教学用途: 在教育机构或者培训课程中,Portainer 可以作为展示 Docker 管理和操作的工具,帮助学生理解和实践容器化技术。
-
DevOps 环境
- DevOps 自动化: 在 DevOps 环境中,Portainer 可以作为工具链的一部分,与其他工具如 Prometheus、Grafana 等结合,实现容器化应用的监控和自动化管理。
总之,Portainer 提供了一个灵活且易于使用的平台,适合从个人开发者到中小型企业的不同用户群体,帮助他们管理和操作 Docker 容器化环境,提升工作效率并简化管理任务。
4.4 Portainer 相对其他可视化工具的优势
上面介绍了多种docker的可视化管理工具,既然有这么多的选择,为什么要选择Portainer 呢,相比其他可视化工具,Portainer 的优势在哪里呢?下面列举了一些可供选择参考的理由:
-
轻量级
- Portainer 是一个轻量级的容器管理工具,占用资源较少,适合于资源有限的个人开发者或小型团队使用。
-
使用简单
- Portainer 提供直观的用户界面和简单易用的功能,降低了学习成本,使新手和入门用户能够轻松上手。
-
多平台支持
- Portainer 支持在 Windows、Linux 和 macOS 等多个主流操作系统上运行,为用户提供了跨平台的容器管理解决方案。
-
适合多容器管理
- Portainer 可以管理单个Docker主机上的多个容器,也可以管理多个Docker主机组成的集群,支持集中式的管理和监控。
-
功能丰富
- Portainer 提供了丰富的功能,包括容器、镜像、卷、网络等资源的管理,还支持用户权限管理和认证,满足了不同用户群体的需求。
-
活跃的社区支持
- Portainer 有一个活跃的开源社区,用户可以获得来自社区的技术支持和持续的更新与改进。
五、Portainer 部署与使用
官网地址:Kubernetes and Docker Container Management Software;
项目开源地址:GitHub - portainer/portainer: Making Docker and Kubernetes management easy.;
Portainer CE 社区版安装部署官网文档:Install Portainer CE | Portainer Documentation;
5.1 部署前准备
服务器:
-
2~3台,每一条服务器均安装了dokcer;
-
一台用于安装Portainer ,另外1~2台用于接入Portainer ;
5.1.1 Portainer 安装部署方式介绍
通过官网文档,点击查看官网提供的安装手册
Portainer 目前提供了2种版本,商业版和社区版,商业版目前是收费的,而社区版即CE版,目前是免费的,不过部分功能可能是受限的,个人或小型项目也是够用了;
点击安装,来到下面的安装文档页面
从官网的文档介绍中可以发现,Portainer 提供了多种安装部署方式,包括:
-
基于linux的docker环境安装Portainer ;
-
基于docker桌面安装Portainer ;
-
基于docker compose的方式安装Portainer ;
-
基于docker swarm安装Portainer ;
-
基于k8s的方式安装Portainer ;
安装文档地址:Docker Standalone | 2.19 | Portainer Documentation
5.2 使用docker搭建Portainer
这是一种比较简单的安装部署方式,只需要运行一段docker命令即可,文档地址Install Portainer BE with Docker on Linux | 2.19 | Portainer Documentation
参考下面的部署流程
5.2.1 创建数据卷
这里提前创建一个独立的数据卷给下面的Portainer 容器使用
bash
docker volume create portainer_data
5.2.2 拉取镜像
也可以不用提前拉取,直接运行容器的时候自动拉取
bash
docker pull portainer/portainer-ee:latest
5.2.3 启动镜像
使用下面的命令启动portainer镜像,为了方便下文访问可视化界面,请提前开放8000和9443的端口;
bash
docker run -d -p 9000:9000 --name portainer -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
5.2.4 web界面访问
容器正常启动之后,可以通过:IP:9443访问控制台界面,注意访问的时候新版需要通过https进行访问,所以你会看到下面的效果
点击高级,然后点击继续访问即可
5.2.5 添加admin账户密码
基于上面访问的页面,添加admin管理员登录的密码
输入完毕,点击创建用户,然后跳转到登录界面,输入上述的账户和密码即可
5.3 Portainer 界面基本使用
5.3.1 界面基本功能
点击上述得 "Get Started" 之后,来到下面的页面,在这个页面展示的是Portainer 管理的docker节点信息
目前,由于Portainer 所在的这台机器安装了Docker,所以这里展示的是local,点击local进去之后,可以看到更详细的信息;
在上面的这个详情页面,展示出来了当前机器的docker环境中,Stack,Images,Containers等维度信息,比如,当我们继续点击Container ,可以看到里面的容器列表;
5.3.2 添加新的docker节点
通过左侧菜单,Environments ,点击添加新的Environment
选择第一个
选择API,填写名称和待加入的docker节点IP地址
添加之后,可以在环境列表上看到上面添加的docker节点信息了
注意:
在做这个操作的时候,当你填写了新的docker主机IP之后点击下面的connect发现无法连接,此时需要做下面的操作,否则无法对其他docker主机进行纳管;
1)进入待纳管的安装了docker的机器
找到下面的这个文件
bash
vi /usr/lib/systemd/system/docker.service
2)修改下面的这行配置文件
修改为下面的这行配置
bash
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
3)重新加载配置文件并重启docker
bash
#重新加载配置文件
systemctl daemon-reload
#重启docker
systemctl restart docker
如果还需要添加更多的节点,也按照上述相同的操作即可,同时注意开发被纳管机器的2375端口
5.3.3 Portainer 添加swarm集群
基于上一步在Portainer 中添加docker节点的经验,按照同样的操作,我们可以在Portainer 中添加一个swarm集群,从而可以基于Portainer 对swarm集群进行管理。比如在上一篇swarm的学习中,有一个如下的swarm集群,信息如下,当前swarm集群处于运行状态中;
通过左侧的Environments 菜单,点击 Add environment
选择 Docker Swarm
选择API,然后在这个页面填写 swarm集群的名称,和managerIp+端口,点击Connect;
连接成功后,再在环境列表上面就可以看到上面添加的这个swarm信息了
通过Home菜单,可以看到上面添加的swarm
点击进入,可以看到当前这个swarm集群中的详细信息
比如可以点击Containers查看swarm集群中的容器信息
5.4 Portainer Image(镜像)相关操作
Portainer 镜像相关的操作,可以通过菜单栏左侧的Images查看,如下,右侧展示了镜像列表
5.4.1 拉取镜像
在列表的上面搜索框里面,选择你要搜索的镜像,然后点击pull即可
等待拉取完成,在列表中就能看到这个镜像了
补充说明:
在未登录的情况下,在这里拉取镜像是有次数限制的,在下面的那段描述中也有提示
5.4.2 删除镜像
勾选你要删除的镜像,点击Remove按钮即可删除镜像,要注意的是如果这个镜像正在被使用中,点击Remove的时候可能会提示你无法删除成功;
5.4.3 添加自定义镜像仓库
默认情况下,从上面的操作中可以发现拉取的镜像是从docker hub拉取的,也可以使用自定义仓库,需要手动配置一下;
点击上面的 Add Registry,在下面的页面中选择自定义镜像,通过这个链接,阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台,找到你的阿里云专属镜像仓库地址,然后配置到下面的表单中保存即可;
然后列表中就能看到上面自定义的镜像仓库了
如何使用呢?我们回到拉取镜像的那一步,此时再次选择镜像地址时就能看到这个自定义的镜像仓库信息了
5.5 Portainer Networks(网络)相关操作
在左侧菜单,点击Nwtworks,可以看到右侧展示出来了当前Docker主机上所有的网络列表
- 其中标注了System的表示docker自身默认创建和使用的网络;
5.5.1 创建自定义网络
点击右上侧的添加网络
表单里面的信息不熟悉的情况下可以使用默认的即可
添加成功后就可以在列表进行查看了
5.6 Portainer Container(容器)相关操作
点击右上侧的Containers,展示的是当前主机的容器列表
5.6.1 启动容器
勾选之前使用过的但是处于停止状态的容器,比如这里我选择的是boot-k8s,点击 Start或Restart,可以看到容器就被启动了;
其他的操作,像停止容器,kill容器等操作都比较加单,可以自行尝试一下
5.6.2 创建新容器
也可以在这里Create出一个新容器,点击Add container;
来到下面的表单中,按要求填写相关的参数即可
初次填写时,为了搞清里面的各个参数项的含义,下面分别做解释说明:
-
Name,填写自定义的容器名字;
-
Image configuration,选择镜像源、镜像名字和版本;
-
Always pull the image,每次创建容器都要重新拉一次最新的镜像,不建议开启,DockerHub账号对匿名账户有次数限制;
-
Network ports configuration
-
Publish all exposed network ports to random host ports,将所有暴露的端口随机发布到主机上,不建议;
-
Manual network port publishing,手动指定暴露的端口发布到主机端口;
-
-
Auto remove
- 容器停止后,自动删除该容器,不建议;
数据卷(Volumes)设置如下
网络(Network)设置
环境变量(Env)设置
以上的设置都完成后,最后点击 Deploy the container部署容器,如果现实发布成功则可以在容器列表中看到上面创建的这个容器;
六、写在文末
本文通过较大的篇幅详细介绍了docker可视化工具Portainer的使用,并通过搭建环境和界面常用功能的操作多维度介绍了Portainer如何使用和配置,希望对看到的同学有用哦,本篇到此结束,感谢观看。