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

Go 腳手架:使用 osbuilder 生成標準化 Dockerfile,并自動構建鏡像

開發 后端
本篇文章介紹了如何使用 osbuilder 生成符合 Dockerfile 最佳實踐的 Dockerfile,并生成 image Makefile規則構建鏡像。

當前企業應用的部署形態基本都是采用云原生的方式來部署。所謂的云原生部署方式,就是指將服務構建成一個容器鏡像,并使用 Kubernetes 進行部署。

在將服務構建成容器鏡像時,不僅需要編寫 Dockerfile,還需要執行 docker命令基于 Dockerfile 和編譯產物來構建出最終的鏡像。

本文就來詳細介紹下 osbuilder 腳手架,是如何生成符合最佳實踐、標準的 Dockerfile,并支持 make image命令,來構建出容器鏡像的。

一、Dockerfile 最佳實踐

在我的公眾號文章 Dockerfile 最佳實踐,我詳細介紹了如何編寫符合最佳實踐的 Dockerfile。如果你使用 osbuilder 工具生成項目,osbuilder 工具會為你自動生成符合最佳實踐的 Dockerfile 文件。

二、使用 osbuilder 工具生成 Dockerfile

首先需要安裝 osbuilder 工具。安裝命令如下:

$ go install github.com/onexstack/osbuilder/cmd/osbuilder@latest
$ osbuilder version

接下來只需要執行以下幾步,便可以生成能夠根據需求生成符合最佳實踐的 Dockerfile,并能構建出鏡像。

步驟 1:編寫項目配置文件

項目的配置文件如下(保存在 /tmp/osdemo.yaml 文件中):

scaffold: osbuilder
version: v0.0.16
metadata:
  # 選擇二進制文件的部署形式。當前已支持systemd。未來會支持docker、kubernetes,會生產Dockerfile、Kubernetes YAML 等資源
  deploymentMethod: kubernetes
  image:
    # 當指定 deploymentMethod 為 docker、kubernetes 時,構建鏡像的地址
    registry: docker.io
    # 指定 Dockerfile 的生成模式。可選的模式有:
    # - none:不生成 Dockerfile。需要自行實現 build/docker/<component_name>/Dockerfile 文件;
    # - runtime-only:僅包含運行時階段(適合已有外部構建產物),適合本地調試;
    # - multi-stage:多階段構建(builder + runtime);
    # - combined:同時生成 multi-stage、runtime-only 2 種類型的 Dockerfile:
    #   - multi-stage:Dockerfile 名字為 Dockerfile
    #   - runtime-only:Dockerfile 名字為 Dockerfile.runtime-only
    dockerfileMode: combined
    # 是否采用 distroless 運行時鏡像。如果不采用會使用 debian 基礎鏡像,否則使用 gcr.io/distroless/base-debian12:nonroot
    # - true:采用 gcr.io/distroless/base-debian12:nonroot 基礎鏡像。生產環境建議設置為 true;
    # - false:采用 debian:bookworm 基礎鏡像。測試環境建議設置為 fasle;
    distroless: true
  # 控制 Makefile 的生成方式。當前支持以下 3 種:
  # - none:不生成 makefile
  # - structured:生成單個 makefile
  # - unstructured:生成結構化的 makefile
  makefileMode: unstructured
  # 項目創建者名字,用于生成版權信息
  author: 孔令飛
  # 項目創建者郵箱,用于生成版權信息
  email: colin404@foxmail.com
# osbuilder 支持多種應用類型。當前僅支持 Web 服務類型
# 未來會支持:異步任務 Job 類型、命令行工具類型、聲明式API服務器類型
webServers:
  - binaryName: os-apiserver
    # Web Server 使用的框架。當前支持 gin、grpc
    # 未來會支持kratos、grpc-gateway、go-zero、kitex、hertz等
    webFramework: grpc
    # Web Server 后端使用的存儲類型。當前支持 memory、mysql
    # 未來會支持etcd、redis、sqlite、mongo、postgresql
    storageType: memory
    # 是否添加健康檢查接口
    withHealthz: true
    # 是否添加用戶默認,開啟后,有完整的認證、鑒權流程
    withUser: false
    # 是否生成注冊/反注冊到騰訊北極星服務中心的代碼
    withPolaris: false

上面的配置文件中,我們進行了以下配置:

image:
    # 當指定 deploymentMethod 為 docker、kubernetes 時,構建鏡像的地址
    registry: docker.io
    # 指定 Dockerfile 的生成模式。可選的模式有:
    # - none:不生成 Dockerfile。需要自行實現 build/docker/<component_name>/Dockerfile 文件;
    # - runtime-only:僅包含運行時階段(適合已有外部構建產物),適合本地調試;
    # - multi-stage:多階段構建(builder + runtime);
    # - combined:同時生成 multi-stage、runtime-only 2 種類型的 Dockerfile:
    #   - multi-stage:Dockerfile 名字為 Dockerfile
    #   - runtime-only:Dockerfile 名字為 Dockerfile.runtime-only
    dockerfileMode: combined
    # 是否采用 distroless 運行時鏡像。如果不采用會使用 debian 基礎鏡像,否則使用 gcr.io/distroless/base-debian12:nonroot
    # - true:采用 gcr.io/distroless/base-debian12:nonroot 基礎鏡像。生產環境建議設置為 true;
    # - false:采用 debian:bookworm 基礎鏡像。測試環境建議設置為 fasle;
    distroless: true
  • registry:用來配置鏡像的倉庫地址;
  • dockerfileMode:用來配置鏡像的模式:
  • multi-stage:Dockerfile 名字為 Dockerfile
  • runtime-only:Dockerfile 名字為 Dockerfile.runtime-only
  • none:不生成 Dockerfile。需要自行實現 build/docker/<component_name>/Dockerfile 文件;
  • runtime-only:僅包含運行時階段(適合已有外部構建產物),適合本地調試;
  • multi-stage:多階段構建(builder + runtime);
  • combined:同時生成 multi-stage、runtime-only 2 種類型的 Dockerfile:
  • distroless:用來控制是否使用 distroless 基礎鏡像。生產環境建議使用 distroless 鏡像。測試環境為了排障方便,可以不適用 distroless 鏡像。

步驟 2:生成項目

執行以下命令生成項目:

$ osbuilder create project -c /tmp/osdemo.yaml osdemo

步驟 3:生成 REST 資源

$ cd osdemo
$ osbuilder create api --kinds cron_job,job -b os-apiserver

步驟 4:構建 Docker 鏡像

在生成的 osdemo 項目中,已經為 os-apiserver 組件生成了 Dockerfile,位于 build/docker/os-apiserver/目錄下:

$ ls build/docker/os-apiserver
Dockerfile  Dockerfile.runtime-only
  • Dockerfile 使用多階段構建的方式來構建鏡像,在 builder 鏡像中,編譯 Go 源碼;
  • Dockerfile.runtime-only:在本地編譯源碼,并被 COPY 到鏡像中,適合本地調試。

這里,我們執行以下命令來構建鏡像:

$ make protoc # 編譯 os-apiserver 的 Protobuf 文件
$ go mod tidy # 下載缺失的依賴包
$ go generate ./... # 生成代碼(依賴注入)
$ make image RUNTIME_ONLY=1 # 現在本地編譯源碼,產出二進制文件,再COPY 到鏡像中。
===========> Building binary os-apiserver v0.0.15 for linux amd64
===========> Building docker image os-apiserver v0.0.15 for linux_amd64
[+] Building 3.3s (16/16) FINISHED
 ...                                                         0.0s
 => => naming to docker.io/osdemo/os-apiserver:v0.0.0

可以看到,上述命令成功構建出了 docker.io/osdemo/os-apiserver:v0.0.0鏡像,執行以下命令運行鏡像:

$ docker run docker.io/osdemo/os-apiserver:v0.0.0
WARNING: proto: file "auth.proto" is already registered
See https://protobuf.dev/reference/go/faq#namespace-conflict

I1013 12:18:13.514143       7 server.go:66] "Initializing database connection" type="memory"
I1013 12:18:13.515584       7 grpc_server.go:62] "Start to listening the incoming requests" protocol="grpc" addr="[::]:6666"

可以看到,我們可以成功運行鏡像。如果你想使用多階段構建,可以執行以下命令:

$ make image

三、osbuilder 工具生成的 Dockerfile 文件

osbuilder 可以自動生成 4 種類型的 Dockerfile 文件:

(1) 使用 distroless 鏡像,本地編譯后 COPY 到鏡像中,適合本地測試,Dockerfile 如下:

# syntax=docker/dockerfile:1.7

# 0) Build args (overridable in CI)
ARG BUILDER_IMAGE=alpine:3.20
ARG RUNTIME_IMAGE=gcr.io/distroless/base-debian12:nonroot
ARG UID=65532
ARG GID=65532

# 1) Use a lightweight builder image with package manager to fetch tini.
# builder stage does not compile go source files.
FROM ${BUILDER_IMAGE} AS builder

# Work directory
WORKDIR /workspace

# Install minimal tools required to download files securely
RUN apk add --no-cache curl ca-certificates

# Download the static tini binary (example for amd64); use a different file for other architectures
# Then make it executable so it can be used as PID 1 in the final image
RUN curl -fsSL -o /usr/bin/tini https://github.com/krallin/tini/releases/download/v0.19.0/tini-static-amd64 \
 && chmod +x /usr/bin/tini

# 2) Runtime stage
FROM ${RUNTIME_IMAGE} AS runtime

ARG OS
ARG ARCH
ARG UID
ARG GID

# App directory
WORKDIR /app

# Copy artifact and set ownership; numeric UID:GID is more robust
COPY --from=builder --chown=0:0 /usr/bin/tini /usr/bin/tini
COPY --chown=${UID}:${GID} _output/platforms/${OS}/${ARCH}/os-apiserver /app/os-apiserver

# Security: run as non-root
USER ${UID}:${GID}

# Use tini as minimal init to handle signals and reap zombies
ENTRYPOINT ["/usr/bin/tini", "--", "/app/os-apiserver"]

(2) 使用 distroless 鏡像,并使用多階段構建,Dockerfile 如下:

# syntax=docker/dockerfile:1.7

# 0) Build args (overridable in CI)
ARG BUILDER_IMAGE=golang:1.25.0
ARG RUNTIME_IMAGE=gcr.io/distroless/base-debian12:nonroot
ARG UID=65532
ARG GID=65532

# 1) Builder stage
FROM ${BUILDER_IMAGE} AS builder

ARG OS
ARG ARCH

# Optional: install build-time tools (as needed)
# RUN apt-get update && apt-get install -y --no-install-recommends upx && rm -rf /var/lib/apt/lists/*

# Work directory
WORKDIR /workspace

# Install minimal tools required to download files securely
RUN apk add --no-cache curl ca-certificates

# Download the static tini binary (example for amd64); use a different file for other architectures
# Then make it executable so it can be used as PID 1 in the final image
RUN curl -fsSL -o /usr/bin/tini https://github.com/krallin/tini/releases/download/v0.19.0/tini-static-amd64 \
 && chmod +x /usr/bin/tini

# Use Go modules cache - The most important cache optimization
# Copy go.mod and go.sum first to leverage Docker layer cache
COPY go.mod go.sum ./

# Use cache mount to cache Go modules
RUN --mount=type=cache,target=/go/pkg/mod \
 --mount=type=cache,target=/root/.cache/go-build \
 go mod download

# Copy source code
COPY . .

# Go build parameters (enable CGO if your project needs static linking)
ENV CGO_ENABLED=1 GOOS=${OS} GOARCH=${ARCH} GO111MODULE=on GOCACHE=/root/.cache/go-build GOMODCACHE=/go/pkg/mod

# Build with cache mount for make build
RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    make build BINS=os-apiserver

# 2) Runtime stage
FROM ${RUNTIME_IMAGE} AS runtime

ARG OS
ARG ARCH
ARG UID
ARG GID

# App directory
WORKDIR /app

# Copy artifacts and set ownership; numeric UID:GID is more robust
COPY --from=builder --chown=0:0 /tmp/tini /usr/bin/tini
COPY --from=builder --chown=${UID}:${GID} /workspace/_output/platforms/linux/amd64/os-apiserver /app/os-apiserver

# Security: run as non-root
USER ${UID}:${GID}

# Use tini as minimal init to handle signals and reap zombies
ENTRYPOINT ["/usr/bin/tini", "--", "/app/os-apiserver"]

(3) 不使用 distroless 鏡像,本地編譯后 COPY 到鏡像中,適合本地測試,Dockerfile 如下:

# syntax=docker/dockerfile:1.7

# 0) Build args (overridable in CI)
ARG BUILDER_IMAGE=alpine:3.20
ARG RUNTIME_IMAGE=debian:bookworm
ARG USER=noroot
ARG UID=65532
ARG GID=65532

# 1) Use a lightweight builder image with package manager to fetch tini.
# builder stage does not compile go source files.
FROM ${BUILDER_IMAGE} AS builder

# Work directory
WORKDIR /workspace

# Install minimal tools required to download files securely
RUN apk add --no-cache curl ca-certificates

# Download the static tini binary (example for amd64); use a different file for other architectures
# Then make it executable so it can be used as PID 1 in the final image
RUN curl -fsSL -o /usr/bin/tini https://github.com/krallin/tini/releases/download/v0.19.0/tini-static-amd64 \
 && chmod +x /usr/bin/tini

# 2) Runtime stage
FROM ${RUNTIME_IMAGE} AS runtime

ARG OS
ARG ARCH
ARG USER
ARG UID
ARG GID

# App directory
WORKDIR /app

# Install runtime essentials
RUN apt-get update \
 && apt-get install -y --no-install-recommends ca-certificates tzdata wget curl telnet \
 && rm -rf /var/lib/apt/lists/*

# Security: create a non-root user (ignore if it already exists)
# Use || true to prevent build failures if the group/user already exists in the base image
RUN groupadd -g ${GID} ${USER} 2>/dev/null || true \
 && useradd -u ${UID} -g ${USER} ${USER} 2>/dev/null || true

# Copy artifact and set ownership; numeric UID:GID is more robust
COPY --from=builder --chown=0:0 /usr/bin/tini /usr/bin/tini
COPY --chown=${UID}:${GID} _output/platforms/${OS}/${ARCH}/os-apiserver /app/os-apiserver

# Security: run as non-root
USER ${UID}:${GID}

# Use tini as minimal init to handle signals and reap zombies
ENTRYPOINT ["/usr/bin/tini", "--", "/app/os-apiserver"]

(4) 不使用 distroless 鏡像,并使用多階段構建,Dockerfile 如下:

# syntax=docker/dockerfile:1.7

# 0) Build args (overridable in CI)
ARG BUILDER_IMAGE=golang:1.25.0
ARG RUNTIME_IMAGE=debian:bookworm
ARG USER=noroot
ARG UID=65532
ARG GID=65532

# 1) Builder stage
FROM ${BUILDER_IMAGE} AS builder

ARG OS
ARG ARCH

# Optional: install build-time tools (as needed)
# RUN apt-get update && apt-get install -y --no-install-recommends upx && rm -rf /var/lib/apt/lists/*

# Work directory
WORKDIR /workspace

# Install minimal tools required to download files securely
RUN apk add --no-cache curl ca-certificates

# Download the static tini binary (example for amd64); use a different file for other architectures
# Then make it executable so it can be used as PID 1 in the final image
RUN curl -fsSL -o /usr/bin/tini https://github.com/krallin/tini/releases/download/v0.19.0/tini-static-amd64 \
 && chmod +x /usr/bin/tini

# Use Go modules cache - The most important cache optimization
# Copy go.mod and go.sum first to leverage Docker layer cache
COPY go.mod go.sum ./

# Use cache mount to cache Go modules
RUN --mount=type=cache,target=/go/pkg/mod \
 --mount=type=cache,target=/root/.cache/go-build \
 go mod download

# Copy source code
COPY . .

# Go build parameters (enable CGO if your project needs static linking)
ENV CGO_ENABLED=1 GOOS=${OS} GOARCH=${ARCH} GO111MODULE=on GOCACHE=/root/.cache/go-build GOMODCACHE=/go/pkg/mod

# Build with cache mount for make build
RUN --mount=type=cache,target=/go/pkg/mod \
    --mount=type=cache,target=/root/.cache/go-build \
    make build BINS=os-apiserver

# 2) Runtime stage
FROM ${RUNTIME_IMAGE} AS runtime

ARG OS
ARG ARCH
ARG USER
ARG UID
ARG GID

# App directory
WORKDIR /app
# Install runtime essentials
RUN apt-get update \
 && apt-get install -y --no-install-recommends ca-certificates tzdata wget curl telnet \
 && rm -rf /var/lib/apt/lists/*

# Security: create a non-root user (ignore errors if already exists)
# Use || true to avoid build failures when the group/user already exists in base image
RUN groupadd -g ${GID} ${USER} 2>/dev/null || true \
 && useradd -u ${UID} -g ${USER} ${USER} 2>/dev/null || true

# Copy artifacts and set ownership; numeric UID:GID is more robust
COPY --from=builder --chown=0:0 /tmp/tini /usr/bin/tini
COPY --from=builder --chown=${UID}:${GID} /workspace/_output/platforms/linux/amd64/os-apiserver /app/os-apiserver

# Security: run as non-root
USER ${UID}:${GID}

# Use tini as minimal init to handle signals and reap zombies
ENTRYPOINT ["/usr/bin/tini", "--", "/app/os-apiserver"]

四、總結

本篇文章介紹了如何使用 osbuilder 生成符合 Dockerfile 最佳實踐的 Dockerfile,并生成 image Makefile規則構建鏡像。

責任編輯:趙寧寧 來源: 令飛編程
相關推薦

2022-12-12 08:56:45

Vite3Vite

2025-05-16 07:24:41

Springkafka腳手架

2021-01-07 05:34:07

腳手架JDK緩存

2018-08-30 16:08:37

Node.js腳手架工具

2018-06-11 14:39:57

前端腳手架工具node.js

2009-09-16 15:05:58

CakePHP腳手架

2021-08-27 07:06:10

IDEA插件腳手架

2016-09-07 15:35:06

VueReact腳手架

2021-12-23 10:35:32

SpringCloud腳手架架構

2014-08-15 09:36:06

2016-10-07 22:09:59

2010-04-20 14:55:58

Oracle標準化

2021-05-13 17:02:38

MDC腳手架日志

2020-03-20 08:32:41

物聯網腳手架傳感器

2021-05-21 05:22:52

腳手架工具項目

2020-06-29 11:35:02

Spring BootJava腳手架

2022-01-14 14:09:11

腳手架代碼自定義

2019-12-25 15:20:48

前端腳手架命令

2022-04-24 11:33:47

代碼管理工程

2023-11-21 17:36:04

OpenFeignSentinel
點贊
收藏

51CTO技術棧公眾號

亚洲九九九在线观看| 国产精品蜜臀av| 亚州欧美日韩中文视频| 高潮毛片无遮挡| 久久久人成影片一区二区三区在哪下载 | 日韩一区二区福利| 亚洲伊人一本大道中文字幕| 91 在线视频| 风间由美一区二区av101| 黑人巨大精品欧美一区二区三区 | 手机看片国产精品| 僵尸再翻生在线观看免费国语| 不卡区在线中文字幕| 国产精品va在线| 色在线观看视频| 国产a久久精品一区二区三区| 91麻豆精品国产91久久久| 成人黄色av片| 免费av在线| 2023国产一二三区日本精品2022| 国产精品海角社区在线观看| 久久久一二三区| 秋霞欧美视频| 亚洲毛片在线看| 国产免费无码一区二区| 激情中国色综合| 欧美视频第一页| 免费在线看黄色片| 欧美性天天影视| 国产香蕉久久精品综合网| 成人91视频| 国产熟女一区二区三区五月婷 | 久久久久久亚洲精品| 狂野欧美性猛交| 国产精品一区二区三区av麻 | 久久出品必属精品| 123成人网| 五月婷婷色综合| 97人人澡人人爽| 中文字幕av第一页| 国产精品婷婷| 国内精品一区二区三区| 日本中文在线视频| 成人看的羞羞网站| 亚洲午夜精品久久久久久久久久久久| 97人妻精品一区二区三区免费| 婷婷丁香久久| 国产精品毛片高清在线完整版| 精品欧美一区二区久久久伦| www.色呦呦| 国产伦精品一区二区三区免费| 国产精品海角社区在线观看| 久久久久久久久黄色| 香蕉成人久久| 欧美中文在线字幕| 毛片毛片女人毛片毛片| 一区二区久久| 欧美又大又粗又长| 日韩视频在线观看一区| 国产亚洲在线观看| 欧美在线影院在线视频| 亚洲毛片一区二区三区| 亚洲女优在线| 欧美在线视频一区二区| 亚洲国产成人无码av在线| 久久狠狠婷婷| 国产精品久久久久av免费| 国产九色91回来了| 91精品久久久久久久蜜月 | 中文字幕在线观看网站| 亚洲精品菠萝久久久久久久| www成人免费| av中文字幕在线观看第一页 | 久久九九全国免费| 视频在线99| 成人福利网站| 亚洲大片精品永久免费| 欧美精品一区免费| 四虎成人在线| 欧美精品在线一区二区三区| 国产美女主播在线| 欧美办公室脚交xxxx| 91久久一区二区| 超碰人人草人人| 大桥未久在线视频| 色婷婷av一区二区| 亚洲一区二区三区观看| japanese色系久久精品| 精品亚洲永久免费精品| 久久久久久久久福利| 自产国语精品视频| 国产91精品不卡视频| 中文字幕理论片| 国产精品一二二区| 蜜桃av噜噜一区二区三| 秋霞a级毛片在线看| 亚洲线精品一区二区三区八戒| 男人和女人啪啪网站| 国产精品99久久久久久董美香 | 黄色片视频网站| 日韩成人精品在线观看| 成人情趣片在线观看免费| 日本免费精品视频| 国产在线看一区| 久久久久se| 69av一区二区三区| 久久黄色片网站| 成人爽a毛片| 一区二区三区回区在观看免费视频| 91香蕉视频网| 99精品视频网| 成人在线视频网站| 亚洲欧美日韩免费| 亚洲日本在线观看| 黄色片视频在线播放| 精品视频在线观看网站| 亚洲视频免费一区| 国产精品.www| 久久99精品网久久| 日本欧美色综合网站免费| 在线观看a级片| 欧美午夜宅男影院| a视频免费观看| 欧美福利专区| 欧美xxxx做受欧美| 成人小视频在线播放| 国产黄色91视频| 午夜精品视频在线观看一区二区| 后进极品白嫩翘臀在线播放| 亚洲一区二区中文在线| 手机看片一级片| 亚洲三级网页| 久久全球大尺度高清视频| 国产精品永久久久久久久久久| 国产日韩影视精品| 俄罗斯av网站| 久久久久久久久久久久久久久久久久久久| 色多多国产成人永久免费网站| 久久久久久91亚洲精品中文字幕| 丰满亚洲少妇av| 中文精品一区二区三区| 日本三级在线播放完整版| 日韩欧美精品中文字幕| 在线观看国产免费视频| 伊人成综合网yiren22| 欧美精品久久久久a| a天堂在线视频| 亚洲视频精选在线| 欧美性受xxxxxx黑人xyx性爽| 欧美精品一区二区久久| 青青草一区二区| 三级视频网站在线| 精品久久久一区二区| 中文字幕人妻一区二区三区| 欧美激情综合色综合啪啪| 亚洲va欧美va国产综合久久| 黄色成年人视频在线观看| 制服.丝袜.亚洲.中文.综合| 欧美一级特黄高清视频| 韩日av一区二区| 国产一二三四五| 网站一区二区| 久久久久久久久91| 亚洲 美腿 欧美 偷拍| 福利视频第一区| 欧美成人国产精品一区二区| 日韩电影在线一区| 亚洲最大免费| 国产精品日韩精品在线播放| 欧美久久久精品| 丰满少妇在线观看bd| 精品久久久久久中文字幕一区奶水| 在线观看国产免费视频| 日韩在线一区二区三区| 一区二区免费在线视频| 日韩在线观看一区二区三区| 久久久综合免费视频| 天堂资源中文在线| 欧美亚洲日本国产| 放荡的美妇在线播放| 成人精品一区二区三区四区| 男人日女人bb视频| 日韩一区二区在线| 99www免费人成精品| 午夜影院在线播放| 欧美一级日韩免费不卡| 精品无码久久久久久久久| 91视频在线观看免费| 第四色婷婷基地| 国产一区亚洲| 日本欧美精品久久久| 精品国产亚洲日本| 欧美一区视频在线| 高清中文字幕一区二区三区| 4438亚洲最大| 日韩成人在线免费视频| 国产精品一级黄| 乱人伦xxxx国语对白| 日本欧美视频| 国产激情美女久久久久久吹潮| 电影一区二区三区| 久久久精品免费视频| 日韩欧美一级大片| 亚洲综合在线免费观看| 一区二区三区四区免费| 国产剧情av麻豆香蕉精品| 国产精品宾馆在线精品酒店| 欧美淫片网站| 任我爽在线视频精品一| 在线播放一区二区精品视频| 国产精品久久久久久久久久东京| 女同视频在线观看| 日韩中文在线中文网三级| 无码国产精品一区二区色情男同| 欧美人妖巨大在线| 波多野结衣视频网站| 尤物av一区二区| eeuss中文字幕| 91在线视频网址| 国产一级二级av| 免费在线看一区| 日韩在线xxx| 亚洲韩日在线| 国新精品乱码一区二区三区18| 日韩高清在线| 91精品国产乱码久久久久久久久| 毛片在线播放a| 国产亚洲视频中文字幕视频| 天堂在线观看视频| 日韩精品在线一区| 国产精品一区二区av白丝下载| 日韩欧美一区视频| 精品少妇theporn| 亚洲精品日日夜夜| 久久人妻无码aⅴ毛片a片app | 91在线不卡| 亚洲免费高清视频| 天堂av中文字幕| 亚洲精品在线电影| 99热国产在线观看| 一区二区三区四区在线免费观看 | 欧美色婷婷久久99精品红桃| 国产精品播放| 一区二区三区亚洲变态调教大结局 | 亚洲成人网在线观看| 国产成人精品片| 亚洲一级不卡视频| 久久婷婷综合国产| 亚洲综合免费观看高清在线观看| 欧美一区二区三区爽爽爽| 中文字幕中文字幕中文字幕亚洲无线 | 大地资源第二页在线观看高清版| 精品一二三区| 亚洲人久久久| 五月久久久综合一区二区小说| 一区二区视频在线观看| 97精品国产| a级网站在线观看| 欧美一区二区| 黄色激情在线视频| 99精品国产福利在线观看免费| av高清在线免费观看| 欧美特黄a级高清免费大片a级| 日韩精品一区二区免费| 亚洲国产高清一区| 男人靠女人免费视频网站| 欧美一级一区| 午夜视频在线瓜伦| 捆绑紧缚一区二区三区视频 | 亚洲一区二区毛片| aaa毛片在线观看| 免费成人你懂的| 99精品视频免费版的特色功能| 高清不卡一区二区在线| 你懂得在线视频| 国产人妖乱国产精品人妖| 欧美一级特黄aaa| 国产精品99久久久| 国产草草浮力影院| 中文字幕精品在线不卡| 日韩www视频| 久久精品亚洲国产奇米99| 超碰97av在线| 亚洲一区在线免费观看| 国产精品一区二区6| 欧美日韩一本到| 精品人妻av一区二区三区| 日韩av一卡二卡| 日本在线观看网站| 68精品国产免费久久久久久婷婷| 亚洲伦乱视频| 亚洲free性xxxx护士白浆| 欧美色图婷婷| 小说区视频区图片区| 亚洲国产导航| 黄色小视频免费网站| 成人爱爱电影网址| 羞羞在线观看视频| 五月婷婷激情综合网| 91黄色在线视频| 在线观看不卡一区| 精品欧美在线观看| 国产一区二区精品丝袜| 免费电影视频在线看| 国产精品扒开腿做爽爽爽视频| 亚洲成人黄色| 午夜精品电影在线观看| 99视频一区| 免费网站在线观看黄| 久久久久久免费毛片精品| 免费在线黄色网| 欧美三级电影精品| 手机福利在线| 欧美剧在线观看| 久久免费资源| 欧美久久在线| 伊人久久久大香线蕉综合直播| 精品人妻人人做人人爽| 日韩精品色哟哟| 无码一区二区精品| 亚洲欧美精品午睡沙发| 无码人妻熟妇av又粗又大| 日韩精品一区二区三区视频| a黄色在线观看| 热99精品只有里视频精品| 99久久人爽人人添人人澡| 亚洲自拍偷拍二区| 玖玖视频精品| 中文字幕日韩三级片| 亚洲一区中文日韩| 国产手机精品视频| 久久天天躁狠狠躁夜夜躁| 成人开心激情| 欧美视频小说| 国产农村妇女毛片精品久久莱园子| 折磨小男生性器羞耻的故事| 1024成人网色www| 精品无码人妻一区二区三| 欧美日韩一区二区在线观看| 经典三级在线| 日韩视频免费在线观看| 第84页国产精品| 欧美日韩免费精品| 久久精品91| 日韩在线免费观看av| 韩曰欧美视频免费观看| 亚洲欧美日韩成人在线| 7777kkkk成人观看| 亚洲国产合集| 人妻无码视频一区二区三区| 久久久欧美精品sm网站| 一区二区三区在线观看av| 日韩精品在线播放| 原纱央莉成人av片| 日韩欧美一区二区在线观看| 老**午夜毛片一区二区三区| 久久久久久久久久久久久久久| 色综合久久综合网| 国产高清自拍视频在线观看| 国产精品一区久久久| 天天天综合网| 美女流白浆视频| 亚洲国产一区二区视频| 亚洲欧洲综合在线| 4p变态网欧美系列| 精品久久久久中文字幕小说| 中文字幕国内自拍| 成人h版在线观看| 日本一本高清视频| 亚洲美女av电影| 国产91欧美| 99re6这里有精品热视频| 成人性生交大片| 亚洲s码欧洲m码国产av| 日韩在线视频国产| 视频在线亚洲| 国产免费人做人爱午夜视频| 国产精品国产三级国产| 国产后入清纯学生妹| 91精品国产91久久久久福利| 国产va免费精品观看精品视频| 色婷婷.com| 亚洲国产成人av| 国产高清视频在线播放| 91麻豆国产精品| 亚洲精品免费观看| 国产午夜精品久久久久久久久| 欧美一级日韩一级| 97se综合| 国产在线拍揄自揄拍无码| 成人午夜激情在线| 美女黄页在线观看| 欧美极品美女电影一区| 精品久久网站| 久久久久久久久久久久国产精品| 日韩欧美黄色动漫| 欧美xxxx免费虐| 日韩影院一区| 成人黄色av网站在线| 伊人网站在线观看|