您好,登錄后才能下訂單哦!
一、概述
1.1 基本概念:
Docker 是一個開源的應(yīng)用容器引擎,基于 Go 語言 并遵從Apache2.0協(xié)議開源。Docker 可以讓開發(fā)者打包他們的應(yīng)用以及依賴包到一個輕量級、可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機(jī)制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
1.2 優(yōu)勢:
簡化程序:
Docker 讓開發(fā)者可以打包他們的應(yīng)用以及依賴包到一個可移植的容器中,然后發(fā)布到任何流行的 Linux 機(jī)器上,便可以實現(xiàn)虛擬化。Docker改變了虛擬化的方式,使開發(fā)者可以直接將自己的成果放入Docker中進(jìn)行管理。方便快捷已經(jīng)是 Docker的最大優(yōu)勢,過去需要用數(shù)天乃至數(shù)周的任務(wù),在Docker容器的處理下,只需要數(shù)秒就能完成。
節(jié)省開支:
一方面,云計算時代到來,使開發(fā)者不必為了追求效果而配置高額的硬件,Docker 改變了高性能必然高價格的思維定勢。Docker 與云的結(jié)合,讓云空間得到更充分的利用。不僅解決了硬件管理的問題,也改變了虛擬化的方式。
1.3 與傳統(tǒng)VM特性對比:
作為一種輕量級的虛擬化方式,Docker在運行應(yīng)用上跟傳統(tǒng)的虛擬機(jī)方式相比具有顯著優(yōu)勢:
Docker容器很快,啟動和停止可以在秒級實現(xiàn),這相比傳統(tǒng)的虛擬機(jī)方式要快得多。
Docker容器對系統(tǒng)資源需求很少,一臺主機(jī)上可以同時運行數(shù)千個Docker容器。
Docker通過類似Git的操作來方便用戶獲取、分發(fā)和更新應(yīng)用鏡像,指令簡明,學(xué)習(xí)成本較低。
Docker通過Dockerfile配置文件來支持靈活的自動化創(chuàng)建和部署機(jī)制,提高工作效率。
Docker容器除了運行其中的應(yīng)用之外,基本不消耗額外的系統(tǒng)資源,保證應(yīng)用性能的同時,盡量減小系統(tǒng)開銷。
Docker利用Linux系統(tǒng)上的多種防護(hù)機(jī)制實現(xiàn)了嚴(yán)格可靠的隔離。從1.3版本開始,Docker引入了安全選項和鏡像簽名機(jī)制,極大地提高了使用Docker的安全性。
特性 | 容器 | 虛擬機(jī) |
啟動速度 | 秒級 | 分鐘級 |
硬盤使用 | 一般為MB | 一般為GB |
性能 | 接近原生 | 弱于原生 |
系統(tǒng)支持量 | 單機(jī)支持上千個容器 | 一般幾十個 |
隔離性 | 安全隔離 | 完全隔離 |
1.4 基礎(chǔ)架構(gòu)
Docker 使用客戶端-服務(wù)器 (C/S) 架構(gòu)模式,使用遠(yuǎn)程API來管理和創(chuàng)建Docker容器。
Docker 容器通過 Docker 鏡像來創(chuàng)建。
容器與鏡像的關(guān)系類似于面向?qū)ο缶幊讨械膶ο笈c類。
Docker | 面向?qū)ο?/th> |
---|---|
容器 | 對象 |
鏡像 | 類 |
1.5 Docker技術(shù)的基礎(chǔ):
1.6 Docker組件:
二、安裝部署
2.1 準(zhǔn)備條件
目前,CentOS 僅發(fā)行版本中的內(nèi)核支持 Docker。
Docker 運行在 CentOS 7 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本為 3.10 以上。
Docker 運行在CentOS-6.5或更高的版本的 CentOS 上,要求系統(tǒng)為64位、系統(tǒng)內(nèi)核版本2.6.32-431 或者更高版本。
2.2 安裝docker
yum install docker -y #安裝 systemctl start docker #啟動 systemctl enable docker #設(shè)置開機(jī)自啟動
2.3 基本命令
docker search centos #搜索鏡像
默認(rèn)從國外拉去,速度很慢,可以使用daocloud配置加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://d6f11267.m.daocloud.io 腳本是寫入 echo "{\"registry-mirrors\": [\"http://d6f11267.m.daocloud.io\"]}"> /etc/docker/daemon.json systemctl restart docker #重啟失效
根據(jù)需求拉取鏡像:
docker pull docker.io/ansible/centos7-ansible
拉去search到的全部鏡像:
for i in `docker search centos|awk '!/NAME/{print $2}'`;do docker pull $i;done
查看本地鏡像:
docker images
2.4 命令整理:
容器操作:
docker create # 創(chuàng)建一個容器但是不啟動它 docker run # 創(chuàng)建并啟動一個容器 docker stop # 停止容器運行,發(fā)送信號SIGTERM docker start # 啟動一個停止?fàn)顟B(tài)的容器 docker restart # 重啟一個容器 docker rm # 刪除一個容器 docker kill # 發(fā)送信號給容器,默認(rèn)SIGKILL docker attach # 連接(進(jìn)入)到一個正在運行的容器 docker wait # 阻塞一個容器,直到容器停止運行
獲取容器信息:
docker ps # 顯示狀態(tài)為運行(Up)的容器 docker ps -a # 顯示所有容器,包括運行中(Up)的和退出的(Exited) docker inspect # 深入容器內(nèi)部獲取容器所有信息 docker logs # 查看容器的日志(stdout/stderr) docker events # 得到docker服務(wù)器的實時的事件 docker port # 顯示容器的端口映射 docker top # 顯示容器的進(jìn)程信息 docker diff # 顯示容器文件系統(tǒng)的前后變化
導(dǎo)出容器:
docker cp # 從容器里向外拷貝文件或目錄 docker export # 將容器整個文件系統(tǒng)導(dǎo)出為一個tar包,不帶layers、tag等信息
執(zhí)行:
docker exec # 在容器里執(zhí)行一個命令,可以執(zhí)行bash進(jìn)入交互式
鏡像操作:
docker images # 顯示本地所有的鏡像列表 docker import # 從一個tar包創(chuàng)建一個鏡像,往往和export結(jié)合使用 docker build # 使用Dockerfile創(chuàng)建鏡像(推薦) docker commit # 從容器創(chuàng)建鏡像 docker rmi # 刪除一個鏡像 docker load # 從一個tar包創(chuàng)建一個鏡像,和save配合使用 docker save # 將一個鏡像保存為一個tar包,帶layers和tag信息 docker history # 顯示生成一個鏡像的歷史命令 docker tag # 為鏡像起一個別名
鏡像倉庫(registry)操作:
docker login # 登錄到一個registry docker search # 從registry倉庫搜索鏡像 docker pull # 從倉庫下載鏡像到本地 docker push # 將一個鏡像push到registry倉庫中
2.5 簡單實踐操作
運行并進(jìn)入容器操作:
docker run -i -t docker.io/1832990/centos6.5 /bin/bash
-t 表示在新容器內(nèi)指定一個偽終端或終端;
-i表示允許我們對容器內(nèi)的 (STDIN) 進(jìn)行交互;
-d表示將容器在后臺運行;
/bin/bash 。這將在容器內(nèi)啟動 bash shell;
所以當(dāng)容器(container)啟動之后,我們會獲取到一個命令提示符:
在容器內(nèi)我們安裝mysql并設(shè)置開機(jī)自啟動,將修改后的鏡像提交:
docker ps -l 查詢?nèi)萜鱅D docker commit -m "功能" -a "用戶信息" ID tag 提交修改后的鏡像
docker inspect ID 查看詳細(xì)信息 docker push ID 上傳docker鏡像
利用DockerFile創(chuàng)建鏡像
使用命令 docker build, 需要創(chuàng)建一個Dockerfile文件,其中包含一組指令來告訴 Docker 如何構(gòu)建鏡像。
mkdir DockerFile cd DockerFile cat > Dockerfile <<EOF FROM 603dd3515fcc MAINTAINER Docker xuel RUN yum install mysql mysql-server -y RUN mddir /etc/sysconfig/network RUN /etc/init.d/mysqld start EOF
docker build -t "centos6.8:mysqld" .
-t 制定repository 與tag
. 指定Dockerfile的路徑
注意一個鏡像不能超過 127 層
此外,還可以利用 ADD 命令復(fù)制本地文件到鏡像;
用 EXPOSE 命令來向外部開放端口;
用 CMD 命令來描述容器啟動后運行的程序等。
CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"]
2.6 Dockerfile詳解
Dockerfile的指令是忽略大小寫的,建議使用大寫,使用 # 作為注釋,每一行只支持一條指令,每條指令可以攜帶多個參數(shù)。
Dockerfile的指令根據(jù)作用可以分為兩種,構(gòu)建指令和設(shè)置指令。
構(gòu)建指令:用于構(gòu)建image,其指定的操作不會在運行image的容器上執(zhí)行;
設(shè)置指令:用于設(shè)置image的屬性,其指定的操作將在運行image的容器中執(zhí)行。
FROM(指定基礎(chǔ)image)
構(gòu)建指令,必須指定且需要在Dockerfile其他指令的前面。后續(xù)的指令都依賴于該指令指定的image。FROM指令指定的基礎(chǔ)image可以是官方遠(yuǎn)程倉庫中的,也可以位于本地倉庫。
該指令有兩種格式:
MAINTAINER(用來指定鏡像創(chuàng)建者信息)
構(gòu)建指令,用于將image的制作者相關(guān)的信息寫入到image中。當(dāng)我們對該image執(zhí)行docker inspect命令時,輸出中有相應(yīng)的字段記錄該信息。
RUN(安裝軟件用)
構(gòu)建指令,RUN可以運行任何被基礎(chǔ)image支持的命令。如基礎(chǔ)image選擇了ubuntu,那么軟件管理部分只能使用ubuntu的命令。
CMD(設(shè)置container啟動時執(zhí)行的操作)
設(shè)置指令,用于container啟動時指定的操作。該操作可以是執(zhí)行自定義腳本,也可以是執(zhí)行系統(tǒng)命令。該指令只能在文件中存在一次,如果有多個,則只執(zhí)行最后一條。
ENTRYPOINT指定的是一個可執(zhí)行的腳本或者程序的路徑,該指定的腳本或者程序?qū)詐aram1和param2作為參數(shù)執(zhí)行。所以如果CMD指令使用上面的形式,那么Dockerfile中必須要有配套的ENTRYPOINT。當(dāng)Dockerfile指定了ENTRYPOINT,那么使用下面的格式:
ENTRYPOINT(設(shè)置container啟動時執(zhí)行的操作)
設(shè)置指令,指定容器啟動時執(zhí)行的命令,可以多次設(shè)置,但是只有最后一個有效。
該指令的使用分為兩種情況,一種是獨自使用,另一種和CMD指令配合使用。
當(dāng)獨自使用時,如果你還使用了CMD命令且CMD是一個完整的可執(zhí)行的命令,那么CMD指令和ENTRYPOINT會互相覆蓋只有最后一個CMD或者ENTRYPOINT有效。
# CMD指令將不會被執(zhí)行,只有ENTRYPOINT指令被執(zhí)行 CMD echo “Hello, World!” ENTRYPOINT ls -l
另一種用法和CMD指令配合使用來指定ENTRYPOINT的默認(rèn)參數(shù),這時CMD指令不是一個完整的可執(zhí)行命令,僅僅是參數(shù)部分;ENTRYPOINT指令只能使用JSON方式指定執(zhí)行命令,而不能指定參數(shù)。
FROM ubuntu CMD ["-l"] ENTRYPOINT ["/usr/bin/ls"]
USER(設(shè)置container容器的用戶)
設(shè)置指令,設(shè)置啟動容器的用戶,默認(rèn)是root用戶
# 指定memcached的運行用戶 ENTRYPOINT ["memcached"] USER daemon 或 ENTRYPOINT ["memcached", "-u", "daemon"]
EXPOSE(指定容器需要映射到宿主機(jī)器的端口)
設(shè)置指令,該指令會將容器中的端口映射成宿主機(jī)器中的某個端口。當(dāng)你需要訪問容器的時候,可以不是用容器的IP地址而是使用宿主機(jī)器的IP地址和映射后的端口。要完成整個操作需要兩個步驟,首先在Dockerfile使用EXPOSE設(shè)置需要映射的容器端口,然后在運行容器的時候指定-p選項加上EXPOSE設(shè)置的端口,這樣EXPOSE設(shè)置的端口號會被隨機(jī)映射成宿主機(jī)器中的一個端口號。也可以指定需要映射到宿主機(jī)器的那個端口,這時要確保宿主機(jī)器上的端口號沒有被使用。EXPOSE指令可以一次設(shè)置多個端口號,相應(yīng)的運行容器的時候,可以配套的多次使用-p選項。
# 映射一個端口 EXPOSE port1 # 相應(yīng)的運行容器使用的命令 (主機(jī)(宿主)端口:容器端口) docker run -p port1 image # 映射多個端口 EXPOSE port1 port2 port3 # 相應(yīng)的運行容器使用的命令 docker run -p port1 -p port2 -p port3 image # 還可以指定需要映射到宿主機(jī)器上的某個端口號 docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image
端口映射是docker比較重要的一個功能,原因在于我們每次運行容器的時候容器的IP地址不能指定而是在橋接網(wǎng)卡的地址范圍內(nèi)隨機(jī)生成的。宿主機(jī)器的IP地址是固定的,我們可以將容器的端口的映射到宿主機(jī)器上的一個端口,免去每次訪問容器中的某個服務(wù)時都要查看容器的IP的地址。對于一個運行的容器,可以使用docker port加上容器中需要映射的端口和容器的ID來查看該端口號在宿主機(jī)器上的映射端口。
ENV(用于設(shè)置環(huán)境變量)
構(gòu)建指令,在image中設(shè)置一個環(huán)境變量。
設(shè)置了后,后續(xù)的RUN命令都可以使用,container啟動后,可以通過docker inspect查看這個環(huán)境變量,也可以通過在docker run --env key=value時設(shè)置或修改環(huán)境變量。
假如你安裝了JAVA程序,需要設(shè)置JAVA_HOME,那么可以在Dockerfile中這樣寫:
ADD(從src復(fù)制文件到container的dest路徑)
構(gòu)建指令,所有拷貝到container中的文件和文件夾權(quán)限為0755,uid和gid為0;如果是一個目錄,那么會將該目錄下的所有文件添加到container中,不包括目錄;如果文件是可識別的壓縮格式,則docker會幫忙解壓縮(注意壓縮格式);如果<src>是文件且<dest>中不使用斜杠結(jié)束,則會將<dest>視為文件,<src>的內(nèi)容會寫入<dest>;如果<src>是文件且<dest>中使用斜杠結(jié)束,則會<src>文件拷貝到<dest>目錄下。
<src> 是相對被構(gòu)建的源目錄的相對路徑,可以是文件或目錄的路徑,也可以是一個遠(yuǎn)程的文件url;
<dest> 是container中的絕對路徑
VOLUME(指定掛載點)
設(shè)置指令,使容器中的一個目錄具有持久化存儲數(shù)據(jù)的功能,該目錄可以被容器本身使用,也可以共享給其他容器使用。我們知道容器使用的是AUFS,這種文件系統(tǒng)不能持久化數(shù)據(jù),當(dāng)容器關(guān)閉后,所有的更改都會丟失。當(dāng)容器中的應(yīng)用有持久化數(shù)據(jù)的需求時可以在Dockerfile中使用該指令。
FROM base VOLUME ["/tmp/data"]
WORKDIR(切換目錄)
設(shè)置指令,可以多次切換(相當(dāng)于cd命令),對RUN,CMD,ENTRYPOINT生效。
# 在 /p1/p2 下執(zhí)行 vim a.txt WORKDIR /p1 WORKDIR p2 RUN vim a.txt
2.7 鏡像導(dǎo)入導(dǎo)出
導(dǎo)出鏡像到本地:
docker save -o centos6.5.tar centos6.5 或 docker export f9c99092063c >centos6.5.tar
從本地將鏡像導(dǎo)入:
docker load --input centos6.5.tar 或 docker load < centos6.5.tar
docker rm刪除已經(jīng)終止的容器 docker -f rm 可以刪除正在運行的容器
修改已經(jīng)運行的后臺容器:
docker exec -it CONTAINER ID /bin/bash
三、存儲
3.1數(shù)據(jù)盤
docker的鏡像使用一層一層文件組成的,docker的一些存儲引擎可以處理怎么樣存儲這些文件。
docker inspect centos #查看容器詳細(xì)信息
信息下方的Layers,就是centos的文件,這些東西都是只讀的不能去修改,我們基于這個鏡像去創(chuàng)建的鏡像和容器也會共享這些文件層,而docker會在這些層上面去添加一個可讀寫的文件層。如果需要修改一些文件層里面的東西的話,docker會復(fù)制一份到這個可讀寫的文件層里面,如果刪除容器的話,那么也會刪除它對應(yīng)的可讀寫的文件層的文件。
如果有些數(shù)據(jù)你想一直保存的話,比如:web服務(wù)器上面的日志,數(shù)據(jù)庫管理系統(tǒng)里面的數(shù)據(jù),那么我們可以把這些數(shù)據(jù)放到data volumes數(shù)據(jù)盤里面。它上面的數(shù)據(jù),即使把容器刪掉,也還是會永久保留。創(chuàng)建容器的時候,我們可以去指定數(shù)據(jù)盤。其實就是去指定一個特定的目錄。
docker run -i -t -v /mnt --name nginx docker.io/nginx /bin/bash
-v:制定掛載到容器內(nèi)的目錄
使用docker inspect 容器ID可以查看掛載目錄對應(yīng)于宿主機(jī)的物理文件路徑
同樣,我們可以使用將制定物理宿主機(jī)的目錄掛載到容器的制定目錄下:
將宿主機(jī)目錄掛載到容器內(nèi):
-d 后臺運行
--name 給運行的容器命名
-v 宿主機(jī)目錄:容器目錄 將宿主機(jī)目錄掛載在容器內(nèi)
-p 宿主機(jī)端口:容器監(jiān)聽端口 將容器內(nèi)應(yīng)用監(jiān)聽端口映射到物理宿主機(jī)的特定端口上
映射多個物理目錄:(多寫幾個-v即可)
3.2 數(shù)據(jù)容器:
可以創(chuàng)建一個數(shù)據(jù)容器,也就是再創(chuàng)建容器是指定這個容器的數(shù)據(jù)盤,然后讓其他容器可以使用這個容器作為他們的數(shù)據(jù)盤,有點像繼承了這個數(shù)據(jù)容器指定的數(shù)據(jù)盤作為數(shù)據(jù)盤。
首先創(chuàng)建一個數(shù)據(jù)容器命名為newnginx
docker create -v /mnt -it --name newnginx docker.io/nginx /bin/bash
利用此數(shù)據(jù)容器容器運行一個容器nginx1,在數(shù)據(jù)目錄/mnt 下創(chuàng)建一個文件
docker run --volumes-from newnginx --name nginx1 -it docker.io/nginx /bin/bash
利用數(shù)據(jù)容器在創(chuàng)建一個容器nginx2,查看數(shù)據(jù)目錄下容器nginx1創(chuàng)建的文件依舊存在,同理在nginx2的/mnt下創(chuàng)建文件,其他基于數(shù)據(jù)容器運行的新容器也可以看到文件
3.3 數(shù)據(jù)盤管理:
在刪除容器時,docker默認(rèn)不會刪除其數(shù)據(jù)盤。
docker volume ls #查看數(shù)據(jù)盤 docker volume ls -f dangling=true #查看未被容器使用的數(shù)據(jù)盤 docker volume rm VOLUME NAME #刪除數(shù)據(jù)盤
如果想要刪除容器時,同時刪除掉其數(shù)據(jù)盤,那么可以使用-v
參數(shù)。
docker rm -v newnginx
四、網(wǎng)絡(luò)
docker提供幾種網(wǎng)絡(luò),它決定容器之間和外界和容器之間如何去相互通信。
docker network ls #查看網(wǎng)絡(luò)
當(dāng)Docker進(jìn)程啟動時,會在主機(jī)上創(chuàng)建一個名為docker0的虛擬網(wǎng)橋,此主機(jī)上啟動的Docker容器會連接到這個虛擬網(wǎng)橋上。虛擬網(wǎng)橋的工作方式和物理交換機(jī)類似,這樣主機(jī)上的所有容器就通過交換機(jī)連在了一個二層網(wǎng)絡(luò)中。從docker0子網(wǎng)中分配一個IP給容器使用,并設(shè)置docker0的IP地址為容器的默認(rèn)網(wǎng)關(guān)。在主機(jī)上創(chuàng)建一對虛擬網(wǎng)卡veth pair設(shè)備,Docker將veth pair設(shè)備的一端放在新創(chuàng)建的容器中,并命名為eth0(容器的網(wǎng)卡),另一端放在主機(jī)中,以vethxxx這樣類似的名字命名,并將這個網(wǎng)絡(luò)設(shè)備加入到docker0網(wǎng)橋中。
4.1 bridge橋接網(wǎng)絡(luò)
除非創(chuàng)建容器的時候指定網(wǎng)絡(luò),不然容器就會默認(rèn)的使用橋接網(wǎng)絡(luò)。屬于這個網(wǎng)絡(luò)的容器之間可以相互通信,不過外界想要訪問到這個網(wǎng)絡(luò)的容器呢,需使用橋接網(wǎng)絡(luò),有點像主機(jī)和容器之間的一座橋,對容器有一點隔離作用。實際是在iptables做了DNAT規(guī)則,實現(xiàn)端口轉(zhuǎn)發(fā)功能??梢允褂胕ptables -t nat -vnL查看。
4.2 host主機(jī)網(wǎng)絡(luò)
如果啟動容器的時候使用host模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機(jī)共用一個Network Namespace。容器將不會虛擬出自己的網(wǎng)卡,配置自己的IP等,而是使用宿主機(jī)的IP和端口。但是,容器的其他方面,如文件系統(tǒng)、進(jìn)程列表等還是和宿主機(jī)隔離的。只用這種網(wǎng)絡(luò)的容器會使用主機(jī)的網(wǎng)絡(luò),這種網(wǎng)絡(luò)對外界是完全開放的,能夠訪問到主機(jī),就能訪問到容器。
4.3 使用none模式
Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進(jìn)行任何網(wǎng)絡(luò)配置。也就是說,這個Docker容器沒有網(wǎng)卡、IP、路由等信息。需要我們自己為Docker容器添加網(wǎng)卡、配置IP等。使用此種網(wǎng)絡(luò)的容器會完全隔離。
4.4 簡單演示:
啟動兩個容器,查看其容器內(nèi)部IP地址
查看橋接模式下主機(jī)內(nèi)部容器之間和容器與宿主機(jī)直接均可正常通訊
docker inspect 容器ID
查看host創(chuàng)建的容器內(nèi)部沒有IP地址,它使用的為宿主機(jī)的地址
docker run -d --net host docker.io/sergeyzh/centos6-nginx
查看host創(chuàng)建的容器內(nèi)部沒有IP地址,它使用的為宿主機(jī)的地址
docker run -d --net none docker.io/sergeyzh/centos6-nginx
4.5 容器端口:
如果想讓外界可以訪問到,基于bridge網(wǎng)絡(luò)創(chuàng)建的容器提供的服務(wù),那你可以告訴Docker你要使用哪些接口。如果想查看鏡像會使用哪些端口,ExposedPorts,可以獲悉鏡像使用哪些端口。
docker run -d -p 80 docker.io/sergeyzh/centos6-nginx docker port 09648b2ff7f6
-p 參數(shù)會在宿主機(jī)隨機(jī)映射一個高端口到容器內(nèi)的指定端口
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。