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

国产成人生活片| www.久久久久久.com| 久久久久久久久久久久久国产精品| 青春有你2免费观看完整版在线播放高清 | 欧美一级特黄高清视频| 欧美爱爱网站| 69久久夜色精品国产69蝌蚪网| a级免费在线观看| 91精彩视频在线观看| 岛国av在线一区| 国产精品一区二区三区毛片淫片 | 国产丝袜视频在线播放| 国产视频一区二区在线| 国产精品我不卡| 一二区在线观看| 国产精品久久777777毛茸茸| 久久久国产成人精品| 国产免费一区二区三区网站免费| 日韩一区二区三区色| 六月丁香综合在线视频| 国精产品一区一区三区mba视频 | 狠狠色噜噜狠狠狠狠色吗综合| 最近国语视频在线观看免费播放| 99精品免费| 欧美成人免费一级人片100| 国产伦理片在线观看| 欧美电影免费网站| 欧美电影精品一区二区| 亚洲怡红院在线| 成人涩涩视频| 欧美性感美女h网站在线观看免费| 97中文字幕在线| 麻豆影院在线观看| 国产精品视频在线看| 欧美性天天影院| 亚洲 欧美 自拍偷拍| 国产成人av电影在线| 亚洲a∨日韩av高清在线观看| 无码人妻久久一区二区三区| 亚洲精品乱码| 国外色69视频在线观看| 国产一二三四在线| 亚洲午夜激情在线| 欧美劲爆第一页| 久久免费视频99| 黄色成人在线网址| 欧美精品久久久久久久免费观看 | 黄色在线成人| 久久久久久97| 日本三级理论片| 亚洲国产一区二区精品专区| 国内精品久久久久久中文字幕| 欧美国产日韩在线观看成人 | 免费av在线一区| 精品无码一区二区三区蜜臀| 一区二区日韩视频| 欧美aaaaaa| 欧美绝品在线观看成人午夜影视| 五月婷婷丁香色| 日本午夜精品久久久久| 91精品国产免费| 国产精品中文字幕久久久| 激情五月婷婷网| 日本va欧美va瓶| 国产欧美日韩中文字幕| 国产乱码精品一区二三区蜜臂| 狠狠久久亚洲欧美| 成人女人免费毛片| 亚洲av片在线观看| ww亚洲ww在线观看国产| 色视频一区二区三区| 欧美激情午夜| 一区二区在线观看免费视频播放| 国产一二三在线视频| 人成在线免费网站| 欧美探花视频资源| 亚洲在线观看网站| 日韩美女国产精品| 丝袜美腿精品国产二区| 精品处破女学生| 日日欢夜夜爽一区| 91亚洲国产成人久久精品网站| 成人爽a毛片一区二区| 91免费看片在线观看| 中文字幕欧美日韩一区二区三区| 午夜伦理大片视频在线观看| 精品毛片网大全| 91福利国产成人精品播放| 日本精品视频| 亚洲欧美一区二区精品久久久 | 亚洲人成在线观看一区二区| 日韩视频在线视频| a成人v在线| 亚洲第一精品夜夜躁人人爽| 久久美女免费视频| 欧美日韩一区二区国产| 国产精品扒开腿做爽爽爽男男 | 不卡的av电影在线观看| 亚洲 国产 欧美一区| 污污网站在线看| 91精品福利视频| 国产一区二区免费电影| 日本成年人网址| 69av成人| 4438x亚洲最大成人网| 真人bbbbbbbbb毛片| 亚洲第一偷拍| 日本欧美国产在线| 亚洲精品国产片| 国产精品久久久久久久岛一牛影视 | 色噜噜狠狠成人中文综合| 性生活一级大片| 日产精品一区二区| 2020欧美日韩在线视频| 草草视频在线播放| 综合精品久久久| 一区二区xxx| 久久久久青草大香线综合精品| 日本在线观看天堂男亚洲| 国产丝袜在线视频| 久久精品在线免费观看| 国产情侣第一页| 涩涩涩久久久成人精品| 亚洲男人天堂网站| 国产一级淫片a| 国产毛片精品视频| 一区二区在线高清视频| 日韩成人高清| 亚洲在线一区二区三区| 日韩av片网站| 精品一区欧美| 在线观看亚洲区| 久久久久女人精品毛片九一| 成人精品免费看| 成人午夜免费在线视频| 日韩一区二区三区色| 欧美成人激情在线| 99在线精品视频免费观看20| 中文字幕日韩av资源站| 人人爽人人av| 欧洲视频一区| 国产精品久久久久7777婷婷| 九色视频网站在线观看| 一本久道中文字幕精品亚洲嫩| 久久人人爽人人爽人人片| 日韩一区二区免费看| 亚洲黄色一区| 国产精品27p| 国产大片在线免费观看| 91国偷自产一区二区三区观看 | 中文字字幕在线中文乱码| 久久精品视频一区二区| 一区二区三区国产免费| 日韩成人激情| 成人精品久久久| 99自拍视频在线观看| 日韩视频永久免费| 国产一级免费av| 99国产精品久久久久久久久久| 欧美视频在线播放一区| 久久99影视| 国产精品欧美一区二区三区奶水| 美女国产在线| 亚洲成人精品久久久| 日本中文在线播放| 日本一区二区免费在线| 伦伦影院午夜理论片| 亚洲夜间福利| 欧美日韩国产免费一区二区三区 | 久久精品丝袜高跟鞋| 日韩福利一区| 久久亚洲精品毛片| 色婷婷av一区二区三区之e本道| 日韩欧美中文字幕在线播放| 欧美亚洲色综久久精品国产| 国产乱码字幕精品高清av| 在线日韩中文字幕| 不卡影院一区二区| 大色综合视频网站在线播放| 91欧美精品午夜性色福利在线| sqte在线播放| 中文字幕免费精品一区高清| 成人黄色免费视频| 一本大道综合伊人精品热热 | 国产精品美乳一区二区免费 | 成人做爰免费视频免费看| 中日韩美女免费视频网址在线观看 | 国产一二三四视频| 精久久久久久久久久久| 久久久性生活视频| 成人在线免费观看网站| 国产精品国色综合久久| 校园春色亚洲色图| 欧美美最猛性xxxxxx| 九色视频在线观看免费播放| 日韩视频免费观看高清完整版 | 精品黑人一区二区三区观看时间| 国产亚洲福利| 偷拍视频一区二区| 丁香婷婷成人| 国产精品一区二区三| 川上优av中文字幕一区二区| 国产亚洲激情在线| 亚洲爆乳无码一区二区三区| 欧洲亚洲国产日韩| 九九热国产视频| 国产精品卡一卡二| 久久天天躁夜夜躁狠狠躁2022| 亚洲中文一区二区三区| 天天综合网天天综合色 | 一区二区三区日韩欧美| 中文字幕人妻一区二区三区在线视频| 国产精品综合久久| 男人搞女人网站| 亚洲视频www| 国产成人亚洲综合无码| 99久精品视频在线观看视频| 欧美人与性禽动交精品| 久久草在线视频| 91在线免费看片| 最新亚洲国产| 国产精品一区=区| 91精品影视| 色喇叭免费久久综合| 欧美高清在线观看| 欧美成人hd| 国产一区二区日韩精品欧美精品| 天堂av一区二区三区| 日韩欧美国产系列| 99久久国产免费| 777午夜精品视频在线播放| 人妻中文字幕一区二区三区| 色综合久久中文字幕综合网| 91国产丝袜播放在线| 午夜日韩在线电影| 久久精品一区二区三| 一区二区在线观看视频| 欧美片一区二区| 亚洲综合视频在线| 国产无码精品在线观看| 洋洋成人永久网站入口| 久久精品www| 亚洲国产成人91porn| 国产亚洲精品久久久久久无几年桃| 一区二区三区不卡在线观看 | 亚洲国产精品一区二区www在线| 欧美成人三级视频| 夜夜爽夜夜爽精品视频| 黄色片视频网站| 天涯成人国产亚洲精品一区av| 九九热在线视频播放| 色素色在线综合| 国产在线观看第一页| 欧美视频三区在线播放| 在线亚洲欧美日韩| 91麻豆精品国产91久久久更新时间| jizz中国少妇| 精品国产99国产精品| 五十路在线观看| 亚洲区一区二区| 日本视频不卡| 欧美国产日韩精品| 国产伦理精品| 国产精品v片在线观看不卡| 久久爱.com| 不卡视频一区二区三区| 九九在线高清精品视频| 正在播放亚洲| 激情欧美日韩一区| 成人一区二区三| 国产又粗又猛又爽又黄91精品| 欧美一二三区| 欧美日韩精品在线一区| 99热都是精品| 国产欧美日韩综合一区在线播放 | 日韩av在线播| 欧美主播一区二区三区| 国产人妻精品一区二区三| 亚洲国产成人精品女人久久久 | 欧美人交a欧美精品| 麻豆免费在线| 国产精品一二区| 国产精品毛片久久久| 久久99精品久久久久久久久久久久| 成人在线视频一区二区三区| 午夜在线精品偷拍| 九九久久久久久| 99精品视频在线播放观看| 日日碰狠狠添天天爽| 亚洲成人av电影在线| 在线观看视频二区| 亚洲电影免费观看高清完整版在线观看| 国产毛片在线看| 色综合老司机第九色激情| 日韩不卡视频在线观看| 成人黄动漫网站免费| 北条麻妃国产九九九精品小说| 国产在线视频在线| 久久99精品久久久久久国产越南| 欧美深性狂猛ⅹxxx深喉| 日韩一区中文字幕| 在线观看日本网站| 亚洲精品一区在线观看| 欧美另类极品| 国产精品福利小视频| 国产精品毛片久久久| 9191国产视频| 精品一区免费av| jizz中文字幕| 色综合一个色综合| 国产精品国产高清国产| 欧美日韩国产成人在线观看| 国产福利亚洲| 日韩欧美国产二区| 午夜亚洲激情| 国产激情第一页| 一区二区三区在线视频免费 | 欧美videos中文字幕| 日本在线人成| 国产精品久久激情| 国产一区二区三区91| 波多野结衣家庭教师在线播放| 国产999精品久久久久久| 欧美大片xxxx| 欧美麻豆精品久久久久久| 国产三级在线观看| 欧美性视频精品| 色婷婷综合久久久久久| 日本丰满少妇xxxx| 不卡的看片网站| 精品肉丝脚一区二区三区| 欧美成人精品福利| 蜜桃成人365av| av一本久道久久波多野结衣| 欧美精品综合| 手机在线播放av| 亚洲激情av在线| www.国产免费| 欧美激情视频一区二区| 97精品久久| 青青草国产免费| av资源网一区| 美日韩一二三区| 亚洲男女性事视频| 精品国产免费人成网站| 青青草原成人| 风间由美一区| 视频在线一区二区| 高清不卡一区| 免费人成在线观看视频播放| 成人午夜看片网址| 三级黄色在线视频| 亚洲精品视频播放| 欧洲成人一区| 三年中国中文在线观看免费播放| 国产乱一区二区| 日本一二三区不卡| 日本精品久久久久中文字幕| 99国产精品免费| 亚洲第一狼人社区| 色综合视频在线| 欧美又大又粗又长| 精品国产一区二区三区小蝌蚪 | 国产三级国产精品国产国在线观看| 日韩成人免费看| 亚洲第一香蕉网| 欧美色手机在线观看| av文字幕在线观看| 国产伦理一区二区三区| 久久精品综合| 亚洲二区在线播放| 亚洲国产日韩精品在线| 欧美xxxx做受欧美护士| 免费观看黄色的网站| 福利一区在线观看| 好吊色在线视频| 久久综合久久美利坚合众国| 国产成人澳门| 亚洲五月天综合| 亚洲综合一区二区三区| 国产高清视频在线| 91嫩草国产在线观看| 久久黄色影院| 欧美又粗又大又长| 国产一区二区三区在线观看网站| 亚洲精品自拍| 少妇高潮毛片色欲ava片| 国产精品理伦片| 无码精品黑人一区二区三区| 成人高h视频在线| 亚洲伊人网站| 国产精品网站视频| 性欧美1819sex性高清大胸| 久久久久久亚洲精品不卡4k岛国| 老司机午夜精品99久久| 国产无码精品在线播放| 日韩在线视频中文字幕| 色综合久久中文| 无套内谢丰满少妇中文字幕| 色先锋资源久久综合|