日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Docker(三):Dockerfile 命令详解

發(fā)布時(shí)間:2025/3/21 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker(三):Dockerfile 命令详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

上一篇文章Docker(二):Dockerfile 使用介紹介紹了 Dockerfile 的使用,這篇文章我們來(lái)繼續(xù)了解 Dockerfile ,學(xué)習(xí) Dockerfile 各種命令的使用。

Dockerfile 指令詳解

1 FROM 指定基礎(chǔ)鏡像

FROM 指令用于指定其后構(gòu)建新鏡像所使用的基礎(chǔ)鏡像。FROM 指令必是 Dockerfile 文件中的首條命令,啟動(dòng)構(gòu)建流程后,Docker 將會(huì)基于該鏡像構(gòu)建新鏡像,FROM 后的命令也會(huì)基于這個(gè)基礎(chǔ)鏡像。

FROM語(yǔ)法格式為:

FROM <image>
  • 1

FROM <image>:<tag>
  • 1

FROM <image>:<digest>
  • 1

通過(guò) FROM 指定的鏡像,可以是任何有效的基礎(chǔ)鏡像。FROM 有以下限制:

  • FROM 必須 是 Dockerfile 中第一條非注釋命令
  • 在一個(gè) Dockerfile 文件中創(chuàng)建多個(gè)鏡像時(shí),FROM 可以多次出現(xiàn)。只需在每個(gè)新命令 FROM 之前,記錄提交上次的鏡像 ID。
  • tag 或 digest 是可選的,如果不使用這兩個(gè)值時(shí),會(huì)使用 latest 版本的基礎(chǔ)鏡像

2 RUN 執(zhí)行命令

在鏡像的構(gòu)建過(guò)程中執(zhí)行特定的命令,并生成一個(gè)中間鏡像。格式:

#shell格式 RUN <command> #exec格式 RUN ["executable", "param1", "param2"]
  • 1
  • 2
  • 3
  • 4
  • RUN 命令將在當(dāng)前 image 中執(zhí)行任意合法命令并提交執(zhí)行結(jié)果。命令執(zhí)行提交后,就會(huì)自動(dòng)執(zhí)行 Dockerfile 中的下一個(gè)指令。
  • 層級(jí) RUN 指令和生成提交是符合 Docker 核心理念的做法。它允許像版本控制那樣,在任意一個(gè)點(diǎn),對(duì) image 鏡像進(jìn)行定制化構(gòu)建。
  • RUN 指令創(chuàng)建的中間鏡像會(huì)被緩存,并會(huì)在下次構(gòu)建中使用。如果不想使用這些緩存鏡像,可以在構(gòu)建時(shí)指定?--no-cache?參數(shù),如:docker build --no-cache。

3 COPY 復(fù)制文件

格式:

COPY <源路徑>... <目標(biāo)路徑> COPY ["<源路徑1>",... "<目標(biāo)路徑>"]
  • 1
  • 2

和 RUN 指令一樣,也有兩種格式,一種類似于命令行,一種類似于函數(shù)調(diào)用。COPY 指令將從構(gòu)建上下文目錄中 <源路徑> 的文件/目錄復(fù)制到新的一層的鏡像內(nèi)的<目標(biāo)路徑>位置。比如:

COPY package.json /usr/src/app/
  • 1

<源路徑>可以是多個(gè),甚至可以是通配符,其通配符規(guī)則要滿足 Go 的 filepath.Match 規(guī)則,如:

COPY hom* /mydir/ COPY hom?.txt /mydir/
  • 1
  • 2

<目標(biāo)路徑>可以是容器內(nèi)的絕對(duì)路徑,也可以是相對(duì)于工作目錄的相對(duì)路徑(工作目錄可以用 WORKDIR 指令來(lái)指定)。目標(biāo)路徑不需要事先創(chuàng)建,如果目錄不存在會(huì)在復(fù)制文件前先行創(chuàng)建缺失目錄。

此外,還需要注意一點(diǎn),使用 COPY 指令,源文件的各種元數(shù)據(jù)都會(huì)保留。比如讀、寫、執(zhí)行權(quán)限、文件變更時(shí)間等。這個(gè)特性對(duì)于鏡像定制很有用。特別是構(gòu)建相關(guān)文件都在使用 Git 進(jìn)行管理的時(shí)候。

4 ADD 更高級(jí)的復(fù)制文件

ADD 指令和 COPY 的格式和性質(zhì)基本一致。但是在 COPY 基礎(chǔ)上增加了一些功能。比如<源路徑>可以是一個(gè) URL,這種情況下,Docker 引擎會(huì)試圖去下載這個(gè)鏈接的文件放到<目標(biāo)路徑>去。

在構(gòu)建鏡像時(shí),復(fù)制上下文中的文件到鏡像內(nèi),格式:

ADD <源路徑>... <目標(biāo)路徑> ADD ["<源路徑>",... "<目標(biāo)路徑>"]
  • 1
  • 2

注意?
如果 docker 發(fā)現(xiàn)文件內(nèi)容被改變,則接下來(lái)的指令都不會(huì)再使用緩存。關(guān)于復(fù)制文件時(shí)需要處理的/,基本跟正常的 copy 一致

5 ENV 設(shè)置環(huán)境變量

格式有兩種:

ENV <key> <value> ENV <key1>=<value1> <key2>=<value2>...
  • 1
  • 2

這個(gè)指令很簡(jiǎn)單,就是設(shè)置環(huán)境變量而已,無(wú)論是后面的其它指令,如 RUN,還是運(yùn)行時(shí)的應(yīng)用,都可以直接使用這里定義的環(huán)境變量。

ENV VERSION=1.0 DEBUG=on \NAME="Happy Feet"
  • 1
  • 2

這個(gè)例子中演示了如何換行,以及對(duì)含有空格的值用雙引號(hào)括起來(lái)的辦法,這和 Shell 下的行為是一致的。

6 EXPOSE

為構(gòu)建的鏡像設(shè)置監(jiān)聽端口,使容器在運(yùn)行時(shí)監(jiān)聽。格式:

EXPOSE <port> [<port>...]
  • 1

EXPOSE 指令并不會(huì)讓容器監(jiān)聽 host 的端口,如果需要,需要在 docker run 時(shí)使用?-p、-P?參數(shù)來(lái)發(fā)布容器端口到 host 的某個(gè)端口上。

7 VOLUME 定義匿名卷

VOLUME用于創(chuàng)建掛載點(diǎn),即向基于所構(gòu)建鏡像創(chuàng)始的容器添加卷:

VOLUME ["/data"]
  • 1

一個(gè)卷可以存在于一個(gè)或多個(gè)容器的指定目錄,該目錄可以繞過(guò)聯(lián)合文件系統(tǒng),并具有以下功能:

  • 卷可以容器間共享和重用
  • 容器并不一定要和其它容器共享卷
  • 修改卷后會(huì)立即生效
  • 對(duì)卷的修改不會(huì)對(duì)鏡像產(chǎn)生影響
  • 卷會(huì)一直存在,直到?jīng)]有任何容器在使用它

VOLUME 讓我們可以將源代碼、數(shù)據(jù)或其它內(nèi)容添加到鏡像中,而又不并提交到鏡像中,并使我們可以多個(gè)容器間共享這些內(nèi)容。

8 WORKDIR 指定工作目錄

WORKDIR用于在容器內(nèi)設(shè)置一個(gè)工作目錄:

WORKDIR /path/to/workdir
  • 1

通過(guò)WORKDIR設(shè)置工作目錄后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT、ADD、COPY 等命令都會(huì)在該目錄下執(zhí)行。?
如,使用WORKDIR設(shè)置工作目錄:

WORKDIR /a WORKDIR b WORKDIR c RUN pwd
  • 1
  • 2
  • 3
  • 4

在以上示例中,pwd 最終將會(huì)在?/a/b/c?目錄中執(zhí)行。在使用 docker run 運(yùn)行容器時(shí),可以通過(guò)-w參數(shù)覆蓋構(gòu)建時(shí)所設(shè)置的工作目錄。

9 USER 指定當(dāng)前用戶

USER 用于指定運(yùn)行鏡像所使用的用戶:

USER daemon
  • 1

使用USER指定用戶時(shí),可以使用用戶名、UID 或 GID,或是兩者的組合。以下都是合法的指定試:

USER user USER user:group USER uid USER uid:gid USER user:gid USER uid:group
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

使用USER指定用戶后,Dockerfile 中其后的命令 RUN、CMD、ENTRYPOINT 都將使用該用戶。鏡像構(gòu)建完成后,通過(guò) docker run 運(yùn)行容器時(shí),可以通過(guò)?-u?參數(shù)來(lái)覆蓋所指定的用戶。

10 CMD

CMD用于指定在容器啟動(dòng)時(shí)所要執(zhí)行的命令。CMD 有以下三種格式:

CMD ["executable","param1","param2"] CMD ["param1","param2"] CMD command param1 param2
  • 1
  • 2
  • 3

省略可執(zhí)行文件的 exec 格式,這種寫法使 CMD 中的參數(shù)當(dāng)做 ENTRYPOINT 的默認(rèn)參數(shù),此時(shí) ENTRYPOINT 也應(yīng)該是 exec 格式,具體與 ENTRYPOINT 的組合使用,參考 ENTRYPOINT。

注意?
與 RUN 指令的區(qū)別:RUN 在構(gòu)建的時(shí)候執(zhí)行,并生成一個(gè)新的鏡像,CMD 在容器運(yùn)行的時(shí)候執(zhí)行,在構(gòu)建時(shí)不進(jìn)行任何操作。

11 ENTRYPOINT

ENTRYPOINT 用于給容器配置一個(gè)可執(zhí)行程序。也就是說(shuō),每次使用鏡像創(chuàng)建容器時(shí),通過(guò) ENTRYPOINT 指定的程序都會(huì)被設(shè)置為默認(rèn)程序。ENTRYPOINT 有以下兩種形式:

ENTRYPOINT ["executable", "param1", "param2"] ENTRYPOINT command param1 param2
  • 1
  • 2

ENTRYPOINT 與 CMD 非常類似,不同的是通過(guò)docker run執(zhí)行的命令不會(huì)覆蓋 ENTRYPOINT,而docker run命令中指定的任何參數(shù),都會(huì)被當(dāng)做參數(shù)再次傳遞給 ENTRYPOINT。Dockerfile 中只允許有一個(gè) ENTRYPOINT 命令,多指定時(shí)會(huì)覆蓋前面的設(shè)置,而只執(zhí)行最后的 ENTRYPOINT 指令。

docker run運(yùn)行容器時(shí)指定的參數(shù)都會(huì)被傳遞給 ENTRYPOINT ,且會(huì)覆蓋 CMD 命令指定的參數(shù)。如,執(zhí)行docker run <image> -d時(shí),-d 參數(shù)將被傳遞給入口點(diǎn)。

也可以通過(guò)docker run --entrypoint重寫 ENTRYPOINT 入口點(diǎn)。如:可以像下面這樣指定一個(gè)容器執(zhí)行程序:

ENTRYPOINT ["/usr/bin/nginx"]
  • 1

完整構(gòu)建代碼:

# Version: 0.0.3 FROM ubuntu:16.04 MAINTAINER 何民三 "cn.liuht@gmail.com" RUN apt-get update RUN apt-get install -y nginx RUN echo 'Hello World, 我是個(gè)容器' \ > /var/www/html/index.html ENTRYPOINT ["/usr/sbin/nginx"] EXPOSE 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

使用docker build構(gòu)建鏡像,并將鏡像指定為 itbilu/test:

docker build -t="itbilu/test" .
  • 1

構(gòu)建完成后,使用itbilu/test啟動(dòng)一個(gè)容器:

docker run -i -t itbilu/test -g "daemon off;"
  • 1

在運(yùn)行容器時(shí),我們使用了?-g "daemon off;",這個(gè)參數(shù)將會(huì)被傳遞給 ENTRYPOINT,最終在容器中執(zhí)行的命令為?/usr/sbin/nginx -g "daemon off;"。

12 LABEL

LABEL用于為鏡像添加元數(shù)據(jù),元數(shù)以鍵值對(duì)的形式指定:

LABEL <key>=<value> <key>=<value> <key>=<value> ...
  • 1

使用LABEL指定元數(shù)據(jù)時(shí),一條LABEL指定可以指定一或多條元數(shù)據(jù),指定多條元數(shù)據(jù)時(shí)不同元數(shù)據(jù)之間通過(guò)空格分隔。推薦將所有的元數(shù)據(jù)通過(guò)一條LABEL指令指定,以免生成過(guò)多的中間鏡像。?
如,通過(guò)LABEL指定一些元數(shù)據(jù):

LABEL version="1.0" description="這是一個(gè)Web服務(wù)器" by="IT筆錄"
  • 1

指定后可以通過(guò)docker inspect查看:

docker inspect itbilu/test "Labels": {"version": "1.0","description": "這是一個(gè)Web服務(wù)器","by": "IT筆錄" },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

13 ARG

ARG用于指定傳遞給構(gòu)建運(yùn)行時(shí)的變量:

ARG <name>[=<default value>]
  • 1

如,通過(guò)ARG指定兩個(gè)變量:

ARG site ARG build_user=IT筆錄
  • 1
  • 2

以上我們指定了 site 和 build_user 兩個(gè)變量,其中 build_user 指定了默認(rèn)值。在使用 docker build 構(gòu)建鏡像時(shí),可以通過(guò)?--build-arg <varname>=<value>?參數(shù)來(lái)指定或重設(shè)置這些變量的值。

docker build --build-arg site=itiblu.com -t itbilu/test .
  • 1

這樣我們構(gòu)建了 itbilu/test 鏡像,其中site會(huì)被設(shè)置為 itbilu.com,由于沒(méi)有指定 build_user,其值將是默認(rèn)值 IT 筆錄。

14 ONBUILD

ONBUILD用于設(shè)置鏡像觸發(fā)器:

ONBUILD [INSTRUCTION]
  • 1

當(dāng)所構(gòu)建的鏡像被用做其它鏡像的基礎(chǔ)鏡像,該鏡像中的觸發(fā)器將會(huì)被鑰觸發(fā)。?
如,當(dāng)鏡像被使用時(shí),可能需要做一些處理:

[...] ONBUILD ADD . /app/src ONBUILD RUN /usr/local/bin/python-build --dir /app/src [...]
  • 1
  • 2
  • 3
  • 4

15 STOPSIGNAL

STOPSIGNAL用于設(shè)置停止容器所要發(fā)送的系統(tǒng)調(diào)用信號(hào):

STOPSIGNAL signal
  • 1

所使用的信號(hào)必須是內(nèi)核系統(tǒng)調(diào)用表中的合法的值,如:SIGKILL。

16 SHELL

SHELL用于設(shè)置執(zhí)行命令(shell式)所使用的的默認(rèn) shell 類型:

SHELL ["executable", "parameters"]
  • 1

SHELL在Windows環(huán)境下比較有用,Windows 下通常會(huì)有 cmd 和 powershell 兩種 shell,可能還會(huì)有 sh。這時(shí)就可以通過(guò) SHELL 來(lái)指定所使用的 shell 類型:

FROM microsoft/windowsservercore# Executed as cmd /S /C echo default RUN echo default# Executed as cmd /S /C powershell -command Write-Host default RUN powershell -command Write-Host default# Executed as powershell -command Write-Host hello SHELL ["powershell", "-command"] RUN Write-Host hello# Executed as cmd /S /C echo hello SHELL ["cmd", "/S"", "/C"] RUN echo hello
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Dockerfile 使用經(jīng)驗(yàn)

Dockerfile 示例

構(gòu)建Nginx運(yùn)行環(huán)境

# 指定基礎(chǔ)鏡像 FROM sameersbn/ubuntu:14.04.20161014# 維護(hù)者信息 MAINTAINER sameer@damagehead.com# 設(shè)置環(huán)境 ENV RTMP_VERSION=1.1.10 \NPS_VERSION=1.11.33.4 \LIBAV_VERSION=11.8 \NGINX_VERSION=1.10.1 \NGINX_USER=www-data \NGINX_SITECONF_DIR=/etc/nginx/sites-enabled \NGINX_LOG_DIR=/var/log/nginx \NGINX_TEMP_DIR=/var/lib/nginx \NGINX_SETUP_DIR=/var/cache/nginx# 設(shè)置構(gòu)建時(shí)變量,鏡像建立完成后就失效 ARG BUILD_LIBAV=false ARG WITH_DEBUG=false ARG WITH_PAGESPEED=true ARG WITH_RTMP=true# 復(fù)制本地文件到容器目錄中 COPY setup/ ${NGINX_SETUP_DIR}/ RUN bash ${NGINX_SETUP_DIR}/install.sh# 復(fù)制本地配置文件到容器目錄中 COPY nginx.conf /etc/nginx/nginx.conf COPY entrypoint.sh /sbin/entrypoint.sh# 運(yùn)行指令 RUN chmod 755 /sbin/entrypoint.sh# 允許指定的端口 EXPOSE 80/tcp 443/tcp 1935/tcp# 指定網(wǎng)站目錄掛載點(diǎn) VOLUME ["${NGINX_SITECONF_DIR}"]ENTRYPOINT ["/sbin/entrypoint.sh"] CMD ["/usr/sbin/nginx"]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

構(gòu)建tomcat 環(huán)境

Dockerfile文件

# 指定基于的基礎(chǔ)鏡像 FROM ubuntu:13.10 # 維護(hù)者信息 MAINTAINER zhangjiayang "zhangjiayang@sczq.com.cn" # 鏡像的指令操作 # 獲取APT更新的資源列表 RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe"> /etc/apt/sources.list # 更新軟件 RUN apt-get update # Install curl RUN apt-get -y install curl # Install JDK 7 RUN cd /tmp && curl -L 'http://download.oracle.com/otn-pub/java/jdk/7u65-b17/jdk-7u65-linux-x64.tar.gz' -H 'Cookie: oraclelicense=accept-securebackup-cookie; gpw_e24=Dockerfile' | tar -xz RUN mkdir -p /usr/lib/jvm RUN mv /tmp/jdk1.7.0_65/ /usr/lib/jvm/java-7-oracle/ # Set Oracle JDK 7 as default Java RUN update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/bin/java 300 RUN update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-7-oracle/bin/javac 300 # 設(shè)置系統(tǒng)環(huán)境 ENV JAVA_HOME /usr/lib/jvm/java-7-oracle/ # Install tomcat7 RUN cd /tmp && curl -L 'http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.8/bin/apache-tomcat-7.0.8.tar.gz' | tar -xz RUN mv /tmp/apache-tomcat-7.0.8/ /opt/tomcat7/ ENV CATALINA_HOME /opt/tomcat7 ENV PATH $PATH:$CATALINA_HOME/bin # 復(fù)件tomcat7.sh到容器中的目錄 ADD tomcat7.sh /etc/init.d/tomcat7 RUN chmod 755 /etc/init.d/tomcat7 # Expose ports. 指定暴露的端口 EXPOSE 8080 # Define default command. ENTRYPOINT service tomcat7 start && tail -f /opt/tomcat7/logs/catalina.out
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

tomcat7.sh命令文件

export JAVA_HOME=/usr/lib/jvm/java-7-oracle/ export TOMCAT_HOME=/opt/tomcat7 case $1 in start) sh $TOMCAT_HOME/bin/startup.sh ;; stop) sh $TOMCAT_HOME/bin/shutdown.sh ;; restart) sh $TOMCAT_HOME/bin/shutdown.sh sh $TOMCAT_HOME/bin/startup.sh ;; esac exit 0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

原則與建議

  • 容器輕量化。從鏡像中產(chǎn)生的容器應(yīng)該盡量輕量化,能在足夠短的時(shí)間內(nèi)停止、銷毀、重新生成并替換原來(lái)的容器。
  • 使用?.gitignore。在大部分情況下,Dockerfile 會(huì)和構(gòu)建所需的文件放在同一個(gè)目錄中,為了提高構(gòu)建的性能,應(yīng)該使用?.gitignore?來(lái)過(guò)濾掉不需要的文件和目錄。
  • 為了減少鏡像的大小,減少依賴,僅安裝需要的軟件包。
  • 一個(gè)容器只做一件事。解耦復(fù)雜的應(yīng)用,分成多個(gè)容器,而不是所有東西都放在一個(gè)容器內(nèi)運(yùn)行。如一個(gè) Python Web 應(yīng)用,可能需要 Server、DB、Cache、MQ、Log 等幾個(gè)容器。一個(gè)更加極端的說(shuō)法:One process per container。
  • 減少鏡像的圖層。不要多個(gè) Label、ENV 等標(biāo)簽。
  • 對(duì)續(xù)行的參數(shù)按照字母表排序,特別是使用apt-get install -y安裝包的時(shí)候。
  • 使用構(gòu)建緩存。如果不想使用緩存,可以在構(gòu)建的時(shí)候使用參數(shù)--no-cache=true來(lái)強(qiáng)制重新生成中間鏡像。

總結(jié)

以上是生活随笔為你收集整理的Docker(三):Dockerfile 命令详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 厕拍极品 | 亚洲影院av | 91爱在线观看 | 国产馆视频 | 欧美夫妻性生活视频 | 国产视频九色蝌蚪 | 夜夜天天干 | 国产精品一区二区无线 | 国产刺激对白 | a√在线视频 | 女生扒开尿口让男生桶 | 日韩久久一区二区三区 | 人人爽爽人人 | 成人精品一区二区三区中文字幕 | 久操视频在线 | 在线看b | 久久理论视频 | 五月婷婷六月丁香 | 婷婷一级片 | 有码一区二区三区 | 波多野结衣大片 | 深夜国产视频 | 涩涩在线看 | 11孩岁女毛片| 99人妻少妇精品视频一区 | 久色资源| 欧美视频在线一区 | 9l视频自拍蝌蚪9l视频成人 | 日韩日b| 欧美激情网址 | 日韩欧美中文字幕在线观看 | 蜜桃免费在线视频 | 国产91福利| 久久er99热精品一区二区介绍 | 亚洲午夜毛片 | 欧美在线视频一区二区三区 | 麻豆网站免费看 | 国产精品丝袜在线 | 精产国品一二三产品蜜桃 | 色婷婷一区 | 国产小视频在线观看免费 | 国产 日韩 欧美 制服丝袜 | 精品少妇人妻AV无码专区在线 | 东北少妇av | 久久66热这里只有精品 | 亚洲国产激情 | 中文天堂在线资源 | 国产污在线观看 | 久色福利| 根深蒂固在线观看 | av成人在线看| 二区三区 | 黄色大片免费观看视频 | www.婷婷.com| 成人av在线一区二区 | 天堂av2020| 亚洲视频国产精品 | 11孩岁女毛片 | 波多野结衣一区二区三区 | 狠狠干女人 | 91成人精品视频 | 人妻视频一区二区三区 | 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲精品av中文字幕在线在线 | 114国产精品久久免费观看 | 亚洲精品 日韩无码 | 高清av网址 | aa视频在线| av激情小说 | 免费在线观看高清影视网站 | 香蕉视频911 | 国产sm网站 | 男生舔女生胸 | 日韩欧美激情 | 亚洲视频手机在线观看 | 久久久亚洲欧洲 | 午夜日韩欧美 | 色哟哟视频在线观看 | 1024金沙人妻一区二区三区 | 亚洲av无一区二区三区怡春院 | 毛片aaaaaa | 在线伊人网 | 青青草成人在线 | 亚洲精品性视频 | 亚洲三级久久 | 蛇女欲潮性三级 | 精品国产aⅴ一区二区三区东京热 | 精品一区久久久 | 13日本xxxxxⅹxxx20 | 少妇精品无码一区二区免费视频 | 日日爽视频 | 日韩成人精品一区二区三区 | 成人欧美一区二区三区黑人动态图 | 欧美一级片在线视频 | 久久久久久久久久国产精品 | jizz亚洲女人高潮大叫 | 91免费版黄 | 国产奶头好大揉着好爽视频 | 欧美第1页 |