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

構建Java鏡像的10個優秀實踐

新聞 前端
你想構建一個Java應用程序并在Docker中運行它嗎?你知道在使用Docker構建Java容器有哪些最佳實踐?

 [[398153]]

你想構建一個Java應用程序并在Docker中運行它嗎?你知道在使用Docker構建Java容器有哪些最佳實踐?

在下面的速查表中,我將為你提供構建生產級Java容器的最佳實踐,旨在優化和保護要投入生產環境中的Docker鏡像。

構建Java鏡像的10個最佳實踐

1.Docker鏡像使用確定性的標簽

2.在Java鏡像中僅安裝需要的內容

3.查找并修復Java鏡像中的安全漏洞

4.使用多階段構建Java鏡像

5.不要以root用戶身份運行Java應用程序

6.Java應用程序不要使用PID為1的進程

7.優雅下線Java應用程序

8.使用 .dockerignore文件

9.確保Java版本支持容器

10.謹慎使用容器自動化生成工具

構建一個簡單的Java容器鏡像

讓我們從簡單的Dockerfile開始,在構建Java容器時,我們經常會有如下類似的內容:

  1. FROM maven 
  2.  
  3. RUN mkdir /app 
  4.  
  5. WORKDIR /app 
  6.  
  7. COPY . /app 
  8.  
  9. RUN mvn clean install 
  10.  
  11. CMD "mvn" "exec:java" 
  12.  
  13. Copy that to a file named Dockerfile, then build and run it. 
  14.  
  15. $ docker build . -t java-application 
  16.  
  17. $ docker run -p 8080:8080 java-application 

這很簡單,而且有效。但是,此鏡像充滿錯誤。

我們不僅應該了解如何正確使用Maven,而且還應避免像上述示例那樣構建Java容器。

下面,讓我們開始逐步改進這個Dockerfile,使你的Java應用程序生成高效,安全的Docker鏡像。

1.Docker鏡像使用確定性的標簽

當使用Maven構建Java容器鏡像時,我們首先需要基于Maven鏡像。但是,你知道使用Maven基本鏡像時實際上引入了哪些內容嗎?

當你使用下面的代碼行構建鏡像時,你將獲得該Maven鏡像的最新版本:

FROM maven

這似乎是一個有趣的功能,但是這種采用Maven默認鏡像的策略可能存在一些潛在問題:

  • 你的Docker構建不是冪等的。這意味著每次構建的結果可能會完全不同,今天的最新鏡像可能不同于明天或下周的最新鏡像,導致你的應用程序的字節碼也是不同的,并且可能發生意外。因此,構建鏡像時,我們希望具有可復制的確定性行為。
  • Maven Docker鏡像是基于完整的操作系統鏡像。這樣會導致許多其他二進制文件出現在最終的生產鏡像中,但是運行你的Java應用程序不需要很多這些二進制文件。因此,將它們作為Java容器鏡像的一部分存在一些缺點:

1.鏡像體積變大,導致更長的下載和構建時間。

2.額外的二進制文件可能會引入安全漏洞。

如何解決吶?

  • 使用適合你需求的最小基礎鏡像 考慮一下-你是否需要一個完整的操作系統(包括所有額外的二進制文件)來運行你的程序?如果沒有,也許基于alpine鏡像或Debian的鏡像會更好。
  • 使用特定的鏡像 如果使用特定的鏡像,則已經可以控制和預測某些行為。如果我使用maven:3.6.3-jdk-11-slim鏡像,則已經確定我正在使用JDK 11和Maven 3.6.3。JDK和Maven的更新,將不再影響Java容器的行為。為了更加精確,你也可以使用鏡像的SHA256哈希值。使用哈希將確保你每次構建鏡像時都使用完全相同的基礎鏡像。

讓我們用這些知識更新我們的Dockerfile:

  1. FROM maven:3.6.3-jdk-11-slim@sha256:68ce1cd457891f48d1e137c7d6a4493f60843e84c9e2634e3df1d3d5b381d36c 
  2. RUN mkdir /app 
  3. WORKDIR /app 
  4. COPY . /app 
  5. RUN mvn clean package -DskipTests 

2.在Java鏡像中僅安裝需要的內容

以下命令會在容器中構建Java程序,包括其所有依賴項。這意味著源代碼和構建系統都將會是Java容器的一部分。

RUN mvn clean package -DskipTests

我們都知道Java是一種編譯語言。這意味著我們只需要由你的構建環境創建的工件,而不需要代碼本身。這也意味著構建環境不應成為Java鏡像的一部分。

要運行Java鏡像,我們也不需要完整的JDK。一個Java運行時環境(JRE)就足夠了。因此,從本質上講,如果它是可運行的JAR,那么只需要使用JRE和已編譯的Java構件來構建鏡像。

使用Maven在CI流水線中都構建編譯程序,然后將JAR復制到鏡像中,如下面的更新的Dockerfile中所示:

  1. FROM openjdk:11-jre-slim@sha256:31a5d3fa2942eea891cf954f7d07359e09cf1b1f3d35fb32fedebb1e3399fc9e 
  2.  
  3. RUN mkdir /app 
  4.  
  5. COPY ./target/java-application.jar /app/java-application.jar 
  6.  
  7. WORKDIR /app 
  8.  
  9. CMD "java" "-jar" "java-application.jar" 

3. 查找并修復Java鏡像中的安全漏洞

通過上面,我們已經開始使用適合我們需求的最小基礎鏡像了,但是,我不知道此基本鏡像中的二進制文件是否包含問題。讓我們使用安全工具(如 Snyk CLI)掃描測試我們的Docker鏡像。你可以在此處注冊免費的Snyk帳戶。

使用npm,brew,scoop或從Github下載最新的二進制文件來安裝Snyk CLI:

  1. $ npm install -g snyk 
  2.  
  3. $ snyk auth 
  4.  
  5. $ snyk container test openjdk:11-jre-slim@sha256:31a5d3fa2942eea891cf954f7d07359e09cf1b1f3d35fb32fedebb1e3399fc9e --file=Dockerfile 

使用我剛剛創建的免費帳戶來登錄。使用snyk container test可以測試任何Docker鏡像。此外,我還可以添加Dockerfile以獲得更好的建議。

Snyk在此基本鏡像中發現了58個安全問題。它們中的大多數與Debian Linux發行版附帶的二進制文件有關。 根據此信息,我將基礎鏡像切換為由adoptopenjdk提供的
openjdk11:jre-11.0.9.1_1-alpine鏡像。

  1. FROM adoptopenjdk/openjdk11:jre-11.0.9.1_1-alpine@sha256:b6ab039066382d39cfc843914ef1fc624aa60e2a16ede433509ccadd6d995b1f 

然后使用snyk container命令對此進行測試時,此鏡像沒有已知的漏洞。

以類似的方式,你可以通過snyk test命令在項目的根目錄中測試Java應用程序。我建議你在本地計算機上進行開發時,請同時測試應用程序和創建的Java容器鏡像。緊接著,對CI流水線中的鏡像和應用程序執行相同的測試自動化。

另外,請記住,隨著時間的推移會發現漏洞。一旦發現新漏洞,你可能希望得到通知。

還有,使用snyk monitor監視你的應用程序,你將能夠及時發現新的安全問題時采取適當的措施。

另外,你也可以將git存儲庫連接到Snyk,這樣我們就可以幫助查找和補救漏洞。

讓我們更新當前的Dockerfile:

  1. FROM adoptopenjdk/openjdk11:jre-11.0.9.1_1-alpine@sha256:b6ab039066382d39cfc843914ef1fc624aa60e2a16ede433509ccadd6d995b1f 
  2.  
  3. RUN mkdir /app 
  4.  
  5. COPY ./target/java-application.jar /app/java-application.jar 
  6.  
  7. WORKDIR /usr/src/project 
  8.  
  9. CMD "java" "-jar" "java-application.jar" 

4.使用多階段構建Java鏡像

在本文的前面,我們談到了我們不需要在容器中構建Java應用程序。但是,在某些情況下,將我們的應用程序構建為Docker鏡像的一部分很方便。

我們可以將Docker鏡像的構建分為多個階段。我們可以使用構建應用程序所需的所有工具來構建鏡像,并在最后階段創建實際的生產鏡像。

  1. FROM maven:3.6.3-jdk-11-slim@sha256:68ce1cd457891f48d1e137c7d6a4493f60843e84c9e2634e3df1d3d5b381d36c AS build 
  2.  
  3. RUN mkdir /project 
  4.  
  5. COPY . /project 
  6.  
  7. WORKDIR /project 
  8.  
  9. RUN mvn clean package -DskipTests 
  10.  
  11. FROM adoptopenjdk/openjdk11:jre-11.0.9.1_1-alpine@sha256:b6ab039066382d39cfc843914ef1fc624aa60e2a16ede433509ccadd6d995b1f 
  12.  
  13. RUN mkdir /app 
  14.  
  15. COPY --from=build /project/target/java-application.jar /app/java-application.jar 
  16.  
  17. WORKDIR /app 
  18.  
  19. CMD "java" "-jar" "java-application.jar" 

防止敏感信息泄漏

在創建Java應用程序和Docker鏡像時,很有可能需要連接到私有倉庫,類似settings.xml的配置文件經常會泄露敏感信息。但在使用多階段構建時,你可以安全地將settings.xml復制到你的構建容器中。帶有憑據的設置將不會出現在你的最終鏡像中。此外,如果是將憑據用作命令行參數,則可以在構建鏡像中安全地執行此操作。

使用多階段構建,你可以創建多個階段,僅將結果復制到最終的生產鏡像中。這是分離是確保在生產環境中不泄漏數據的一種方法。

哦,順便說一句,使用docker history命令查看Java鏡像的輸出:

  1. $ docker history java-application 

輸出僅顯示來自容器鏡像的信息,而不顯示構建鏡像的過程。

5.不要以Root用戶運行容器

創建Docker容器時,你需要應用最小特權原則,防止由于某種原因攻擊者能夠入侵你的應用程序,則你不希望他們能夠訪問所有內容。

擁有多層安全性,可以幫助你減少系統威脅。因此,必須確保你不以root用戶身份運行應用程序。

但默認情況下,創建Docker容器時,你將以root身份運行它。盡管這對于開發很方便,但是你不希望在生產鏡像中使用它。假設由于某種原因,攻擊者可以訪問終端或可以執行代碼。在那種情況下,它對正在運行的容器具有顯著的特權,并且訪問主機文件系統。

解決方案非常簡單。創建一個有限特權的特定用戶來運行你的應用程序,并確保該用戶可以運行該應用程序。最后,在運行應用程序之前,不要忘記使用新創建的用戶。

讓我們相應地更新我們的Dockerfile。

  1. FROM maven:3.6.3-jdk-11-slim@sha256:68ce1cd457891f48d1e137c7d6a4493f60843e84c9e2634e3df1d3d5b381d36c AS build 
  2.  
  3. RUN mkdir /project 
  4.  
  5. COPY . /project 
  6.  
  7. WORKDIR /project 
  8.  
  9. RUN mvn clean package -DskipTests 
  10.  
  11. FROM adoptopenjdk/openjdk11:jre-11.0.9.1_1-alpine@sha256:b6ab039066382d39cfc843914ef1fc624aa60e2a16ede433509ccadd6d995b1f 
  12.  
  13. RUN mkdir /app 
  14.  
  15. RUN addgroup --system javauser && adduser -S -s /bin/false -G javauser javauser 
  16.  
  17. COPY --from=build /project/target/java-application.jar /app/java-application.jar 
  18.  
  19. WORKDIR /app 
  20.  
  21. RUN chown -R javauser:javauser /app 
  22.  
  23. USER javauser 
  24.  
  25. CMD "java" "-jar" "java-application.jar" 

6.Java應用程序不要使用PID為1的進程

在許多示例中,我看到了使用構建環境來啟動容器化Java應用程序的常見錯誤。

上面,我們了解了要在 Java容器中使用Maven或Gradle的重要性,但是使用如下命令,會有不同的效果:

  • CMD “mvn” “exec:java”
  • CMD [“mvn”, “spring-boot run”]
  • CMD “gradle” “bootRun”
  • CMD “run-app.sh”

在Docker中運行應用程序時,第一個應用程序將以進程ID為1(PID=1)運行。Linux內核會以特殊方式處理PID為1的進程。通常,進程號為1的PID上的過程是初始化過程。如果我們使用Maven運行Java應用程序,那么如何確定Maven將類似SIGTERM信號轉發給Java進程呢?

如果像下面的示例,那樣運行Docker容器,則Java應用程序將具有PID為1的進程。

  1. CMD“ java”“-jar”“ application.jar” 

請注意,docker kill和docker stop命令僅向PID為1的容器進程發送信號。例如,如果你正在運行Java應用的shell腳本,/bin/sh不會將信號轉發給子進程。

更為重要的是,在Linux中,PID為1的容器進程還有一些其他職責。在“ 《Docker和僵尸進程問題》”一文中對它們進行了很好的描述。因此,在某些情況下,你不希望應用程序成為PID為1的進程,因為你不知道如何處理這些問題。一個很好的解決方案是使用dumb-init。

  1. RUN apk add dumb-init 
  2.  
  3. CMD "dumb-init" "java" "-jar" "java-application.jar" 

當你像這樣運行Docker容器時,dumb-init會占用PID為1的容器進程并承擔所有責任。你的Java流程不再需要考慮這一點。

我們更新后的Dockerfile現在看起來像這樣:

  1. FROM maven:3.6.3-jdk-11-slim@sha256:68ce1cd457891f48d1e137c7d6a4493f60843e84c9e2634e3df1d3d5b381d36c AS build 
  2.  
  3. RUN mkdir /project 
  4.  
  5. COPY . /project 
  6.  
  7. WORKDIR /project 
  8.  
  9. RUN mvn clean package -DskipTests 
  10.  
  11. FROM adoptopenjdk/openjdk11:jre-11.0.9.1_1-alpine@sha256:b6ab039066382d39cfc843914ef1fc624aa60e2a16ede433509ccadd6d995b1f 
  12.  
  13. RUN apk add dumb-init 
  14.  
  15. RUN mkdir /app 
  16.  
  17. RUN addgroup --system javauser && adduser -S -s /bin/false -G javauser javauser 
  18.  
  19. COPY --from=build /project/target/java-code-workshop-0.0.1-SNAPSHOT.jar /app/java-application.jar 
  20.  
  21. WORKDIR /app 
  22.  
  23. RUN chown -R javauser:javauser /app 
  24.  
  25. USER javauser 
  26.  
  27. CMD "dumb-init" "java" "-jar" "java-application.jar" 

7.優雅下線Java應用程序

當你的應用程序收到關閉信號時,理想情況下,我們希望所有內容都能正常關閉。根據你開發應用程序的方式,中斷信號(SIGINT)或CTRL + C可能導致立即終止進程。

這可能不是你想要的東西,因為諸如此類的事情可能會導致意外行為,甚至導致數據丟失。

當你將應用程序作為Payara或Apache Tomcat之類的Web服務器的一部分運行時,該Web服務器很可能會正常關閉。對于某些支持可運行應用程序的框架也是如此。例如,Spring Boot具有嵌入式Tomcat版本,可以有效地處理關機問題。

當你創建一個獨立的Java應用程序或手動創建一個可運行的JAR時,你必須自己處理這些中斷信號。

解決方案非常簡單。添加一個退出鉤子(hook ),如下面的示例所示。收到類似SIGINT信號后,優雅下線應用程序的進程將會被啟動。

  1. Runtime.getRuntime().addShutdownHook(new Thread() { 
  2.    @Override 
  3.    public void run() { 
  4.        System.out.println("Inside Add Shutdown Hook"); 
  5.    } 
  6. }); 

誠然,與Dockerfile相關的問題相比,這是一個通用的Web應用程序問題,但在容器環境中更重要。

8.使用 .dockerignore文件

為了防止不必要的文件污染git存儲庫,你可以使用.gitignore文件。

對于Docker鏡像,我們有類似的東西-.dockerignore文件。類似于git的忽略文件,它是為了防止Docker鏡像中出現不需要的文件或目錄。同時,我們也不希望敏感信息泄漏到我們的Docker鏡像中。

請參閱以下示例的.dockerignore:

  1. .dockerignore 
  2. **/*.log 
  3. Dockerfile 
  4. .git 
  5. .gitignore 

使用.dockerignore文件的要點是:

  • 跳過僅用于測試目的的依賴項。
  • 使你免于泄露密鑰或憑據信息進入Java Docker鏡像的文件。
  • 另外,日志文件也可能包含你不想公開的敏感信息。
  • 保持Docker鏡像的美觀和整潔,本質上是使鏡像變小。除此之外,它還有助于防止意外行為。

9.確保Java版本支持容器

Java虛擬機(JVM)是一件了不起的事情。它會根據其運行的系統進行自我調整。有基于行為的調整,可以動態優化堆的大小。但是,在Java 8和Java 9等較舊的版本中,JVM無法識別容器設置的CPU限制或內存限制。這些較舊的Java版本的JVM看到了主機系統上的全部內存和所有CPU容量。Docker設置的限制將被忽略。

隨著Java 10的發布,JVM現在可以感知容器,并且可以識別容器設置的約束。該功能UseContainerSupport是JVM標志,默認情況下設置為活動狀態。Java 10中發布的容器感知功能也已移植到Java-8u191。

對于Java 8之前的版本,你可以手動嘗試使用該-Xmx標志來限制堆大小,但這是一個痛苦的練習。緊接著,堆大小不等于Java使用的內存。對于Java-8u131和Java 9,容器感知功能是實驗性的,你必須主動激活。

-XX:+ UnlockExperimentalVMOptions -XX:+ UseCGroupMemoryLimitForHeap

最好的選擇是將Java更新到10以上的版本,以便默認情況下支持容器。不幸的是,許多公司仍然嚴重依賴Java8。這意味著你應該在Docker鏡像中更新到Java的最新版本,或者確保至少使用Java 8 update 191或更高版本。

10.謹慎使用容器自動化生成工具

你可能會偶然發現適用于構建系統的出色工具和插件。除了這些插件,還有一些很棒的工具可以幫助你創建Java容器,甚至可以根據需要自動發布應用。

從開發人員的角度來看,這看起來很棒,因為你不必在創建實際應用程序時,還要花費精力維護Dockerfile。

這樣的插件的一個例子是JIB。如下所示,我只需要調用mvn jib:dockerBuild命令可以構建鏡像

  1. <plugin> 
  2.    <groupId>com.google.cloud.tools</groupId> 
  3.    <artifactId>jib-maven-plugin</artifactId> 
  4.    <version>2.7.1</version> 
  5.    <configuration> 
  6.        <to> 
  7.            <image>myimage</image> 
  8.        </to> 
  9.    </configuration> 
  10. </plugin> 

它將為我構建一個具有指定名稱的Docker鏡像,而沒有任何麻煩。

使用2.3及更高版本時,可以通過調用mvn命令進行操作:

  1. mvn spring-boot:build-image 

在種情況下,系統都會自動為我創建一個Java鏡像。這些鏡像還比較小,那是因為他們正在使用非發行版鏡像或buildpack作為鏡像的基礎。但是,無論鏡像大小如何,你如何知道這些容器是安全的?你需要進行更深入的調查,即使這樣,你也不確定將來是否會保持這種狀態。

我并不是說你在創建Java Docker時不應使用這些工具。但是,如果你打算發布這些鏡像,則應研究Java鏡像所有方面的安全。鏡像掃描將是一個好的開始。從安全性的角度來看,我的觀點是,以完全控制和正確的方式創建Dockerfile,是創建鏡像更好,更安全的方式。

 

責任編輯:張燕妮 來源: 今日頭條
相關推薦

2019-11-05 17:10:19

Java開發編程語言

2020-10-27 06:56:53

IoT產品實踐

2019-11-20 10:32:39

云計算安全技術

2022-05-13 14:28:03

云原生權限云原生

2020-04-27 10:20:07

微服務架構數據庫

2019-12-16 12:11:53

Docker容器Kubernetes

2020-04-23 10:35:10

Docker鏡像實踐

2023-03-30 08:00:00

ReactJavaScript前端

2020-11-23 18:39:54

容器Kubernetes架構

2019-12-16 17:59:22

軟件微服務技術

2019-12-17 08:07:58

微服務架構

2022-10-09 08:08:02

人工智能機器學習平臺

2020-07-24 10:36:17

云計算云平臺數據

2020-03-24 14:45:17

程序員技能開發者

2021-02-25 09:00:00

架構開發運維

2022-10-10 14:53:00

云安全云計算云平臺

2020-11-24 10:32:16

CIO首席信息官工具

2022-02-28 15:56:14

零信任企業

2021-03-01 19:24:13

Kubernetes備份容器

2021-06-25 14:50:21

DevSecOps安全 DevOps
點贊
收藏

51CTO技術棧公眾號

jzzjzzjzz亚洲成熟少妇| 日韩午夜精品视频| 亚洲欧美一区二区三区四区| 性欧美18一19内谢| 精品无码在线视频| 影音先锋男人资源在线| 美女视频黄 久久| 欧美性少妇18aaaa视频| 99国产盗摄| 91免费公开视频| 激情欧美一区二区三区黑长吊| 2020国产精品久久精品美国| 国内自拍欧美激情| 美女久久久久久久久| 中文字幕在线观看播放| av资源网一区| 18性欧美xxxⅹ性满足| 国产十八熟妇av成人一区| 国产精品一品| 91香蕉视频黄| 日本一区二区不卡| 亚洲国产日韩一区无码精品久久久| 一个人看的www视频在线免费观看 一个人www视频在线免费观看 | 麻豆freexxxx性91精品| 国产视频一区在线| 丰满少妇被猛烈进入高清播放| 人人妻人人玩人人澡人人爽| 亚洲精品综合| 亚洲跨种族黑人xxx| 中文字幕55页| 国产盗摄——sm在线视频| 国产91在线|亚洲| 97碰在线观看| 国产在线观看h| 成人在线免费电影网站| 国产精品久久久久影院亚瑟| 国产在线精品播放| 黄色在线观看免费| 精品淫伦v久久水蜜桃| 欧美日韩综合视频| 欧美在线一区视频| 国产一区二区影视| 国产麻豆视频一区| 91精品国产91久久久久久| 乱h高h女3p含苞待放| 日韩一区二区三区精品视频第3页| 一区二区免费视频| 欧美乱偷一区二区三区在线| 一级全黄少妇性色生活片| 欧美黄免费看| 亚洲欧美国产视频| 噜噜噜在线视频| 日本一区福利在线| 欧美老女人第四色| 成年人网站免费视频| eeuss影院www在线播放| 国产日韩欧美a| 91蜜桃网站免费观看| 中文字幕超碰在线| 亚洲国产不卡| 亚洲人成电影网站色www| 免费人成视频在线播放| 亚洲国产视频二区| 欧美日韩一区二区三区四区五区| 免费的一级黄色片| 91在线看黄| 久久综合久色欧美综合狠狠| 久久伊人一区| 亚洲精品911| 蜜臀精品一区二区三区在线观看 | 亚洲欧洲自拍偷拍| 欧美成人短视频| 亚洲国产欧美在线观看| 日韩精品在线网站| 日韩一区二区三区不卡视频| 丁香花视频在线观看| 亚洲综合男人的天堂| 人人妻人人做人人爽| 中文字幕一区久| 亚洲综合久久av| 日日橹狠狠爱欧美超碰| 日本精品600av| 国产精品家庭影院| 日韩欧美视频一区二区| 污污视频在线观看网站| 国产电影一区在线| 91久久国产综合久久91精品网站 | 我要看一级黄色录像| 亚洲国产合集| 亚洲国产精品va在线看黑人动漫| 在线一区二区不卡| 国产精品久久久久久吹潮| 欧美精品丝袜中出| 一二三不卡视频| 一区二区电影在线观看| 神马久久桃色视频| 人妻熟人中文字幕一区二区| 亚洲精品亚洲人成在线| 色妞久久福利网| 免费毛片一区二区三区| 国产精品sm| 伊人久久五月天| 免费人成又黄又爽又色| 午夜国产欧美理论在线播放 | 不卡中文字幕在线| 女人让男人操自己视频在线观看| 一区二区激情小说| 福利在线一区二区三区| 欧美无毛视频| 在线亚洲欧美专区二区| 熟女人妇 成熟妇女系列视频| 中文字幕资源网在线观看免费| 欧美精品日日鲁夜夜添| 国产福利短视频| 免费观看不卡av| 亚洲一区二区黄| 国产一二三av| 国产人成精品一区二区三| 5278欧美一区二区三区| 国产91国语对白在线| 天使萌一区二区三区免费观看| 日韩av大片免费看| 性生交大片免费看女人按摩| 国产精品丝袜一区| 欧美日韩一级在线| 在线看欧美视频| 欧美精品乱码久久久久久| 一出一进一爽一粗一大视频| 午夜久久黄色| 成人在线播放av| 黄色aaa毛片| 久久婷婷国产综合精品青草| 成年在线观看视频| 高清久久一区| 亚洲激情自拍图| 国产精品天天干| 国产日韩一区| 国产在线观看一区| 在线播放麻豆| 亚洲午夜免费视频| 国产成人久久777777| 国产成人久久精品麻豆二区| 亚洲欧美激情精品一区二区| 在线观看亚洲天堂| 精品一区二区三区免费毛片爱 | 粉嫩一区二区三区四区公司1| 亚洲国产天堂久久综合网| 爱爱视频免费在线观看| 狠狠色狠狠色综合系列| 国产精品久久久久久久久久久久午夜片| 天堂中文在线资| 亚洲天天做日日做天天谢日日欢| 青青草成人免费在线视频| 亚洲三区欧美一区国产二区| 色综合五月天导航| 波多野结衣一本一道| 国产精品自拍在线| 男人日女人的bb| 色猫猫成人app| 在线日韩日本国产亚洲| 一二三区在线播放| 91日韩在线专区| 妞干网在线免费视频| 欧美日韩一二三四| 国内精品久久久久久久久| 女人18毛片水真多18精品| 激情懂色av一区av二区av| 亚洲涩涩在线观看| 你懂的视频欧美| 国产精品一区电影| 裸体xxxx视频在线| 亚洲午夜国产一区99re久久| 亚洲色图欧美日韩| 久久久久久9| 国产麻豆日韩| free欧美| 免费不卡欧美自拍视频| 中文字幕av资源| 久久日韩精品一区二区五区| 激情视频综合网| 亚洲mv大片欧洲mv大片| 国产一区二区高清视频| 成人国产综合| 欧美激情精品久久久久久蜜臀| 日韩av地址| 五月天网站亚洲| 亚洲精品国产精品国自| 国产黄色精品网站| 不卡av免费在线| 欧美有码视频| 欧美一区二区三区四区五区六区| 国产在线美女| www.亚洲天堂| 97人人爽人人爽人人爽| 国产精品国产自产拍高清av| 香蕉在线观看视频| 欧美不卡在线| 日韩欧美第二区在线观看| 亚洲精品视频一二三区| 国产精品男人的天堂| 国产毛片av在线| 在线视频国内自拍亚洲视频| 麻豆视频在线免费看| 久久久综合精品| 久久久久久免费看| 99视频精品全国免费| 国产欧美精品日韩精品| av2020不卡| 亚洲黄色www| 国产人妻精品一区二区三| 亚洲精品免费电影| 91成人在线观看喷潮蘑菇| 老司机午夜精品视频| 青青青青在线视频| 你懂的在线观看一区二区| 成人黄色免费片| 日韩精品免费观看视频| 9.1国产丝袜在线观看| 欧美日韩经典丝袜| 日韩精品福利网站| 日本一区二区三区精品| 一区二区在线观看不卡| 大吊一区二区三区| 国产午夜一区二区三区| av网页在线观看| 久热国产精品| 激情综合在线观看| 亚洲电影av| 日本一区二区三区四区在线观看| av成人资源网| 日本久久精品视频| missav|免费高清av在线看| 久久这里有精品视频| 神宫寺奈绪一区二区三区| 一道本成人在线| 成人一级黄色大片| 国产精品免费av| 亚洲高潮女人毛茸茸| 国产欧美日韩久久| 日本美女视频网站| 视频一区中文字幕| 日本成年人网址| 99视频精品全国免费| 宅男一区二区三区| 欧美三级午夜理伦三级在线观看 | 精品久久久久久亚洲综合网站| 亚洲成人av在线电影| 亚洲日本精品视频| 久久久久成人黄色影片| 亚洲自拍偷拍图| 亚洲国产精品99久久久久久久久| 深爱五月激情网| 国产午夜精品福利| 中文国语毛片高清视频| 99精品国产一区二区三区不卡| 蜜桃免费在线视频| 日本大胆欧美人术艺术动态 | 亚洲一区区二区| 在线视频不卡一区二区三区| 天天综合网网欲色| 黄色一级大片免费| 国产一区二区你懂的| 欧美自拍小视频| 国产又黄又大久久| 久草综合在线观看| 久久99久久久欧美国产| 女人扒开腿免费视频app| 老司机精品导航| 奇米影视四色在线| 日韩国产欧美三级| 日韩日韩日韩日韩日韩| 另类天堂av| 中文字幕在线观看日| 日韩激情在线观看| 亚洲精品永久视频| 成人国产免费视频| 亚洲av无一区二区三区久久| 波多野结衣在线aⅴ中文字幕不卡 波多野结衣在线一区 | 国产无码精品久久久| 国产精品久久夜| 青娱乐国产在线视频| 欧美日韩国产精品一区二区三区四区 | 9999在线视频| 国产精品永久免费| 精品自拍偷拍| 波多野结衣激情| 亚洲在线成人| 日本xxxx免费| 欧美国产欧美亚州国产日韩mv天天看完整| 内射一区二区三区| 欧美日韩综合视频网址| 国产绳艺sm调教室论坛| 亚洲欧美www| 成年网站在线视频网站| 国产精品一区久久久| 少妇精品导航| 国产综合色一区二区三区| 第一会所亚洲原创| 午夜欧美性电影| 成人黄色小视频| 老太脱裤让老头玩ⅹxxxx| 美国毛片一区二区三区| 好吊日免费视频| 亚洲午夜一区二区三区| 国产精品爽爽久久| 国产一区av在线| 欧美男人天堂| 国产精品毛片一区视频| 99久久久久| 黄色aaa级片| 国产网站一区二区| 日本五十熟hd丰满| 欧美α欧美αv大片| www.五月激情| www.亚洲男人天堂| 成人黄色在线| 日韩高清国产一区在线观看| 亚洲精品免费观看| 国产精品熟妇一区二区三区四区 | 国内精品视频| 国产精品久久九九| 亚洲高清影视| 亚洲激情在线看| 国产精品国产精品国产专区不片| 日韩中文字幕在线观看视频| 精品国产免费一区二区三区四区| 五月天婷婷在线观看| 欧美国产中文字幕| 亚洲精品一区二区三区中文字幕| 99久久久无码国产精品性色戒| 免费久久99精品国产| 2019男人天堂| 欧美日韩在线三区| 在线观看美女网站大全免费| 国产精品久久久久久久久影视| 欧美精品momsxxx| 日本成人中文字幕在线| 国产日韩一级二级三级| 欧美人一级淫片a免费播放| 亚洲欧美日韩第一区| 日韩电影免费观看高清完整版| 你懂的网址一区二区三区| 精品人伦一区二区三电影| 成人美女在线观看| 国产精品久久a| 欧美激情一二三区| 中文字幕日韩国产| 精品国偷自产在线| 91www在线| 国产区日韩欧美| 国产偷自视频区视频一区二区| 中文文字幕文字幕高清| 日韩欧美一区二区三区| 国产美女性感在线观看懂色av| 国产精品久久久久久久久久三级 | 国产盗摄在线观看| 97久久久免费福利网址| 日韩精品丝袜美腿| 日韩人妻精品无码一区二区三区| 26uuu亚洲综合色| 成人午夜精品视频| 亚洲成avwww人| а√在线中文网新版地址在线| 久久久www免费人成黑人精品| 亚洲a一区二区三区| 中文字幕制服丝袜| 精品国产成人在线| av电影在线网| 亚洲综合av影视| 日韩欧美一区免费| heyzo国产| 欧美激情一区二区三区全黄| 国产免费av观看| 97色在线视频观看| 欧美日韩国产一区二区三区不卡| 思思久久精品视频| 欧美日韩国产中文字幕 | 亚洲狠狠丁香婷婷综合久久久| 天天射,天天干| 国产精品三级美女白浆呻吟| 欧美91大片| 在线免费观看麻豆| 亚洲图片自拍偷拍| 成人三级黄色免费网站| 91成人理论电影| 午夜一区二区三区不卡视频| 午夜剧场免费在线观看| 日韩av最新在线观看| 国产成人免费视频网站视频社区| 国产最新免费视频| 亚洲免费观看在线视频| 亚洲视频一区在线播放| 高清一区二区三区四区五区| 精品国产乱码久久久| 中文字幕无码毛片免费看| 91精品福利视频| 尤物网在线观看| 久草精品电影| 国产传媒久久文化传媒| 这里只有久久精品视频|