主頁 > 前端設計 > Docker 容器技術 — 容器網路

Docker 容器技術 — 容器網路

2020-10-04 10:20:46 前端設計

目錄

文章目錄

  • 目錄
  • 容器網路的發展趨勢
    • CNI
      • Flannel
      • Callico
      • Weave
      • Macvlan
    • ServiceMesh + CNI
  • Docker 容器網路
    • bridge 模式
    • host 模式
    • macvlan 模式
    • Container 模式
    • none 模式
    • Overlay 模式
    • 容器埠映射

容器網路的發展趨勢

在這里插入圖片描述

CNI

CNI(Container Network Interface,容器網路介面)是 Google 和 CoreOS 主導制定的容器網路標準,它是在 RKT 網路提議的基礎上發展起來的,綜合考慮了靈活性、擴展性、IP 分配、多網卡等因素,

CNI 旨在為容器平臺提供網路的標準化,不同的容器平臺(e.g. Kubernetes、Mesos 和 RKT)能夠通過相同的介面呼叫不同的網路組件,這個協議連接了兩個組件:

  1. 容器管理系統
  2. 網路插件

具體的事情都是插件來實作的,包括:創建容器網路空間(network namespace)、把網路介面(interface)放到對應的網路空間、給網路介面分配 IP 等,

目前采用 CNI 提供的方案一般分為兩種

  1. 隧道方案
  2. 路由方案

具體為:Flannel,Callico,Weave 和 macvlan 網路方案,從難易度上來講,Callico 最簡單,其次 Flannel,Weave 最復雜,從網路技術來看,Weave 和 Flannel 都是網路封裝隧道技術,區別在于封裝的位置在網路設備上還是主機上,

在這里插入圖片描述

Flannel

在這里插入圖片描述

Flannel 是 CoreOS 提出用于解決容器集群跨主機通訊的網路解決方案,Flannel 實質上是一種 Overlay 網路,也就是將 TCP 資料包裝在另一種網路包里面進行路由轉發和通信,目前已支持 UDP、VXLAN、AWS VPC、GCE 路由等資料轉發方式,其中以 VXLAN 技術最為流行,很多資料中心在考慮引入容器時,也考慮將網路切換到 Flannel 的 VXLAN 網路中來,

Flannel 為每個主機分配一個 Subnet,容器從此 Subnet 中分配 IP,這些 IP 可在主機間路由,容器間無需 NAT 和埠映射就可以跨主機通訊,Flannel 讓集群中不同節點主機創建容器時都具有全集群唯一虛擬 IP 地址,并連通主機節點網路,Flannel 可為集群中所有節點重新規劃 IP 地址使用規則,從而使得不同節點上的容器能夠獲得 “同屬一個內網” 且 “不重復的” 的 IP 地址,讓不同節點上的容器能夠直接通過內網 IP 通信,網路封裝部分對容器是不可見的,源主機服務將原本資料內容 UDP 封裝后根據自己的路由表投遞給目的節點,資料到達以后被解包,然后直接進入目的節點虛擬網卡,然后直接達到目的主機容器虛擬網卡,實作網路通信目的,

Flannel 雖然對網路要求較高,要引入封裝技術,轉發效率也受到影響,但是卻可以平滑過渡到 SDN 網路,VXLAN 技術可以和 SDN 很好地結合起來,值得整個網路實作自動化部署,智能化運維和管理,較適合于新建資料中心網路部署,

Callico

在這里插入圖片描述

Callico 容器網路和其他虛擬網路最大的不同是:它沒有采用 Overlay 網路做報文轉發,提供了純三層網路模型,三層通信模型表示每個容器都通過 IP 直接通信,要想路由作業能夠正常,每個容器所在的主機節點必須有某種方法知道整個集群的路由資訊,Callico 采用 BGP 路由協議,使得全網所有的 Node 和網路設備都記錄到全網路由,

然而這種方式會產生很多的無效路由,對網路設備路由規格要求較大,整網不能有路由規格低的設備,另外,Callico 實作了從源容器經過源宿主機,經過資料中心路由,然后到達目的宿主機,最后分配到目的容器,整個程序中始終都是根據 BGP 協議進行路由轉發,并沒有進行封包,解包程序,這樣轉發效率就會快得多,這是 Callico 容器網路的技術優勢,

Weave

在這里插入圖片描述

Weave 實質上也是 Overlay 網路,Weave 可以把不同主機上容器互相連接的網路虛擬成一個類似于本地網路的網路,不同主機之間都使用自己的私有 IP 地址,當容器分布在多個不同的主機上時,通過 Weave 可以簡化這些容器之間的通信,

Weave 網路中的容器使用標準的埠提供服務(e.g. MySQL 默認使用 3306),管理微服務是十分直接簡單的,每個容器都可以通過域名來與另外的容器通信,也可以直接通信而無需使用 NAT,也不需要使用埠映射或者復雜的聯接,

部署 Weave 容器網路最大的好處是無需修改你的應用代碼,Weave 通過在容器集群的每個主機上啟動虛擬路由器,將主機作為路由器,形成互聯互通的網路拓撲,在此基礎上,實作容器的跨主機通信,

要部署 Weave 需要確保主機 Linux 內核版本在 3.8 以上,Docker1.10 以上,主機間訪問如果有防火墻,則防火墻必須彼此放行 TCP 6783 和 UDP 6783/6784 這些埠號,這些是 Weave 控制和資料埠,主機名不能相同,Weave 要通過主機名識別子網,

Weave 網路類似于主機 Overlay 技術,直接在主機上進行報文流量的封裝,從而實作主機到主機的跨 Underlay 三層網路的互訪,這是和 Flannel 網路的最大區別,Flannel 是一種網路 Overlay 方案,

Macvlan

Macvlan 是 Linux Kernel 比較新的特性,允許在主機的一個網路介面上配置多個虛擬的網路介面,這些網絡 interface 有自己獨立的 MAC 地址,也可以配置上 IP 地址進行通信,macvlan 下的虛擬機或者容器網路和主機在同一個網段中,共享同一個廣播域,macvlan 和 bridge 比較相似,但因為它省去了 bridge 的存在,所以配置和除錯起來比較簡單,而且效率也相對高,除此之外,macvlan 自身也完美支持 VLAN,

ServiceMesh + CNI

在這里插入圖片描述

ServiceMesh 和 CNI 是組合的關系,ServiceMesh 并不會替代 CNI,他們作業在不同的 SDN 層次,CNI 更多作業在 L2-4 層,ServiceMesh 在 L5-7 層 Application SDN,ServiceMesh 不能獨立于 CNI 部署,與 CNI 一起提供層次化微服務應用所需要的網路服務,根據 Gartner 報告指出,在 2020 年,幾乎 100% 容器云都將內置 ServiceMesh 技術,而目前開源的Istio 僅提供單一 Kubernetes 集群內部微服務治理,缺失異構容器云,跨云能力,

CNI 需要交付給容器云 L2-4 層細化至微服務內部的每個 POD 容器,應用終端交付所需要的 L2 網路連接,L3 路由,L2-4 層安全隔離,容器云整體安全,負載均衡等,

ServiceMesh 更多的致力于微服務應用層面的服務治理,致力于 L5-7 層網路服務,服務網格在每一個應用容器前部署一個 Sidecar Envoy 應用代理,提供微服務間的智能路由,分布式負載均衡,流量管理,藍綠,金絲雀發布,微服務彈性,限流熔斷,超時重試,微服務間的可視化,安全等等,
·

Docker 容器網路

Docker 提供幾種型別的網路,它決定容器之間、容器與外界之前的通信方式,

  • 基礎網路型別
    在這里插入圖片描述

  • 查看所有容器網路型別:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
c79756cf9cde        bridge              bridge              local
204025a5abbc        host                host                local
9b9024f5ac40        macvlan             macvlan             local
6478888548d8        none                null                local
p2e02u1zhn8x        overlay             overlay             swarm

bridge 模式

bridge 模式的 Docker 網路基于 Linux 的虛擬網路技術來實作,Docker Container 的網路介面默認都是虛擬介面,可以充分發揮資料在不同 Container 之間或跨主機的 Container 之間的轉發效率,這是因為 Linux 虛擬網路技術通過在內核中的資料復制來實作虛擬介面之間的資料轉發,即:發送介面的發送快取中的資料包將被直接復制到接收介面的接收快取中,而無需通過外部物理網路設備進行交換,

當 Docker Daemon 啟動后,會在宿主機上創建一個名為 docker0 的 Linux Bridge,在此宿主機上啟動的 Docker Container 都會連接到這個虛擬網橋上,Docker Daemon 會從 docker0(一個虛擬的 L2 網路)子網中分配一個 IP 給 Container 使用,并設定 docker0 的 IP 地址為 Container 的默認網關,同時,在宿主機上創建一對 veth pair 虛擬網線設備,Docker Daemon 將 veth pair 設備的一端插入新建的 Container 中,并命名為eth0(容器的網卡),另一端插入 docker0 Linux Bridge 中,以 vethxxx 格式命名,

在這個網路的容器之間可以相互通信,外界想要訪問到這個網路中的 Containers 也同樣需要接入 bridge 網路并通過 iptables 做了 DNAT 規則,實作內外部地址轉換,

在這里插入圖片描述

$ ip a
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:46:c3:00:eb brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:46ff:fec3:eb/64 scope link
       valid_lft forever preferred_lft forever

$ docker run -itd --name box1 busybox

$ docker exec -it box1 sh

/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

/ # ip r
default via 172.17.0.1 dev eth0
172.17.0.0/16 dev eth0 scope link  src 172.17.0.2

$ brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.024246c300eb	no		vethd4ae072

host 模式

如果啟動 Container 的時候使用 host 模式,那么這個容器將不會獲得一個獨立的 Network Namespace,而是和宿主機共用一個 Network Namespace,也就是說 Container 不會虛擬出自己的網卡,配置自己的 IP 等,而是直接使用宿主機的 IP 和埠,

當然,Container 的其他方面,如:檔案系統、行程串列等還是和宿主機隔離的,只用這種網路的容器會使用主機的網路,這種網路對外界是完全開放的,能夠訪問到主機,就能訪問到容器,

$ docker run -itd --network host --name box2 busybox

$ docker exec -it box2 sh

/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:94:84:10 brd ff:ff:ff:ff:ff:ff
    inet 172.18.22.204/24 brd 172.18.22.255 scope global dynamic eth0
       valid_lft 48054sec preferred_lft 48054sec
    inet6 fe80::f816:3eff:fe94:8410/64 scope link
       valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
    link/ether 02:42:46:c3:00:eb brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:46ff:fec3:eb/64 scope link
       valid_lft forever preferred_lft forever
7: vethd4ae072@if6: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue master docker0
    link/ether ce:95:19:64:d0:d4 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::cc95:19ff:fe64:d0d4/64 scope link
       valid_lft forever preferred_lft forever

macvlan 模式

對于某些應用程式,比如需要監視網路流量,期望直接連接到物理網路,這種情況下,可以使用 macvlan 的網路模式,macvlan 驅動程式不僅將 IP 地址分配給容器,而且還將物理 MAC 地址分配給容器,通過 macvlan 還可以實作跨主機容器之前的通信,

  1. 創建一個 macvlan 網路:
docker network create -d macvlan --subnet=172.16.86.0/24 --gateway=172.16.86.1 -o parent=eth0 macvlan1
  1. 設定網卡為混雜模式:
ip link set eth0 promisc on
  1. 創建使用 macvlan 網路的容器:
docker run -it --network macvlan1  --ip=172.16.86.2 busybox /bash

Container 模式

Container 模式,又稱為 Docker links,是一種 Docker Container 之間的通信機制,如果一個新容器鏈接到一個已有容器,新容器將會通過環境變數獲得已有容器的鏈接資訊,通過提供給信任容器有關已有容器的鏈接資訊,實作容器間的通信,

Container 模式和 host 模式很類似,只是 Container 模式創建容器共享的是其他容器的 IP 和 Port 而不是物理機的,此模式容器自身是不會配置網路和埠,創建此模式的容器進去后會發現里邊的 IP 是你所指定的那個容器 IP 并且 Port 也是共享的,當然,其它還是互相隔離的,如行程等,

docker run -it --network container:<container ID>

在這里插入圖片描述

none 模式

使用 none 模式 Container 會擁有自己的 Network Namespace,但是,并不為 Container 進行任何網路配置,也就是說,這個 Container 不會具有網卡、IP、路由等資訊,需要手動的為 Container 添加網卡、配置 IP 等,使用此種網路的容器會完全隔離,

使用的 none 模式后,這個容器就是封閉的,不會去參與網路通信,這樣就能夠保證容器的安全性,

$ docker run -itd --network none --name box3 busybox

$ docker exec -it box3 sh

/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

Overlay 模式

Overlay 模式使用在 Swarm 集群中,用于連接跨主機 Docker Container,允許不同宿主機上的容器相互通信,Overlay 模式在 Docker 集群節點間加入了一層虛擬網路,它有獨立的虛擬網段,因此 Container 發送的內容,會先發送到虛擬子網,再由虛擬子網包裝為宿主機的真實網址進行發送,

在這里插入圖片描述

# 初始化 manager node,
$ docker swarm init

# 添加 worker node 到 manager,
$ docker swarm join --token <token> <manager_host>:2377

# 新建一個 Overlay 網路
$ docker network create --driver=overlay --attachable overlay

# 分別在不同的 worker node 上啟動一個 busybox 容器,并連接到 Overlay 網路
$ docker run -it --network overlay --name box4 sh

如此的,在同一個 Overlay 網路上的跨主機 Container 就可以互相通信了,

基于 Swarm 我們還可以管理 Containers 集群服務,例如:創建一個具有五副本的連接到 Overlay 網路的 Nginx Cluster,暴露埠為 80:

$ docker service create --name my-nginx --publish target=80,published=80 --replicas=5 --network overlay nginx

在這個 Nginx Cluster 中,如果任一節點結束一個副本,那么集群服務就會重啟一個新的副本,以此保持所有 Worker Node 中的 Nginx 副本數量為五個,

容器埠映射

核心選項:

  • -p 宿主機埠:將容器內應用監聽埠映射到物理宿主機的特定埠上,

示例:

  • 自定義映射:
docker run -d -p 8888:80  nginx:latest 

在這里插入圖片描述

  • 隨機映射
# 需要鏡像支持
docker run -P

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/154082.html

標籤:其他

上一篇:七天學會JavaScript~Day1

下一篇:趣談鴻蒙,一文盡始終

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more