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

如何構建 Docker 鏡像:從零開始的完整指南

云計算 云原生
在一個 Dockerfile 里,在左邊的一切都是指令(Instruction),而在右邊的一切都是賦予給指令的參數(Argement)。還有,要記著這個文件名稱是 Dockerfile?它不需要任何的擴展名。

引言

在本文中,您將學習如何從頭開始構建一個Docker鏡像,并使用Dockerfile將您的應用程序部署并運行為一個Docker容器[1]。

如您所知,Docker 是一種用于打包、部署和運行應用程序的工具,它能夠在輕量級容器中完成這些操作。如果您想了解Docker的基礎知識,請參考《Docker 詳解》[2]博客。

如果您還沒有安裝 Docker, 請檢查 Docker Installation Guide[3]。

開始

Dockerfile 詳解

一個 Docker 鏡像最基礎的建筑塊是一個 Dockerfile。

一個 Dockerfile 是一個帶有指令和參數的簡易的文本文件。Docker 可以通過讀取這些在 Dockerfile 里給出的指令自動構建鏡像。

在一個 Dockerfile 里,在左邊的一切都是指令(Instruction),而在右邊的一切都是賦予給指令的參數(Argement)。還有,要記著這個文件名稱是 Dockerfile 它不需要任何的擴展名。

圖片圖片

以下的表格中包含了重要的 Dockerfile 指令和它們的解釋。

Dockerfile 指令

解釋

FROM

可以從容器注冊表拉取的基礎鏡像 ( Docker hub, GCR, Quay, ECR, 等等)

RUN

在鏡像構建過程中執行的命令

ENV

在鏡像中設置環境變量。它是構建過程中是可用的,同樣在運行的容器中也是。如果您只想要在構建時間中使用它,請使用 ARG 指令

COPY

拷貝本地文件和目錄到鏡像中

EXPOSE

為 Docker 容器指定特定的要暴露的端口

ADD

它是 COPY 指令的功能更豐富的版本。它還允許從源 URL 復制并將 tar 文件自動提取到鏡像中。但是,建議使用 COPY 命令而不是 ADD。如果要下載遠程文件,請使用 curl 或使用 RUN 獲取

WORKDIR

設置當前的工作目錄。您可以在一個 Dockerfile 里面重復使用這個指令去設置一個不同的工作目錄。如果您設置了 ENTRYPOINT,像 RUN,CMD,ADD,COPY,或者 ENTRYPOINT 這樣的指令就會在你的這個目錄里執行

VOLUME

它是用于創建或者掛載卷到 Docker 容器

USER

當運行容器時,設置用戶名稱和 UID 。你可以使用這個指令去設置一個非 root 的容器用戶

LABEL

它是去指定 Docker 鏡像的 metadata 信息

ARG

設置構建時,帶有 Key 和 Value 的變量。當容器運行時,ARG 變量將不可用。如果你堅持想要在一個運行的容器中使用一個變量,請使用 ENV

SHELL

它被用于為了給其后的 RUN,CMD 和 ENTRYPOINT 去設置 shell 選項和默認 shell 。

CMD

它用于在一個運行的容器中執行一條命令。這里只能有一個 CMD, 如果有多個,它只讓最后一個執行。它還可以被 Docker CLI 覆蓋

ENTRYPOINT

當容器啟動時,指定的命令將會執行。如果您不指定任何 ENTRYPOINT,它默認會是 /bin/sh -c 。您還可以使用 CLI 的 --entrypoint 覆蓋 ENTRYPOINT。為了更多的信息請參考如下網址: https://devopscube.com/run-scripts-docker-arguments/

使用 Dockerfile 構建 Docker 鏡像

在這一節,您將會學習使用一個在現實工作中使用的案例去構建一個 Docker 鏡像。我們將會從頭使用一個自定義的 Index 頁面去創建一個 Nginx Docker 鏡像。

以下的照片展示了鏡像構建過程的工作流。

圖片圖片

跟隨以下給出的步驟去構建一個 Docker 鏡像。

這篇文章中被使用的 Dockerfile 和 configs 被托管在 Docker 鏡像實例 Github repo[4] 上面。您可以克隆它以便參考。

步驟 1: 創建一個必須的文件和文檔

創建一個名為 nginx-image 和一個名為 files 的文件夾

mkdir nginx-image && cd nginx-image
mkdir files

創建一個 .dockerignore 文件

touch .dockerignore

步驟 2: 創建一個模板 HTML 文件和 config 文件

當您構建一個為實時項目的 Docker 鏡像時,它包含了代碼或者應用配置文件。

用于演示目的,我們將要創建一個簡單的 HTML 文件和 config 文件作為我們的 app 代碼,再使用 Docker 打包。這是一個簡單的 index.html 文件。如果您愿意,您可以創建您自己喜歡的。

cd 進入文件夾。

cd files

創建一個 index.html 文件。

vim index.html

復制以下的內容到 index.html 再保存這個文件。

<html>
  <head>
    <title>Dockerfile</title>
  </head>
  <body>
    <div class="container">
      <h1>My App</h1>
      <h2>This is my first app</h2>
      <p>Hello everyone, This is running via Docker container</p>
    </div>
  </body>
</html>

創建一個名字為 default 的文件

vim default

復制以下的的內容到 default 文件

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    
    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name _;
    location / {
        try_files $uri $uri/ =404;
    }
}

步驟 3: 選擇一個基礎鏡像

我們在 Dockerfile 中使用 FROM 命令,該命令指示 Docker 根據 Docker 中心或任何使用 Docker 配置的容器注冊表上可用的鏡像創建鏡像。 我們稱它為一個基礎鏡像。

它是和我們在云上如何從一個虛擬機鏡像創建一個虛擬機是相似的。

選擇一個基礎鏡像取決于我們的應用和選擇的 OS 平臺。在我們的例子中,我們選擇 ubuntu:18.04 基礎鏡像。

為了避免潛在的風險,應總是為您的應用使用 official/org 批準的基礎鏡像。最后,我們已經添加了所有的已經認證的容器基礎鏡像的公共倉庫,還有,當它來到生產使用案例時,總是使用 minimal 基礎鏡像類似 Alpine[5](僅僅5Mib) 或者 distroless images[6],Distroless alpine僅僅 2 MiB

步驟 4: 創建一個 Dockerfile

在 nginx-image 文件夾中創建一個 Dockerfile。

vim Dockerfile

這里是一份簡單的 Dockerfile 為了我們能夠好的繼續。然后把這些添加到我們的 Dockerfile。

FROM ubuntu:18.04  
LABEL maintainer="contact@devopscube.com" 
RUN  apt-get -y update && apt-get -y install nginx
COPY files/default /etc/nginx/sites-available/default
COPY files/index.html /usr/share/nginx/html/index.html
EXPOSE 80
CMD ["/usr/sbin/nginx", "-g", "daemon off;"]

這里是每一步的解釋:

  1. 1. 使用 LABEL 指令, 我們添加了關于維護者的 一些信息。他不是必須的指令哈。
  2. 2. FROM 指令將會從 Docker hub 拉取 Ubuntu 18.04 版本的鏡像,在第三行,我們正在安裝 Nginx 。
  3. 3. 然后,我們將 Nginx 的默認配置文件從本地文件目錄拷貝到目標鏡像目錄。
  4. 4. 下一步,我們將 Index.html 文件從本地目錄拷貝進目標鏡像目錄。它將會覆蓋在 Nginx 安裝過程中被創建的默認的 Index.html 文件。
  5. 5. 我們暴露了 80 端口,作為 Nginx 服務監聽的 80 端口。
  6. 6. 最終,當 Docker 鏡像啟動,我們的 Nginx 服務會在運行過程中使用 CMD 指令。

在Docker 容器, 這個 daemon off; 指令會告訴 Nginx 停留在前端。這就意味著 Nginx 進程進會保持運行不會停止,直到你自己停止這個容器。它不允許 Nginx 的 自守護進程行為。-g 選項指定了一個指令給 Nginx 。

我們在前臺運行該進程的原因是將控制臺進程附加到標準輸入、輸出和錯誤。這意味著您可以看到來自 Nginx 進程的日志或消息。

步驟 4: 構建你的第一個 Docker 鏡像

最終的文件夾和文件結構看起來像以下內容。

nginx-image
├── Dockerfile
└── files
    ├── default
    └── index.html

現在,我們要使用 Docker 命令構建我們的鏡像。以下的命令會從相同的目錄使用 Dockerfile 構建鏡像。

docker build -t nginx:1.0 .

1. -t 是為了給這個鏡像起個名字和指定你的標簽

2. nginx 是這個鏡像的名字

3. 1.0 是這個標簽名稱。如果你不添加任何標簽,它默認的標簽名稱為 Latest

4. . 在末尾的 . 意味著我們會參考 Dokerfile 位置作為我們的 Docker 構建上下文。也就是我們現在的目錄

圖片圖片

如果 Dockerfile 在另一個文件夾,那么你需要明確的把它指定出來,否則會找不到

docker build -t nginx /path/to/folder

現在,我們可以使用這個命令列出鏡像

docker images

圖片圖片

我們在這里可以看見標簽是1.0。 如果我們想要弄一個指定的標簽,我們可以這樣寫 image-name:[tag] 。還是那句話,如果你不指定任何標簽,默認會是 Latest 。

docker build -t nginx:2.0 .

一個單一的鏡像可以有多個標簽。這里有兩種我們普遍認同的給鏡像打標簽的方法:

1. 穩定的 Tags – 我們可以繼續拉取我們指定的標簽,它會繼續獲得更新。標簽總是不變的,但是鏡像的內容可以改變。

2. 唯一的 Tags – 我們為每一個鏡像使用一個不同和唯一的標簽。有多種方式可以提供唯一標簽,例如日期時間戳、構建編號、提交 ID 等。

當它到生產環境時,一個推薦給 Docker 鏡像打標簽的方法是語義版本控制(Semver) [7]

Docker 緩存了構建步驟,因此如果我們再次構建這個鏡像,過程會移動地快一點。例如,它不會再次下載 Ubuntu 18.04 鏡像

使用體積大的鏡像會讓容器的構建和部署時間變長。如果你想要學習更過關于優化 Docker 鏡像,請參考 減少 Docker 鏡像[8]指南。

步驟 5: 測試你的 Docker 鏡像

現在,構建過鏡像之后,我們將會運行這個 Docker 鏡像。這個命令是:

docker run -d -p 9090:80 --name webserver nginx:1.0

這里

1. -d 這個表示讓容器在后臺運行

2. -p 這個為了指定端口,格式為 本地端口:容器端口

3. --name 指定容器的名稱,webserver 是我們的名稱

我們可以通過以下的命令檢查這個容器

docker ps

圖片圖片

現在在瀏覽器中,如果你去到 http://[host-ip]:9090,您可以看到索引頁,其中顯示了我們添加到 docker 鏡像中的自定義 HTML 頁面中的內容。

圖片圖片

推送 Docker 鏡像到 Docker Hub

推送我們的 Docker 鏡像到 Docker hub[9],我們需要在 Docker hub 創建一個帳號。

從終端執行以下命令登錄。它將會要求輸入一個用戶名和密碼。也支持 Docker hub 憑證。

docker login

圖片圖片

登錄進去之后,現在我們需要用 Docker hub 用戶名給我們的鏡像打標簽,如下所示。

docker tag nginx:1.0 <username>/<image-name>:tag

例如,這里的 devopscube 是 Dockerhub 用戶名。

docker tag nginx:1.0 devopscube/nginx:1.0

再次運行 docker images 命令,檢查被打了標簽的鏡像將會顯示在這里。

圖片圖片

現在,我們使用以下的命令推送我們的鏡像到 Docker hub 。

docker push devopscube/nginx:1.0

現在,你可以在你的 Docker Hub 賬戶中檢查這個鏡像是否可用的。

圖片圖片

圖片圖片

在 Dockerfile 中使用 heredoc

Dockerfile 還支持 heredoc[10] 語法。如果你有多個 RUN 命令,那么你就可以使用 heredoc,如下所示。

RUN <<EOF
apt-get update
apt-get upgrade -y
apt-get install -y nginx
EOF

還有, 讓我們聊聊你想要從 Dockerfile 執行的一個 Python 腳本,你可以使用以下的的語法。

RUN python3 <<EOF
with open("/hello", "w") as f:
    print("Hello", file=f)
    print("World", file=f)
EOF

你還可以使用 heredoc 語法去創建一個文件,這里是一個 Nginx 例子。

FROM nginx

COPY <<EOF /usr/share/nginx/html/index.html
<html>
  <head>
    <title>Dockerfile</title>
  </head>
  <body>
    <div class="container">
      <h1>My App</h1>
      <h2>This is my first app</h2>
      <p>Hello everyone, This is running via Docker container</p>
    </div>
  </body>
</html>
EOF

Dockerfile 的最好實踐

這里是一些我們應該遵循 Dockerfile 的通常做法:

1. 使用一個 .dockerignore 文件去排除不必要的文件和目錄,好增強我們的構建性能。

2. 只使用被信任的基礎鏡像,進行定期更新的鏡像。

3. 在 Dockerfile 每一個指令都向 Docker 鏡像添加了額外的一層。通過把指令合并,讓鏡像層盡量以最少的層去構建,有助于增強構建性能和時間。

4. 以一個非 ROOT 用戶去運行,有助于更加安全。

5. 把鏡像體積保持為最小:在你的鏡像中,為了更快的部署, 要避免安裝不必要的工具,以減少鏡像的大小。使用盡可能小的鏡像為了減少攻擊面。

6. 使用特定標簽覆蓋鏡像的最新標簽,以避免隨著時間的推移發生重大變化。

7. 當創建多個緩存的層時,它通常會影響到構建過程的效率,所以應避免使用多個 RUN 命令。

8. 永遠不要往你的 Dockerfile 中共享和拷貝應用程序的憑證或者任何敏感的信息。如果你使用了它,請將其添加它到 .dockerignore。

9. 盡可能在末尾中使用 EXPOSE 和 ENV 命令。

10. 使用一個 linter: 使用一個像 hadolint[11] 的 linter 去檢查你的 Dockerfile,這是為了常見的問題和最好的實踐。

11. 每一個容器只使用一個單獨進程: 每一個容器應該只運行一個單獨的進程。這是為了讓它更容易去管理和監控容器,還有幫助我們保持容器是輕量的。

12. 使用多階段構建:使用多階段構建去創建更小和更有效率的鏡像。

潛在的 Docker 構建問題

1. 如果在 Dockerfile 里面有一個語法錯誤或者一個無效的參數,Docker build 命令將會有一個錯誤信息的失敗。可以檢查語法去解決這個。

2. 始終嘗試使用 docker run 命令為容器命名。如果不指定名稱,Docker 會自動分配一個隨機名稱,這可能會導致一些問題。

3. 端口沖突問題:有時會遇到類似 Bind for 0.0.0.0:8080 failed: port is already allocated 的錯誤,這是因為其他軟件或服務正在使用該端口。可以通過 netstat 或 ss 命令檢查端口占用情況,然后選擇使用其他端口或停止占用端口的服務來解決此問題。

4. 依賴包下載失敗:有時 Docker 會報錯 Failed to download package [package-name],這通常是因為容器無法訪問互聯網或存在其他依賴問題。

Docker 鏡像注冊表

在步驟一中提到過,你應該始終選擇官方認證的基礎鏡像作為應用的鏡像。

以下表格列出了一些公共可用的容器注冊表,你可以在這些注冊表中找到官方認證的基礎鏡像和應用鏡像:

Registry

Base Images

Docker

Docker hub base images[12]

Google Cloud

Distroless base images[13]

AWS

ECR public registry[14]

Redhat Quay

Quay Registry[15]

Docker Image vs. Containers

Docker 鏡像是文件系統和應用依賴的快照。它是一個可執行的軟件包,包含了運行應用所需的一切,比如應用代碼、庫、工具、依賴項和其他文件。你可以將其類比為虛擬機的黃金鏡像。

Docker 鏡像以堆疊在一起的只讀層形式組織。

Docker 容器是 Docker 鏡像的運行實例。就像從虛擬機鏡像創建虛擬機一樣,我們從容器鏡像創建容器。當你從 Docker 鏡像創建容器時,會在現有鏡像層之上創建一個可寫層。

Docker 鏡像和容器之間的主要區別在于容器頂部的可寫層。這意味著,如果你從一個鏡像運行了五個容器,所有容器都會共享鏡像中的相同只讀層,而頂部的可寫層對每個容器來說是獨立的。

因此,當你刪除容器時,其可寫層也會被刪除。

鏡像可以獨立于容器存在,而容器需要鏡像才能運行。我們可以從同一個鏡像創建多個容器,每個容器都有自己獨立的數據和狀態。

圖片圖片

Docker 鏡像構建 FAQs

如何使用來自 Docker hub 以外的容器注冊表的基礎鏡像?

默認情況下,Docker 引擎配置為使用 Docker Hub 作為容器注冊表。因此,如果你只指定鏡像名稱,Docker 會從 Docker Hub 拉取鏡像。然而,如果你想從其他容器注冊表拉取鏡像,則需要提供完整的鏡像 URL。例如:FROM gcr.io/distroless/static-debian11。

什么是 Docker 構建上下文?

Docker 構建上下文是指 Docker 主機上的一個位置,其中包含構建過程中所需的所有代碼、文件、配置和 Dockerfile。你可以使用一個點 [.] 來指定當前目錄作為構建上下文,或者指定其他文件夾的路徑。此外,Dockerfile 也可以與構建上下文位于不同的位置。

作為最佳實踐,構建上下文中應僅包含必需的文件。否則,可能會導致不必要的文件被包含,從而使 Docker 鏡像變得臃腫。

如何從一個 git 倉庫構建 Docker 鏡像?

你可以使用 docker build 命令結合 Git 倉庫來構建 Docker 鏡像。該 Git 倉庫中必須包含 Dockerfile 和所需的文件,否則構建過程會失敗。

下一個是什么呢?

同樣地,你可以嘗試構建多個 Docker 鏡像。

例如,你可以嘗試將一個Java 應用容器化[16] 并運行它。

為了進一步學習,你可以嘗試容器化以下應用,從而掌握更多知識。

1. Python

2. NodeJS

3. Django

4. FastAPI

總結

在這篇文章中,我們討論了如何構建 Docker 鏡像,并使用 Dockerfile 將應用作為 Docker 容器運行。

我們詳細介紹了 Dockerfile,并分享了一些編寫 Dockerfile 的最佳實踐。

作為一名 DevOps 工程師[17],在項目中應用 Docker 之前,深入理解 Docker 的最佳實踐非常重要。此外,學習 Kubernetes[18] 也需要掌握構建容器鏡像的工作流程。

Podman 是另一個容器管理工具。如果你想了解更多,可以參考 Podman 教程[19]。

結語

ok, guys, see you next time

原文:https://devopscube.com/build-docker-image/#Step_2_Create_a_sample_HTML_file_and_config_file

引用鏈接

[1] 容器:https://devopscube.com/what-is-a-container-and-how-does-it-work/

[2]《Docker 詳解》:https://devopscube.com/what-is-docker/

[3]Docker Installation Guide:https://devopscube.com/how-to-install-and-configure-docker/

[4]Docker 鏡像實例 Github repo:https://github.com/techiescamp/docker-image-examples/tree/main

[5]Alpine:https://hub.docker.com/_/alpine

[6]distroless images:https://github.com/GoogleContainerTools/distroless

[7]語義版本控制(Semver) :https://semver.org/

[8]減少 Docker 鏡像:https://devopscube.com/reduce-docker-image-size/

[9]Docker hub:https://hub.docker.com/

[10]heredoc:https://tldp.org/LDP/abs/html/here-docs.html

[11]hadolint:https://devopscube.com/lint-dockerfiles-using-hadolint/

[12]Docker hub base images:https://hub.docker.com/search?badges=official

[13]Distroless base images:https://github.com/GoogleContainerTools/distroless

[14]ECR public registry:https://gallery.ecr.aws/?verified=verified&operatingSystems=Linux&page=1

[15]Quay Registry:https://quay.io/search

[16]Java 應用容器化:https://devopscube.com/dockerize-java-application/

[17]DevOps 工程師:https://devopscube.com/become-devops-engineer/

[18]Kubernetes:https://devopscube.com/learn-kubernetes-complete-roadmap/

[19]Podman 教程:https://devopscube.com/podman-tutorial-beginners/

責任編輯:武曉燕 來源: 云原生運維圈
相關推薦

2024-03-01 19:53:37

PyBuilderPython開發

2024-05-17 17:29:00

CurdlingPython開發

2018-04-18 07:01:59

Docker容器虛擬機

2025-02-17 07:20:00

Flutter 3Flutter開發

2025-07-08 09:24:52

2024-07-31 08:14:17

2010-02-22 09:39:52

HTML 5Web

2017-02-10 09:30:33

數據化運營流量

2023-03-21 07:35:43

2024-02-23 09:00:00

編程語言編譯器工具

2025-01-09 11:14:13

2025-07-24 07:42:08

2018-04-16 16:31:56

前端開發從零開始

2022-03-30 08:24:25

操作系統內核開源軟件

2015-11-17 16:11:07

Code Review

2019-01-18 12:39:45

云計算PaaS公有云

2011-04-29 10:46:32

iPhone開發入門iPhoneiOS

2024-12-06 17:02:26

2020-07-02 15:32:23

Kubernetes容器架構

2025-01-06 00:38:12

點贊
收藏

51CTO技術棧公眾號

美女免费视频一区| 欧美日韩水蜜桃| 午夜久久久久久电影| 精品国产一区二区三区久久久久久| 你懂的国产视频| 日本一本不卡| 亚洲精品一区二区精华| 男女曰b免费视频| 自由的xxxx在线视频| 99久久久精品| 91精品久久久久久久| 天海翼一区二区| 91综合在线| 日韩久久午夜影院| 肉色超薄丝袜脚交| 日韩影片中文字幕| 亚洲一本大道在线| 亚洲最新在线| 国外av在线| www.欧美日韩国产在线| 成人欧美在线视频| 日本视频免费观看| 亚洲性感美女99在线| 久久精品国产欧美亚洲人人爽| 好男人香蕉影院| 日本精品在线播放| 欧美日韩一区二区电影| 亚洲熟妇国产熟妇肥婆| 91福利国产在线观看菠萝蜜| 日本一区二区三区国色天香 | 国产一级片91| 成人免费高清在线播放| 99久久国产综合精品麻豆| 91色p视频在线| 自拍偷拍第八页| 亚洲一区图片| 性欧美办公室18xxxxhd| 校园春色 亚洲| 99久久久久久中文字幕一区| 亚洲人成网站免费播放| 噜噜噜在线视频| 波多野结衣欧美| 日韩久久久久久| 五月六月丁香婷婷| 亚洲精品伦理| 欧美日韩国产一级二级| 亚洲色图38p| 亚洲精品一级二级| 色婷婷激情综合| 日本熟妇人妻xxxxx| 都市激情亚洲一区| 懂色av影视一区二区三区| av日韩一区二区三区| 日本aa在线| 亚洲中国最大av网站| 成人在线观看毛片| 宅男在线观看免费高清网站| 亚洲精品视频在线看| 超碰97在线看| 激情在线视频播放| 亚洲第一成人在线| 激情伊人五月天| 欧美激情网站| 色94色欧美sute亚洲线路一久| 国产日韩一区二区在线| 亚洲精品日产| 欧美中文字幕一区二区三区亚洲| av视屏在线播放| 桃花岛成人影院| 欧美四级电影网| 亚洲网中文字幕| 一区二区三区四区精品视频| 亚洲国产精品va| 国产ts在线播放| 日韩在线视频精品| 欧美国产极速在线| 天天综合网入口| 日日夜夜精品视频天天综合网| 国产精品免费久久久久久| 亚洲一级片免费看| 成人免费av网站| 欧美一区二区福利| 日本中文字幕在线2020| 尤物av一区二区| 欧美色图另类小说| 日本黄色一区| 精品久久久久久最新网址| 在线免费观看黄色小视频| 成人影视亚洲图片在线| 欧美成人一二三| 国产剧情在线视频| 国内久久精品视频| 久久久久se| 免费在线看黄色| 亚洲图片欧美综合| 久久久国产欧美| 草草视频在线一区二区| 亚洲欧美日韩久久久久久| 精品国产大片大片大片| 在线日韩中文| 91精品久久久久久久久不口人| 黄色av网站免费在线观看| 久久亚洲精品小早川怜子| 久久精品国产精品亚洲精品色| 国产精品13p| 69堂国产成人免费视频| 成人无码www在线看免费| 亚州av乱码久久精品蜜桃 | 女人床在线观看| 成人激情综合| 亚洲精品白浆高清久久久久久| 欧美性受xxxx黑人| 日韩一级大片| 91成人免费视频| av电影在线播放高清免费观看| 一区二区三区精密机械公司| 杨幂毛片午夜性生毛片| 欧美美女啪啪| 欧美激情第三页| 91亚洲精品国偷拍自产在线观看 | 久久久久久久久久久久久久久久av | 免费一级欧美在线观看视频| 日韩av综合网| 青娱乐国产精品| 黄页视频在线91| 日韩精品不卡| 成年美女黄网站色大片不卡| 精品国产91亚洲一区二区三区婷婷 | 国产精品成人在线观看| 天天摸天天碰天天添| 福利电影一区| 欧美日韩福利电影| 国产情侣在线播放| 国产精品久久综合| 99视频免费播放| 免费欧美一区| 欧美诱惑福利视频| 少妇人妻偷人精品一区二区| 亚洲九九爱视频| 五月天婷婷在线观看视频| 久久国产精品亚洲人一区二区三区| 欧美一级黑人aaaaaaa做受| 免费观看黄色av| 亚洲网友自拍偷拍| 亚洲无人区码一码二码三码| 欧美二区不卡| 亚洲自拍小视频免费观看| 九七久久人人| 5858s免费视频成人| 潘金莲一级黄色片| 久久99精品国产.久久久久久| 亚洲国产激情一区二区三区| 欧美日韩精品一区二区三区视频| 国产一区二区三区在线观看视频 | 天天色影综合网| 久久99精品视频| 在线不卡视频一区二区| 久久久久黄色| 久久香蕉频线观| 性做久久久久久久久久| 亚洲国产成人av| 国产精品无码在线| 狂野欧美一区| 樱花www成人免费视频| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 欧美一级裸体视频| 外国成人激情视频| 国产98在线|日韩| 僵尸再翻生在线观看免费国语| 亚洲开心激情网| 中文天堂在线播放| 亚洲欧美激情在线| 免费看毛片的网站| 蜜桃伊人久久| 正在播放一区| 国产精品chinese在线观看| 国外成人在线直播| 国产免费av高清在线| 在线不卡免费av| 国产一卡二卡在线| 国产日韩欧美综合一区| 久久婷婷中文字幕| 亚洲国产精品第一区二区三区| 欧美日韩一区二区三区在线视频| 国语自产精品视频在线看抢先版结局| 久久精品国产久精国产思思| 老司机午夜福利视频| 91久久精品一区二区三| 欧美卡一卡二卡三| 337p粉嫩大胆色噜噜噜噜亚洲| 污污网站免费看| 午夜亚洲福利| 日韩一区国产在线观看| 亚洲福利合集| 国产精品精品久久久| 性欧美1819sex性高清大胸| 国产视频精品久久久| 91久久国语露脸精品国产高跟| 亚洲图片自拍偷拍| 亚洲女同二女同志奶水| 北条麻妃国产九九精品视频| 91制片厂毛片| 日韩视频久久| 91视频成人免费| 欧美色图一区| 国产一区免费视频| 99精品视频在线免费播放| 91精品国产99| 亚洲小说区图片区都市| 中文字幕日韩电影| 深夜影院在线观看| 日韩小视频在线观看专区| 久久亚洲精品石原莉奈| 亚洲影视在线观看| 日韩一区二区三区四区视频| 91蜜桃免费观看视频| 绯色av蜜臀vs少妇| 日本伊人午夜精品| 日本一区二区黄色| 黄色另类av| 色一情一乱一乱一区91| 日韩av自拍| 欧美一区二区三区成人久久片| 99re6热只有精品免费观看| 国产一区私人高清影院| 芒果视频成人app| 91精品国产91久久久久久久久 | 欧美洲成人男女午夜视频| 在线观看wwwxxxx| 精品国产一区二区三区久久久狼 | 色综合久久悠悠| 麻豆91在线| 自拍亚洲一区欧美另类| 国产在线中文字幕| 亚洲欧美制服中文字幕| 四虎影视在线观看2413| 亚洲国产成人久久综合| 亚洲国产精品无码久久| 精品少妇一区二区三区在线视频| 国产精品久久久国产盗摄| 欧美日韩小视频| 国产精品51麻豆cm传媒 | 亚洲色图一区二区三区| 手机在线中文字幕| 国产精品久久久久aaaa| 国产aaaaaaaaa| 国产精品视频yy9299一区| 天天舔天天操天天干| 欧美国产日韩亚洲一区| 男人舔女人下部高潮全视频| 久久久久久黄色| 国产精品扒开腿做爽爽| 欧美激情资源网| 精品无码在线观看| 中文一区二区在线观看| 91av手机在线| 亚洲精选一二三| xxxxxx国产| 色婷婷亚洲一区二区三区| 中文天堂在线播放| 4438x成人网最大色成网站| 国产视频aaa| 欧美成人精品福利| 熟妇人妻一区二区三区四区| 精品视频在线播放免| 国产中文字幕在线视频| 伊人久久久久久久久久| 蜜桃视频网站在线观看| 九九精品在线视频| 国产拍在线视频| 国产精品福利无圣光在线一区| 国产精品无码久久久久| 亚洲自拍中文字幕| 精品国产一区二区三区不卡蜜臂| 蜜桃视频日韩| 久久蜜桃av| 男女裸体影院高潮| 国产日韩专区| 亚洲免费一级视频| 国产成人av电影在线| www.超碰97| 国产精品成人免费精品自在线观看| www.色小姐com| 精品福利视频导航| 艳妇乳肉豪妇荡乳av| 精品久久一区二区| 成人高清免费在线播放| 欧美福利视频在线| 日韩av超清在线观看| 亚洲综合在线播放| 久久不见久久见免费视频7| 在线看成人av电影| 国产亚洲在线观看| 国产在线观看中文字幕| 不卡电影一区二区三区| 亚洲女人毛茸茸高潮| 亚洲成人自拍偷拍| 亚洲无码精品在线观看| 亚洲国产精品视频在线观看| 成人不用播放器| 97久久精品在线| 国产精品一区二区三区www| 免费观看国产成人| 欧美精品91| 欧美女同在线观看| 久久综合九色欧美综合狠狠| 波多野结衣不卡视频| 91久久线看在观草草青青| 亚洲国产精品久久人人爱潘金莲| 亚洲图片在区色| av岛国在线| 亚洲一区中文字幕在线观看| 国产一区二区在线| 黄页网站大全在线观看| 加勒比av一区二区| 无码少妇一区二区| 精品久久久久久久久久| 性少妇videosexfreexxx片| 一区二区三区黄色| 在线成人av观看| 国产乱码精品一区二区三区日韩精品 | 一本一道久久a久久精品逆3p| 激情在线视频播放| 97视频中文字幕| 久久久久国产| 天天干天天爽天天射| 国产视频一区不卡| 老熟妇仑乱一区二区av| 亚洲国产精品嫩草影院久久| 日韩欧美一起| 91嫩草国产在线观看| 婷婷六月综合| 国产免费又粗又猛又爽| 国产日韩欧美精品综合| 精品人妻一区二区三区免费看| 精品国产一区久久| 男人天堂亚洲| 国产98在线|日韩| 一区精品久久| 性xxxxxxxxx| 亚洲综合久久av| 成人久久精品人妻一区二区三区| 久热精品视频在线免费观看| 欧美成人福利| 伊人婷婷久久| 国产精品一级片在线观看| 澳门黄色一级片| 日韩精品一区二区三区蜜臀| 欧美hdxxxx| 国产美女99p| 夜夜夜久久久| 日韩人妻一区二区三区| 色欧美88888久久久久久影院| 欧美zzoo| 国产精品爱啪在线线免费观看 | 久久青草国产手机看片福利盒子| 日韩一区二区视频在线| 日韩电影免费观看中文字幕| 成人性教育av免费网址| 先锋影音欧美| 精彩视频一区二区| 久久久久亚洲av片无码下载蜜桃| 精品国产免费视频| 国产社区精品视频| 日本一区免费看| 国内精品不卡在线| 国产精品白嫩白嫩大学美女| 亚洲的天堂在线中文字幕| 极品在线视频| 亚洲成人自拍视频| 国产乱码精品1区2区3区| 久久精品性爱视频| 亚洲欧美日韩精品久久| 日韩精品一页| 欧美乱做爰xxxⅹ久久久| 2021国产精品久久精品| 中国a一片一级一片| 久久97久久97精品免视看| 欧美精品中文| 男女视频在线看| 一区二区三区在线免费观看| 婷婷婷国产在线视频| 国产一区二区香蕉| 亚洲国产三级| 99久久99久久精品免费| 日韩精品一区二区三区在线 | 国产精品免费一区二区三区在线观看 | 日本精品性网站在线观看| 久久精品av| 亚洲成av人片在线观看无| 欧美日韩一区小说| 999精品网| 亚洲一区二区自拍偷拍| 不卡一区二区在线| 国产又爽又黄免费软件| 2023亚洲男人天堂| 在线国产一区| 一区二区精品免费| 精品国产乱码久久久久久久久| 3d性欧美动漫精品xxxx软件|