精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

97久久香蕉国产线看观看| 在线观看中文字幕2021| 欧美激情99| 色94色欧美sute亚洲线路二| 亚洲午夜久久久影院伊人| aaa一区二区| 99精品视频免费| 在线视频日韩精品| 欧美丰满熟妇bbb久久久| 免费福利视频一区二区三区| 亚洲欧美日韩精品久久久久| 久久精品日产第一区二区三区乱码 | 九九热在线免费观看| 日本成人小视频| 日韩av在线资源| 午夜av中文字幕| 亚洲综合电影| 一区二区在线观看免费视频播放| 欧洲国产精品| 蜜臀久久99精品久久久| 九一久久久久久| 日本成人精品在线| 久久亚洲成人av| 国产高清欧美| 一道本无吗dⅴd在线播放一区 | 国产美女主播在线播放 | 久久a级毛片毛片免费观看| 欧美午夜在线一二页| 成人精品视频在线播放| 男人天堂久久久| 久久免费看少妇高潮| 99c视频在线| 国产理论片在线观看| 午夜在线一区| 久久久久久久久久久91| 91日韩中文字幕| 日韩欧美精品综合| 国产亚洲日本欧美韩国| 亚洲午夜久久久久久久久红桃| 大伊香蕉精品在线品播放| 日韩欧美一卡二卡| 国产大片一区二区三区| 日本欧美在线| 欧美色窝79yyyycom| 老司机午夜av| 午夜激情成人网| 91黄色小视频| 欧美成人精品欧美一级乱| 午夜影院在线播放| 五月天中文字幕一区二区| 久久香蕉视频网站| 调教一区二区| 一区二区欧美视频| 高清无码一区二区在线观看吞精| 超碰在线观看免费版| 自拍偷拍欧美精品| 黄色网络在线观看| 在线观看午夜av| 亚洲一区二区影院| 青青草成人免费在线视频| 久操av在线| 亚洲国产精品久久久男人的天堂| 日韩极品视频在线观看 | 国产精品久久久91| 一级成人免费视频| 国产一区二区三区综合| 亚洲xxxx视频| 亚洲乱熟女一区二区| 国产成人自拍高清视频在线免费播放| 97久久天天综合色天天综合色hd| 国产视频在线免费观看| 国产成人av电影在线播放| 999在线观看免费大全电视剧| 国产 欧美 自拍| 99精品久久只有精品| 欧美国产综合视频| eeuss影院在线播放| √…a在线天堂一区| 无颜之月在线看| 91九色美女在线视频| 一本一本大道香蕉久在线精品| 国产一二三四在线视频| 99精品女人在线观看免费视频| 日韩一区二区三区在线| av黄色一级片| 日韩大片在线观看| 欧美乱大交xxxxx| 啦啦啦免费高清视频在线观看| 日韩精品一级中文字幕精品视频免费观看 | 婷婷社区五月天| 亚洲视频免费| 国产精品一区二区性色av| www.黄色国产| 国产丝袜欧美中文另类| 欧美 国产 精品| 蜜桃视频在线观看播放| 欧美精品v国产精品v日韩精品| 国产又黄又嫩又滑又白| 国产精品探花在线观看| 欧美日韩成人在线视频| 亚洲欧美另类在线视频| 国产黄色精品视频| 日韩精品一区二区三区色偷偷| 国产欧美黑人| 色av综合在线| 天天躁日日躁狠狠躁免费麻豆| 欧美色蜜桃97| 韩国19禁主播vip福利视频| 瑟瑟视频在线免费观看| 成人激情文学综合网| 一区二区三区四区不卡| 无码小电影在线观看网站免费| 欧美一区二区三区不卡| 亚洲а∨天堂久久精品2021| 激情欧美一区二区三区| 成人免费自拍视频| 国产在线一二三| 亚洲成人第一页| wwwwwxxxx日本| 国产不卡一二三区| 91a在线视频| 亚洲第一免费视频| 亚洲欧美日韩在线播放| 自拍偷拍 国产| 日韩欧美ww| 久久免费视频观看| 国产丰满美女做爰| 国产精品美女久久久久高潮| 国产精品-区区久久久狼| 亚洲一区二区三区日本久久九| 揄拍成人国产精品视频| 福利网址在线观看| 91玉足脚交白嫩脚丫在线播放| 男人添女荫道口喷水视频| 精品视频成人| 欧美成人在线免费| 99国产精品久久久久久久成人| 国产精品午夜电影| 中文字幕永久视频| 精品视频国产| 国产精品第一页在线| 国产综合视频一区二区三区免费| 调教+趴+乳夹+国产+精品| 亚洲一区二区在线免费| 99精品国产在热久久| 国产欧美丝袜| 擼擼色在线看观看免费| 日韩成人激情在线| 国产精品100| 久久综合九色综合久久久精品综合| 国产精品自拍片| 天天躁日日躁成人字幕aⅴ| 97成人在线视频| 性xxxxbbbb| 色婷婷综合中文久久一本| 免费看污片的网站| 免费在线看成人av| 国产精品美女在线播放| 欧美日韩午夜电影网| 欧美激情第三页| 五月婷婷深深爱| 一本色道久久综合狠狠躁的推荐 | 欧美精品无码一区二区三区| 精品国产乱码久久久久久蜜坠欲下 | 激情国产在线| 日韩电视剧在线观看免费网站| 久久久久久久久久久久久av| 国产亚洲精品aa| 亚洲77777| 一区二区三区毛片免费| 国产精品二区三区| 中文字幕一区久| 日韩网站免费观看高清| 精品久久久免费视频| 五月婷婷综合网| 五月婷婷欧美激情| 国产精品一品二品| 成 年 人 黄 色 大 片大 全| 欧美美女在线| 91精品久久久久久久久久久| 后进极品白嫩翘臀在线播放| 日韩电影中文字幕| 在线观看亚洲一区二区| 亚洲制服丝袜av| 中文字幕免费看| 精品在线播放午夜| heyzo亚洲| 99久久九九| 黄色99视频| 国产精品第一| 久久免费观看视频| 国产大片在线免费观看| 日韩女同互慰一区二区| www五月天com| 一区二区三区国产| 国产传媒国产传媒| 国产99精品在线观看| 乱子伦视频在线看| 国产精品99免费看| 天堂av一区二区| 成人精品毛片| 国产精品免费在线免费| 51精品在线| 久久精品国产v日韩v亚洲| 日本中文字幕电影在线观看| 欧美日韩国产高清一区二区三区| 在线看成人av| 亚洲青青青在线视频| 日韩毛片无码永久免费看| 懂色av一区二区三区免费看| 成人午夜激情av| a91a精品视频在线观看| 亚洲黄色网址在线观看| 精品理论电影| 久久99导航| 99香蕉久久| 3d动漫精品啪啪一区二区三区免费 | 一区二区三区四区国产精品| 国产精品情侣呻吟对白视频| 99国产精品久久久久| 日本黄色大片在线观看| 激情深爱一区二区| 日本中文字幕精品—区二区| 久久久久久9| 北条麻妃在线视频观看| 欧美日本中文| 国产又粗又爽又黄的视频| 日韩欧美视频| 午夜精品美女久久久久av福利| 欧美成人基地| 国内成+人亚洲| 国内精品麻豆美女在线播放视频| 亚洲一区二区中文字幕| 四虎地址8848精品| 国产欧美一区二区| 粉嫩91精品久久久久久久99蜜桃| 日本中文字幕久久看| 免费看男女www网站入口在线 | 高清国产一区二区三区| 欧美精品色视频| 韩国三级中文字幕hd久久精品| www.涩涩涩| 奇米影视一区二区三区| 亚洲中文字幕久久精品无码喷水| 老司机精品导航| 国产精品亚洲a| 日韩一区精品字幕| 国产三级国产精品国产专区50| 日韩黄色片在线观看| 亚洲狼人综合干| 日本欧美韩国一区三区| 91高清国产视频| 精品亚洲欧美一区| 久久aaaa片一区二区| 国产精品69毛片高清亚洲| 女女调教被c哭捆绑喷水百合| 国产成人啪午夜精品网站男同| 国偷自产av一区二区三区麻豆| 丁香婷婷综合激情五月色| 亚洲色图欧美日韩| 久久亚洲综合色| 欧洲av一区二区三区| 国产精品网站在线| 91麻豆精品成人一区二区| 夜夜精品浪潮av一区二区三区| 久久综合亚洲色hezyo国产| 午夜精彩视频在线观看不卡| 午夜影院免费在线观看| 欧美三区免费完整视频在线观看| 一区二区视频免费观看| 日韩一区二区精品葵司在线 | 成人精品一区二区三区中文字幕| 99re久久精品国产| 久久久www免费人成精品| 黑人と日本人の交わりビデオ| 最新国产精品久久精品| 精品在线免费观看视频| 欧美性xxxx18| 亚洲一区中文字幕在线| 精品日韩欧美在线| 可以直接在线观看的av| 久久精品久久精品亚洲人| a√中文在线观看| 国产精品免费久久久久久| 99精品在免费线中文字幕网站一区| 欧美日韩亚洲在线| 亚洲草久电影| 精品免费国产一区二区| 国产精品 欧美精品| 日韩人妻一区二区三区| 亚洲天堂福利av| 91视频免费网址| 欧美精品三级日韩久久| 日韩电影网址| 日韩视频在线观看免费| 成人一级福利| 成人国产精品一区| 亚洲图片久久| 日本一道在线观看| 日本不卡一区二区三区| 国产国语老龄妇女a片| 国产欧美一区二区精品仙草咪| 国产在线视频99| 欧美日韩一二三区| 久久久久久女乱国产| 久久久久久久999| 91九色成人| 日本一区二区三不卡| 激情视频一区| av在线网站免费观看| 日本一区二区免费在线观看视频| 国产一级片播放| 欧美一区二区在线播放| 国产鲁鲁视频在线观看免费| 国模精品视频一区二区| 国产成人久久精品一区二区三区| 欧美日韩精品免费观看| 国产精品久久| 久久精品无码一区二区三区毛片| 国产欧美一区二区精品性| 精品91久久久| 日韩精品一区二区三区视频在线观看| 91caoporn在线| 日韩av成人在线| 牛牛视频精品一区二区不卡| 99热这里只有精品免费| 韩日精品视频一区| 夫妇露脸对白88av| 日本高清视频一区二区| 手机av免费在线观看| 欧美夫妻性生活xx| 国产午夜亚洲精品一级在线| 亚洲一区二区三区午夜| 男女激情视频一区| youjizz亚洲女人| 欧美三级中文字幕在线观看| 四虎影视在线播放| 久久免费高清视频| 国产ts一区| 人妻无码久久一区二区三区免费| 国产91精品露脸国语对白| 欧美性猛交xxxxx少妇| 日韩三级免费观看| 少女频道在线观看高清 | 中文字幕一区二区视频| 一卡二卡三卡在线观看| 最近2019中文字幕一页二页| 男人天堂久久| 日本特级黄色大片| 国产一区二区不卡在线| 欧美日韩免费一区二区| 欧美变态口味重另类| av成人福利| 欧美极品jizzhd欧美| 日韩国产欧美视频| 女人十八毛片嫩草av| 3d动漫精品啪啪| 欧美6一10sex性hd| 国产自产在线视频一区| 国产深夜精品| 日韩一级av毛片| 欧美军同video69gay| 日韩激情av| 国产一区在线免费| 爽好久久久欧美精品| 任我爽在线视频| 欧美一区二区精品久久911| 色呦呦在线资源| 九九热久久66| 秋霞午夜av一区二区三区| 夫妻性生活毛片| 欧美精品一区二区三区蜜桃视频| 日韩脚交footjobhd| 日韩精品久久一区| 国产一区 二区 三区一级| 日本亚洲欧美在线| 国产亚洲免费的视频看| 成人在线精品| 久久视频这里有精品| 国产欧美视频一区二区三区| 国产特黄一级片| 51久久精品夜色国产麻豆| 日韩国产一区二区三区| 性高潮免费视频| 91国产精品成人| 日皮视频在线观看| 欧美精品亚洲精品| 国产在线乱码一区二区三区| 日韩欧美高清在线观看| 最近2019好看的中文字幕免费| 亚洲欧美日本国产| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 亚洲日本韩国一区| 可以免费看污视频的网站在线| 444亚洲人体| 日韩精品一区第一页| 国产无遮挡又黄又爽| zzijzzij亚洲日本成熟少妇| 女同另类激情重口| 日本一二三四区视频|