精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何正確且快速構建Docker優質的安全鏡像

開發 前端
可能每個人都聽說過Docker,并且大多數開發人員都熟悉并使用過Docker,諸如構建Docker鏡像之類的基本操作。一般而言,構建鏡像非常簡單,只需運行docker built -t name:tag .,但其實還有很多其他可優化的東西,尤其是在優化構建過程和所創建的最終鏡像方面。

可能每個人都聽說過Docker,并且大多數開發人員都熟悉并使用過Docker,諸如構建Docker鏡像之類的基本操作。一般而言,構建鏡像非常簡單,只需運行docker built -t name:tag .,但其實還有很多其他可優化的東西,尤其是在優化構建過程和所創建的最終鏡像方面。

因此,在本文中,我們將研究如何優化Docker鏡像的構建過程,以使我們能夠在最短構建時間內構建最小、最安全的滿足生產需求的Docker鏡像。 

[[383222]] 

緩存以加快構建速度

鏡像的構建時間大都花在系統軟件包和應用程序依賴包的下載和安裝。但是,這些通常不會經常變更,因此推薦進行緩存。

從系統包和工具開始——通常在FROM后運行,以確保已將其緩存。無論您使用哪個Linux發行版作為基本鏡像,都應該得到如下所示的結果: 

  1. FROM ... # any viable base image like centos:8, ubuntu:21.04 or alpine:3.12.3 
  2.  
  3. # RHEL/CentOS 
  4. RUN yum install ... 
  5. # Debian 
  6. RUN apt-get install ... 
  7. # Alpine 
  8. RUN apk add ... 
  9.  
  10. # Rest of the Dockerfile (COPY, RUN, CMD...) 

另外,您甚至可以將這些相關命令提取到獨立的Dockerfile以構建自己的基礎鏡像。然后可以將該鏡像推送到鏡像倉庫,以便您和其他人可以在其他的Dockerfile中引用。

這樣,您無需再去擔心系統包以及相關的依賴項,除非您需要升級它們或添加與刪除某些內容。

在系統包之后,我們通常要安裝應用程序依賴項。這些可能是來自Maven存儲庫中的Java庫(默認存儲在.m2目錄中),JavaScript模塊node_modules或Python庫venv。

與系統依賴項相比,這些更改的頻率更高,但不足以保證每次構建都能進行完整的重新下載和重新安裝。但是如果對應Dockerfile寫得不好,您會注意到,即使未修改依賴項,也不會使用緩存: 

  1. FROM ... # any viable base image like python:3.8, node:15 or openjdk:15.0.1 
  2.  
  3. # Copy everything at once 
  4. COPY . . 
  5.  
  6. # Java 
  7. RUN mvn clean package 
  8. Or Python 
  9. RUN pip install -r requirements.txt 
  10. Or JavaScript 
  11. RUN npm install 
  12. # ... 
  13. CMD [ "..." ] 

這是為什么?問題出在COPY . .,Docker在構建的每個步驟中都使用緩存,直到它遇到新的或已修改的命令/層。

在這種情況下,當我們將所有內容復制到鏡像中時—包括未更改的依賴關系列表以及已修改的源代碼。

Docker會繼續進行并重新下載且重新安裝所有依賴關系。因為修改過源碼文件,它不再能夠在該層使用緩存。為避免這種情況,我們必須分兩個步驟復制文件: 

  1. FROM ... # any viable base image like python:3.8, node:15 or openjdk:15.0.1 
  2.  
  3. COPY pom.xml ./pom.xml                   # Java 
  4. COPY requirements.txt ./requirements.txt # Python 
  5. COPY package.json ./package.json         # JavaScript 
  6.  
  7. RUN mvn dependency:go-offline -B         # Java 
  8. RUN pip install -r requirements.txt       # Python 
  9. RUN npm install                           # JavaScript 
  10.  
  11. COPY ./src ./src/ 
  12. # Rest of Dockerfile (build application; set CMD...) 

首先,我們添加列出所有應用程序依賴項的文件并安裝它們。如果此文件沒有更改,則將緩存所有更改。只有這樣,我們才能將其余(修改過的)源碼復制到鏡像中,并運行應用程序代碼的測試和構建。對于更多的“高級”方法,我們使用Docker的BuildKit及其實驗功能進行相同的操作: 

  1. # syntax=docker/dockerfile:experimental 
  2.  
  3. FROM ... # any viable base image like python:3.8, openjdk:15.0.1 
  4. COPY pom.xml ./pom.xml                   # Java 
  5. COPY requirements.txt ./requirements.txt # Python 
  6.  
  7. RUN --mount=type=cache,target=/root/.m2 mvn dependency:go-offline -B             # Java 
  8. RUN --mount=type=cache,target=/root/.cache/pip pip install -r requirements.txt   # Python 

上面的代碼顯示了如何使用命令--mount選項RUN來選擇緩存目錄。如果您要顯式使用非默認緩存位置,這將很有幫助。

但是,如果要使用此功能,則必須包括指定語法版本的標題行(如上所述),并使用來運行構建,比如:DOCKER_BUILDKIT=1 docker build name:tag .。

在這些文檔(https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/syntax.md#run---mounttypecache)中可以找到有關實驗功能的更多信息。

到目前為止,所有內容僅適用于本地構建—對于CI,情況則不同,并且通常每個工具/提供程序都會有所不同,但對于其中的任何一個,您將需要一些持久性卷來存儲緩存/依賴項 。例如,對于Jenkins,您可以在代理中使用存儲。

對于在Kubernetes上運行的Docker構建(無論是使用JenkinsX,Tekton還是其他),您將需要Docker守護進程,該守護進程可以在Docker(DinD)中使用Docker進行部署,DinD是在Docker容器中運行的Docker守護進程。

至于構建本身,您將需要一個連接到DinD socket的pod(容器)來運行docker build命令。

為了演示和簡化操作,我們可以使用以下pod進行操作: 

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4. name: docker-build 
  5. spec: 
  6. containers: 
  7. name: dind # Docker in Docker container 
  8.   image: docker:19.03.3-dind 
  9.   securityContext: 
  10.     privileged: true 
  11.   env: 
  12.   - name: DOCKER_TLS_CERTDIR 
  13.     value: '' 
  14.   volumeMounts: 
  15.     - name: dind-storage 
  16.       mountPath: /var/lib/docker 
  17. name: docker # Builder container 
  18.   image: docker:19.03.3-git 
  19.   securityContext: 
  20.     privileged: true 
  21.   command: ['cat'
  22.   tty: true 
  23.   env: 
  24.   - name: DOCKER_BUILDKIT 
  25.     value: '1' 
  26.   - name: DOCKER_HOST 
  27.     value: tcp://localhost:2375 
  28. volumes: 
  29. name: dind-storage 
  30.   emptyDir: {} 
  31. name: docker-socket-volume 
  32.   hostPath: 
  33.     path: /var/run/docker.sock 
  34.     type: File 

上面的容器由2個容器組成—一個用于DinD,一個用于鏡像構建。要使用構建容器運行構建,可以訪問其shell,克隆一些存儲庫并運行構建流程: 

  1. ~ $ kubectl exec --stdin --tty docker-build -- /bin/sh # Open shell session 
  2. ~ # git clone https://github.com/username/reponame.git # Clone some repository 
  3. ~ # cd reponame 
  4. ~ # docker build --build-arg BUILDKIT_INLINE_CACHE=1 -t name:tag --cache-from username/reponame:latest . 
  5. ... 
  6. => importing cache manifest from martinheinz/python-project-blueprint:flask 
  7. ... 
  8. => => writing image sha256:... 
  9. => => naming to docker.io/library/name:tag 
  10. => exporting cache 
  11. => => preparing build cache for export 

最終docker build使用了一些新選項—--cache-from image:tag,來告訴Docker它應該使用(遠程)倉庫中的指定鏡像作為緩存源。這樣,即使緩存的層未存儲在本地文件系統中,我們也可以利用緩存的優點。

另一個選項----build-arg BUILDKIT_INLINE_CACHE=1用于在創建緩存元數據時將其寫入鏡像。這必須用于--cache-from工作,有關更多信息,請參閱文檔(https://docs.docker.com/engine/reference/commandline/build/#specifying-external-cache-sources)。

最小鏡像

快速構建確實很讓人高興,但是如果您擁有真正的“thick”圖像,則仍然需要花費很長的時間才能push/pull它們,而且胖鏡像很可能還包含許多無用的庫,工具以及諸如此類的東西,這些都使鏡像變得更加臃腫。

易受攻擊,因為它會造成更大的攻擊面。

制作更小的鏡像的最簡單方法是使用Alpine Linux之類的基礎鏡像,而不是基于Ubuntu或RHEL的鏡像。另一個好的方法是使用多步驟Docker構建,其中您使用一個鏡像進行構建(第一個FROM命令),而使用另一個更小的鏡像來運行應用程序(第二個/最后一個FROM),例如: 

  1. # 332.88 MB 
  2. FROM python:3.8.7 AS builder 
  3.  
  4. COPY requirements.txt /requirements.txt 
  5. RUN /venv/bin/pip install --disable-pip-version-check -r /requirements.txt 
  6.  
  7. only 16.98 MB 
  8. FROM python:3.8.7-alpine3.12 as runner 
  9.  
  10. # copy only the dependencies installation from the 1st stage image 
  11. COPY --from=builder /venv /venv 
  12. COPY --from=builder ./src /app 
  13.  
  14. CMD ["..."

上面顯示了我們首先在基本的Python 3.8.7鏡像中準備了應用程序及其依賴項,該鏡像很大,為332.88 MB。在此處,我們安裝了應用程序所需的虛擬環境和庫。

然后,我們切換到更小的基于Alpine的鏡像,該鏡像僅為16.98 MB。我們將先前創建的整個虛擬環境以及源代碼復制到該鏡像。這樣,我們最終得到的圖像要小得多,鏡像層更少,同時也有更少的不必要的工具和二進制文件。

要記住的另一件事是我們在每次構建過程中產生的層數。FROM,COPY,RUN以及CMD是都會生成新的層。至少在RUN的情況下,我們可以通過將所有RUN命令合并成這樣的一個命令來輕松地減少它創建的層的數量: 

  1. # Bad, Creates 4 layers 
  2. RUN yum --disablerepo=* --enablerepo="epel" 
  3. RUN yum update 
  4. RUN yum install -y httpd 
  5. RUN yum clean all -y 
  6.  
  7. # Good, creates only 1 layer 
  8. RUN yum --disablerepo=* --enablerepo="epel" && \ 
  9.   yum update && \ 
  10.   yum install -y httpd && \ 
  11.   yum clean all -y 

我們可以更進一步,完全擺脫可能很重的基礎鏡像。為此,我們將使用特殊的FROM scratch信號通知Docker應使用最小的基本鏡像,而下一個命令將是最終鏡像的第一層。

這對于以二進制文件運行且不需要大量工具的應用程序特別有用,例如Go,C ++或Rust應用程序。但是,這種方法要求二進制文件是靜態編譯的,因此它不適用于Java或Python之類的語言。FROM scratchDockerfiles的示例可能像這樣: 

  1. FROM golang as builder 
  2.  
  3. WORKDIR /go/src/app 
  4. COPY . . 
  5. Static build is required so that we can safely use 'scratch' base image 
  6. RUN CGO_ENABLED=0 go install -ldflags '-extldflags "-static"' 
  7.  
  8. FROM scratch 
  9. COPY --from=builder /go/bin/app /app 
  10. ENTRYPOINT ["/app"

很簡單,對吧?借助這種Dockerfile,我們可以生成僅約3MB的鏡像!

鎖定版本

速度和大小是大多數人關注的兩件事,而鏡像的安全性成為人們的事后考慮。有幾種簡單的方法可以將鏡像鎖定下來,并限制攻擊者可以利用的攻擊面。

最基本的建議是鎖定所有庫、包、工具和基本鏡像的版本,這不僅對安全性很重要,而且對鏡像的穩定性也很重要。如果您對鏡像使用最新標記,或者您沒有在Python的requirements.txt或JavaScript的package.json中指定版本,您在構建期間下載的鏡像/庫可能與應用程序代碼不兼容,或者使容器暴露于漏洞中。

當您想將所有內容鎖定到特定版本時,還應該定期更新所有這些依賴項,以確保您擁有所有可用的最新安全補丁程序和修補程序。

即使您真的很努力地避免所有依賴中的任何漏洞,仍然會有一些您錯過或尚未修復/發現的漏洞。所以,為了減輕任何可能的攻擊的影響,最好避免以根用戶身份運行容器。

因此,應該在Dockerfiles中包含用戶1001,以表示從Dockerfiles創建的容器應該并且可以作為非根用戶(理想情況下是任意用戶)運行。當然,這可能需要您修改應用程序并選擇正確的基本鏡像,因為一些常見的基本映像(如nginx)需要根權限(例如,由于特權端口)。

通常很難在Docker鏡像中找到與避免漏洞,但是如果鏡像僅包含運行應用程序所需的最低限度,則可能會更容易一些。Google發行的Distroless(https://github.com/GoogleContainerTools/distroless)是一個這樣的鏡像。

將Distroless鏡像修剪到甚至沒有shell或軟件包管理器的程度,這使得它們比Debian或基于Alpine的鏡像在安全性方面要好得多。如果您使用的是多步驟Docker構建,那么大多數情況下,切換到Distroless runner映像非常簡單: 

  1. FROM ... AS builder 
  2.  
  3. # Build the application ... 
  4.  
  5. # Python 
  6. FROM gcr.io/distroless/python3 AS runner 
  7. # Golang 
  8. FROM gcr.io/distroless/base AS runner 
  9. # NodeJS 
  10. FROM gcr.io/distroless/nodejs:10 AS runner 
  11. # Rust 
  12. FROM gcr.io/distroless/cc AS runner 
  13. # Java 
  14. FROM gcr.io/distroless/java:11 AS runner 
  15.  
  16. # Copy application into runner and set CMD... 
  17.  
  18. # More examples at https://github.com/GoogleContainerTools/distroless/tree/master/examples 

除了最終鏡像及其容器中可能存在的漏洞外,我們還必須考慮用于構建鏡像的Docker守護程序和容器運行時。因此,與我們的所有鏡像一樣,我們不應允許Docker與root用戶一起運行,而應使用所謂的rootless模式。

這個文檔(https://docs.docker.com/engine/security/rootless/)是關于如何在Docker中進行設置的完整指南,如果您不想調整配置,那么您可能要考慮切換到podman,podman默認情況下在rootless 和 daemonless 下運行的。

結論

容器和Docker已有很長的歷史了,每個人都可以學習和使它用,而不僅僅是簡簡單單的使用。本文中的技巧和示例應該可以提高您的Docker知識并改善所使用的Docker鏡像質量。

但是,在構建Docker鏡像之外,還有許多其他事情可以改善我們處理鏡像和容器的方式。例如,應用seccomp策略,使用cgroups或可能使用完全不同的容器運行時與引擎來限制資源消耗。

 

責任編輯:華軒 來源: 新鈦云服
相關推薦

2024-02-20 08:08:43

2019-10-16 10:08:58

DockerLinuxWindows

2025-01-26 16:57:02

2022-05-26 08:38:10

Docker鏡像運維

2016-02-16 13:21:33

2020-11-25 08:57:29

Redis Docke

2010-01-04 15:27:05

2024-01-15 08:59:31

Docker優化

2017-11-13 17:17:11

Docker鏡像Go

2021-12-07 06:02:15

Redis Docker運維

2010-02-04 16:43:50

2019-09-10 13:34:30

Linux操作系統軟件

2021-10-20 07:18:51

Harbor鏡像項目

2017-03-24 09:24:21

HarborDocker鏡像倉庫

2019-11-27 18:33:32

Docker架構數據

2010-05-10 12:39:42

Oracle OCR鏡

2014-02-21 15:35:30

應用交付高頻交易

2020-02-26 14:50:41

React搜索前端

2010-06-30 15:52:05

2016-01-28 10:07:07

DockerDocker鏡像
點贊
收藏

51CTO技術棧公眾號

蜜桃色一区二区三区| 国产一区二区在线观看免费播放 | 成人av在线资源网| 国产91精品久久久久久久| 五月天精品在线| 国产成人一二片| 欧美在线观看你懂的| 久久av高潮av| 1pondo在线播放免费| 粉嫩av一区二区三区| 国产精品麻豆va在线播放| 精品一区二区三区四| 久久一级电影| 亚洲裸体xxxx| 一级全黄裸体片| www成人在线视频| 亚洲成人资源在线| 日韩第一页在线观看| 精品成人一区二区三区免费视频| 国产精品一区二区你懂的| 国产精品99一区| 激情五月色婷婷| 午夜精品偷拍| 自拍偷拍亚洲精品| 性高潮久久久久久久| 久久亚州av| 日韩精品在线看片z| 国产福利在线免费| 日韩欧美一区二区三区免费观看| 国产精品欧美一区二区三区不卡| 亚洲免费高清视频在线| 久久久久久国产精品免费免费| 国产精品久久久久久久一区二区| 玖玖国产精品视频| 2019中文字幕免费视频| 精品一区二区三区四| 在线看片不卡| 久久久国产精彩视频美女艺术照福利| 欧美激情aaa| 免费视频亚洲| 亚洲男女性事视频| 蜜桃传媒一区二区亚洲av| 99热这里只有精品首页| 欧美成人精品二区三区99精品| 中文字幕亚洲影院| 伊人国产精品| 日韩一区二区影院| 久久发布国产伦子伦精品| 精品视频一区二区三区| 91精品国产黑色紧身裤美女| 伊人成人免费视频| 久久久久亚洲精品中文字幕| 日韩欧美成人午夜| 中文字幕亚洲日本| 加勒比色老久久爱综合网| 亚洲第一精品福利| www.自拍偷拍| 精品日产免费二区日产免费二区| 这里只有精品视频在线| 国产亚洲精品久久久久久豆腐| 首页国产精品| 成人97在线观看视频| 久久国产精品波多野结衣av| 好吊日精品视频| 午夜精品久久久久久99热软件| 国产成人精品片| 亚洲欧美视频| 国产精品视频自在线| 国产男女无套免费网站| 丁香亚洲综合激情啪啪综合| 精品一区二区三区自拍图片区| 神马精品久久| 久久久一区二区| 永久久久久久| 2018av在线| 欧美自拍偷拍午夜视频| 日本黄色一级网站| 日韩美女国产精品| zzjj国产精品一区二区| 免费又黄又爽又色的视频| 亚洲影音一区| 91免费看国产| 无码国产精品高潮久久99| 国产人伦精品一区二区| 黄色a级在线观看| 91超碰在线| 欧美吞精做爰啪啪高潮| 激情av中文字幕| 日韩伦理一区二区三区| 久久精品电影网| 99热国产在线观看| 久久99深爱久久99精品| 国产综合av一区二区三区| eeuss影院在线播放| 一区二区国产盗摄色噜噜| 337p粉嫩大胆噜噜噜鲁| 国产一区 二区| 日韩精品视频在线观看网址| 精品无码一区二区三区蜜臀| 国产精品视频久久一区| 91九色综合久久| 激情综合闲人网| 一区二区三区小说| 一路向西2在线观看| 国产三级精品三级在线观看国产| 欲色天天网综合久久| 国产污片在线观看| 精品一区二区久久| 日韩高清av| 国产黄大片在线观看| 91精品国产综合久久小美女| 免费看黄色的视频| 99在线精品免费视频九九视| 亚洲专区中文字幕| av网站无病毒在线| 欧美性猛交视频| 在线中文字日产幕| 91精品成人| 国产精品自产拍高潮在线观看| 五月婷婷深深爱| 亚洲伊人伊色伊影伊综合网| 777一区二区| 欧美中文字幕一区二区| 欧美在线欧美在线| 欧美熟妇另类久久久久久不卡| 专区另类欧美日韩| 天天爱天天操天天干| 一本色道久久综合亚洲精品酒店| 久久久久久国产精品美女| 国产精品一区二区免费视频| 中文一区一区三区高中清不卡| 欧美黄网站在线观看| 久久a级毛片毛片免费观看| 欧美另类xxx| www.五月天激情| 亚洲欧美日本在线| 中国老熟女重囗味hdxx| 亚洲精品成人无限看| 国产欧美在线播放| 日本成人在线播放| 欧美日韩国产乱码电影| 欧美老女人性生活视频| 美女视频黄 久久| 亚洲不卡中文字幕| 唐人社导航福利精品| 亚洲人成五月天| 欧美性猛交xxxx乱大交hd| 国产亚洲美州欧州综合国| av在线无限看| 99久久www免费| 91在线观看免费网站| av免费在线网站| 日韩美女天天操| 国产精品成人网站| 91视频免费看| 国产精品乱码久久久久| 成人网18免费网站| 96pao国产成视频永久免费| 肉肉视频在线观看| 亚洲国产精品一区二区三区| 国产成人亚洲精品自产在线 | 欧美成人在线免费观看| 日本综合字幕| 日韩中文字幕视频在线| 99久久精品国产成人一区二区| 亚洲欧美区自拍先锋| 亚洲一区二区三区四区av| 国产欧美一区二区三区国产幕精品| 麻豆久久久9性大片| 精品亚洲美女网站| 日韩视频在线一区| 成人无码一区二区三区| 欧美香蕉大胸在线视频观看| 日本一道本视频| 国产成人亚洲精品青草天美| 日本成年人网址| 999视频精品| 国内视频一区二区| 国产精品久久乐| 久久久噜噜噜久久中文字免| 黄色片在线播放| 欧美一区二区在线观看| 日韩大片免费在线观看| 国产精品女上位| 精品久久久久久无码人妻| 老妇喷水一区二区三区| 免费成人深夜夜行网站视频| 欧美三级午夜理伦三级小说| 国产精品久久久精品| 色www永久免费视频首页在线 | 国产成人免费观看| 日本综合视频| 午夜剧场成人观在线视频免费观看| 国产视频在线看| 日韩欧美不卡一区| 中文字幕一区二区三区四区视频| 亚洲国产日韩av| 成人信息集中地| 91亚洲精华国产精华精华液| 天天摸天天舔天天操| 毛片一区二区| 日产精品久久久久久久蜜臀| 欧美日韩伦理| 国产综合色一区二区三区| 成人污版视频| 国产精品第1页| 国产激情视频在线看| 美日韩在线视频| av在线天堂| 亚洲男女自偷自拍图片另类| 粉嫩小泬无遮挡久久久久久| 欧美久久一二三四区| 精品成人无码久久久久久| 五月天一区二区三区| 538任你躁在线精品视频网站| 久久久久久久久久久久久女国产乱| 男人女人拔萝卜视频| 捆绑调教一区二区三区| 国产v亚洲v天堂无码久久久| 国产精品亚洲综合久久| 成人免费观看在线| 欧美日本不卡| 中国老女人av| 97久久视频| 一区二区精品免费视频| av在线不卡免费观看| 青娱乐一区二区| 台湾色综合娱乐中文网| 韩国精品一区二区三区六区色诱| 天堂va在线高清一区| 91色在线观看| 日本免费一区二区三区视频| 国产综合在线观看视频| 久久69成人| 成人免费看片视频| 亚洲综合资源| 亚洲影院高清在线| 麻豆一区在线| 99国精产品一二二线| 日韩精品免费视频一区二区三区| 国产精品一区二区三区久久久| 亚洲第一会所001| 国产精品色午夜在线观看| 成人国产精选| 91精品国产综合久久久久久久久| 欧美视频第一| 91理论片午午论夜理片久久| 国产一区2区在线观看| 97在线中文字幕| 久久a级毛片毛片免费观看| 久久99精品国产一区二区三区| 巨人精品**| 欧美性天天影院| 成人久久电影| 日本三级福利片| 欧美精品97| 欧美 丝袜 自拍 制服 另类 | www.天天射.com| 美女mm1313爽爽久久久蜜臀| 亚洲18在线看污www麻豆| 国产一本一道久久香蕉| 亚洲欧美激情一区二区三区| 北条麻妃国产九九精品视频| 9.1成人看片| 国产精品久久久久久亚洲毛片| 亚洲综合视频网站| 亚洲国产另类精品专区| 天堂网av手机版| 欧美视频在线播放| 国产熟女一区二区丰满| 亚洲国产精品久久久久秋霞不卡| 五月婷婷久久久| 中文字幕日韩综合av| 成码无人av片在线观看网站| 性色av一区二区三区免费| 婷婷激情一区| 91传媒免费看| 久久91麻豆精品一区| 一区不卡视频| 亚洲一区国产一区| 亚洲 激情 在线| 成人午夜精品一区二区三区| 熟女少妇内射日韩亚洲| 亚洲精品成a人| 日韩在线视频不卡| 日韩一区二区三区在线观看| 深夜福利在线观看直播| 久久精品免费电影| 欧美亚洲日本精品| 91亚洲国产成人精品性色| 日韩成人av在线资源| 最新视频 - x88av| 性欧美videos另类喷潮| 韩国三级丰满少妇高潮| 久久久噜噜噜久久中文字幕色伊伊 | 国产欧美日韩精品一区二区免费| 久久久无码中文字幕久...| 久久久久久婷| 人妻av一区二区| 亚洲三级电影全部在线观看高清| 欧美啪啪小视频| 日韩一级完整毛片| 在线看av的网址| 奇米一区二区三区四区久久| 日韩中文字幕无砖| 亚洲综合欧美日韩| 亚洲一区欧美二区| 制服丝袜在线第一页| 亚洲品质自拍视频| 中文无码av一区二区三区| 日韩电影第一页| 美女精品视频| 91视频-88av| 久久精品国产www456c0m| 日本在线观看a| 9人人澡人人爽人人精品| 久艹视频在线观看| 91精品国产一区二区三区蜜臀| 国产69精品久久app免费版| 77777少妇光屁股久久一区| 亚洲视频国产| 99热都是精品| 精品在线观看视频| 黄色激情小视频| 欧美午夜精品电影| 国产毛片在线看| 国产97在线亚洲| 九九精品久久| 成人三级视频在线播放 | 国产3级在线观看| 欧美日韩精品一区二区三区四区 | 欧美日韩导航| 日本中文字幕网址| 成a人片亚洲日本久久| 国产一级在线观看视频| 精品三级在线观看| 狂野欧美性猛交xxxxx视频| 91久久国产综合久久蜜月精品| 一区二区日韩欧美| 久久综合桃花网| 亚洲综合丝袜美腿| 欧美自拍偷拍一区二区| 97精品视频在线观看| 欧美精品中文| 欧美成人精品欧美一级乱| 久久中文娱乐网| 波多野结衣一区二区在线| 夜夜嗨av一区二区三区四区| 成人影院在线免费观看| 一本一道久久久a久久久精品91| 久久99精品久久久久久国产越南| 污污视频网站在线免费观看| 91精品欧美久久久久久动漫| 中文字幕伦理免费在线视频| 国产欧美日韩在线播放| 六月婷婷一区| 亚洲一级理论片| 精品少妇一区二区三区免费观看| av资源在线| 日韩影片在线播放| 国内精品久久久久影院色| 69精品久久久| 亚洲区免费影片| 96视频在线观看欧美| 日韩av在线播放不卡| 久久色视频免费观看| 一区二区国产欧美| 久久免费福利视频| 国产欧美久久一区二区三区| 婷婷激情5月天| 亚洲国产日韩精品| 在线观看av黄网站永久| 不卡一卡2卡3卡4卡精品在| 久久av最新网址| 日韩精品123区| 亚洲国产精品久久久久久| 日韩精品免费观看视频| 国内外成人激情免费视频| av电影天堂一区二区在线观看| 亚洲 小说区 图片区| 欧美久久精品一级黑人c片| 亚洲盗摄视频| 精品国产乱码久久久久久1区二区 91网址在线观看精品 | 精品久久久久久久久久久久久久久久久 | 神马午夜电影一区二区三区在线观看| 日韩av电影在线播放| 中文字幕日韩一区二区不卡| 添女人荫蒂视频| 欧美精品第1页| 亚洲第一av| 在线观看三级网站| 国产日韩精品一区二区三区| 精品毛片在线观看| 国产精品久久久久久超碰| 国内在线观看一区二区三区| 色撸撸在线视频| 日韩国产欧美精品在线| 日韩一区二区三区精品视频第3页| 日本久久久精品视频| 一区二区三区四区av|