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

可以像 Docker 一樣方便的使用 Containerd 嗎?

云計算
nerdctl 是一個與 docker cli 風格兼容的 containerd 客戶端工具,而且直接兼容 docker compose 的語法的,這就大大提高了直接將 containerd 作為本地開發、測試或者單機容器部署使用的效率。

[[419814]]

前面我們介紹了可以使用 ctr 操作管理 containerd 鏡像容器,但是大家都習慣了使用 docker cli,ctr 使用起來可能還是不太順手,為了能夠讓大家更好的轉到 containerd 上面來,社區提供了一個新的命令行工具:nerdctl(https://github.com/containerd/nerdctl)。nerdctl 是一個與 docker cli 風格兼容的 containerd 客戶端工具,而且直接兼容 docker compose 的語法的,這就大大提高了直接將 containerd 作為本地開發、測試或者單機容器部署使用的效率。

安裝

同樣直接在 GitHub Release 頁面下載對應的壓縮包解壓到 PATH 路徑下即可:

  1. # 如果沒有安裝 containerd,則可以下載 nerdctl-full-<VERSION>-linux-amd64.tar.gz 包進行安裝 
  2. ➜  ~ wget https://github.com/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-amd64.tar.gz 
  3. # 如果有限制,也可以替換成下面的 URL 加速下載 
  4. # wget https://download.fastgit.org/containerd/nerdctl/releases/download/v0.11.0/nerdctl-0.11.0-linux-amd64.tar.gz 
  5. ➜  ~ mkdir -p /usr/local/containerd/bin/ && tar -zxvf nerdctl-0.11.0-linux-amd64.tar.gz nerdctl && mv nerdctl /usr/local/containerd/bin/ 
  6. ➜  ~ ln -s /usr/local/containerd/bin/nerdctl /usr/local/bin/nerdctl 
  7. ➜  ~ nerdctl version 
  8. Client: 
  9.  Version:       v0.11.0 
  10.  Git commit:    c802f934791f83dacf20a041cd1c865f8fac954e 
  11.  
  12. Server: 
  13.  containerd: 
  14.   Version:      v1.5.5 
  15.   Revision:     72cec4be58a9eb6b2910f5d10f1c01ca47d231c0 

安裝完成后接下來學習下 nerdctl 命令行工具的使用。

命令

Run&Exec

nerdctl run

和 docker run 類似可以使用 nerdctl run 命令運行容器,例如:

  1. ➜  ~ nerdctl run -d -p 80:80 --name=nginx --restart=always nginx:alpine 
  2. docker.io/library/nginx:alpine:                                                   resolved       |++++++++++++++++++++++++++++++++++++++| 
  3. index-sha256:bead42240255ae1485653a956ef41c9e458eb077fcb6dc664cbc3aa9701a05ce:    done           |++++++++++++++++++++++++++++++++++++++| manifest-sha256:ce6ca11a3fa7e0e6b44813901e3289212fc2f327ee8b1366176666e8fb470f24: done           |++++++++++++++++++++++++++++++++++++++| config-sha256:7ce0143dee376bfd2937b499a46fb110bda3c629c195b84b1cf6e19be1a9e23b:   done           |++++++++++++++++++++++++++++++++++++++| elapsed: 5.3 s                                                                    total:  3.1 Ki (606.0 B/s)                                       6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8 

可選的參數使用和 docker run 基本一致,比如 -i、-t、--cpus、--memory 等選項,可以使用 nerdctl run --help 獲取可使用的命令選項:

  1. ➜  ~ nerdctl run --help 
  2. NAME
  3.    nerdctl run - Run a command in a new container 
  4.  
  5. USAGE: 
  6.    nerdctl run [command options] [arguments...] 
  7.  
  8. OPTIONS: 
  9.    --help                        show help (default: false) 
  10.    --tty, -t                     (Currently -t needs to correspond to -i) (default: false) 
  11.    --interactive, -i             Keep STDIN open even if not attached (default: false) 
  12.    --detach, -d                  Run container in background and print container ID (default: false) 
  13.    --restart value               Restart policy to apply when a container exits (implemented values: "no"|"always") (default: "no") 
  14.    --rm                          Automatically remove the container when it exits (default: false) 
  15.    --pull value                  Pull image before running ("always"|"missing"|"never") (default: "missing") 
  16.    --network value, --net value  Connect a container to a network ("bridge"|"host"|"none") (default: "bridge") 
  17.    --dns value                   Set custom DNS servers (default: "8.8.8.8", "1.1.1.1") 
  18.    --publish value, -p value     Publish a container's port(s) to the host 
  19.    --hostname value, -h value    Container host name 
  20.    --cpus value                  Number of CPUs (default: 0) 
  21.    --memory value, -m value      Memory limit 
  22.    --pid value                   PID namespace to use 
  23.    --pids-limit value            Tune container pids limit (set -1 for unlimited) (default: -1) 
  24.    --cgroupns value              Cgroup namespace to use, the default depends on the cgroup version ("host"|"private") (default: "host") 
  25.    --cpuset-cpus value           CPUs in which to allow execution (0-3, 0,1) 
  26.    --cpu-shares value            CPU shares (relative weight) (default: 0) 
  27.    --device value                Add a host device to the container 
  28.    --user value, -u value        Username or UID (format: <name|uid>[:<group|gid>]) 
  29.    --security-opt value          Security options 
  30.    --cap-add value               Add Linux capabilities 
  31.    --cap-drop value              Drop Linux capabilities 
  32.    --privileged                  Give extended privileges to this container (default: false) 
  33.    --runtime value               Runtime to use for this container, e.g. "crun", or "io.containerd.runsc.v1" (default: "io.containerd.runc.v2") 
  34.    --sysctl value                Sysctl options 
  35.    --gpus value                  GPU devices to add to the container ('all' to pass all GPUs) 
  36.    --volume value, -v value      Bind mount a volume 
  37.    --read-only                   Mount the container's root filesystem as read only (default: false) 
  38.    --rootfs                      The first argument is not an image but the rootfs to the exploded container (default: false) 
  39.    --entrypoint value            Overwrite the default ENTRYPOINT of the image 
  40.    --workdir value, -w value     Working directory inside the container 
  41.    --env value, -e value         Set environment variables 
  42.    --env-file value              Set environment variables from file 
  43.    --name value                  Assign a name to the container 
  44.    --label value, -l value       Set meta data on a container 
  45.    --label-file value            Read in a line delimited file of labels 
  46.    --cidfile value               Write the container ID to the file 
  47.    --shm-size value              Size of /dev/shm 

nerdctl exec

同樣也可以使用 exec 命令執行容器相關命令,例如:

  1. ➜  ~ nerdctl exec -it nginx /bin/sh 
  2. / # date 
  3. Thu Aug 19 06:43:19 UTC 2021 
  4. / # 

容器管理

nerdctl ps:列出容器

使用 nerdctl ps 命令可以列出所有容器。

  1. ➜  ~ nerdctl ps 
  2. CONTAINER ID    IMAGE                             COMMAND                   CREATED           STATUS    PORTS                 NAMES 
  3. 6e489777d2f7    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    10 minutes ago    Up        0.0.0.0:80->80/tcp    nginx 

同樣可以使用 -a 選項顯示所有的容器列表,默認只顯示正在運行的容器,不過需要注意的是 nerdctl ps 命令并沒有實現 docker ps 下面的 --filter、--format、--last、--size 等選項。

nerdctl inspect:獲取容器的詳細信息。

  1. ➜  ~ nerdctl inspect nginx 
  2.     { 
  3.         "Id""6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8"
  4.         "Created""2021-08-19T06:35:46.403464674Z"
  5.         "Path""/docker-entrypoint.sh"
  6.         "Args": [ 
  7.             "nginx"
  8.             "-g"
  9.             "daemon off;" 
  10.         ], 
  11.         "State": { 
  12.             "Status""running"
  13.             "Running"true
  14.             "Paused"false
  15.             "Pid": 2002, 
  16.             "ExitCode": 0, 
  17.             "FinishedAt""0001-01-01T00:00:00Z" 
  18.         }, 
  19.         "Image""docker.io/library/nginx:alpine"
  20.         "ResolvConfPath""/var/lib/nerdctl/1935db59/containers/default/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8/resolv.conf"
  21.         "LogPath""/var/lib/nerdctl/1935db59/containers/default/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8/6e489777d2f73dda8a310cdf8da9df38353c1aa2021d3c2270b30eff1806bcf8-json.log"
  22.         "Name""nginx"
  23.         "Driver""overlayfs"
  24.         "Platform""linux"
  25.         "AppArmorProfile""nerdctl-default"
  26.         "NetworkSettings": { 
  27.             "Ports": { 
  28.                 "80/tcp": [ 
  29.                     { 
  30.                         "HostIp""0.0.0.0"
  31.                         "HostPort""80" 
  32.                     } 
  33.                 ] 
  34.             }, 
  35.             "GlobalIPv6Address"""
  36.             "GlobalIPv6PrefixLen": 0, 
  37.             "IPAddress""10.4.0.3"
  38.             "IPPrefixLen": 24, 
  39.             "MacAddress""f2:b1:8e:a2:fe:18"
  40.             "Networks": { 
  41.                 "unknown-eth0": { 
  42.                     "IPAddress""10.4.0.3"
  43.                     "IPPrefixLen": 24, 
  44.                     "GlobalIPv6Address"""
  45.                     "GlobalIPv6PrefixLen": 0, 
  46.                     "MacAddress""f2:b1:8e:a2:fe:18" 
  47.                 } 
  48.             } 
  49.         } 
  50.     } 

可以看到顯示結果和 docker inspect 也基本一致的。

nerdctl logs:獲取容器日志

查看容器日志是我們平時經常會使用到的一個功能,同樣我們可以使用 nerdctl logs 來獲取日志數據:

  1. ➜  ~ nerdctl logs -f nginx 
  2. ...... 
  3. 2021/08/19 06:35:46 [notice] 1#1: start worker processes 
  4. 2021/08/19 06:35:46 [notice] 1#1: start worker process 32 
  5. 2021/08/19 06:35:46 [notice] 1#1: start worker process 33 

同樣支持 -f、-t、-n、--since、--until 這些選項。

nerdctl stop:停止容器

  1. ➜  ~ nerdctl stop nginx 
  2. nginx 
  3. ➜  ~ nerdctl ps 
  4. CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 
  5. ➜  ~ nerdctl ps -a 
  6. CONTAINER ID    IMAGE                             COMMAND                   CREATED           STATUS    PORTS                 NAMES 
  7. 6e489777d2f7    docker.io/library/nginx:alpine    "/docker-entrypoint.…"    20 minutes ago    Up        0.0.0.0:80->80/tcp    nginx 

nerdctl rm:刪除容器

  1. ➜  ~ nerdctl rm nginx 
  2. You cannot remove a running container f4ac170235595f28bf962bad68aa81b20fc83b741751e7f3355bd77d8016462d. Stop the container before attempting removal or force remove 
  3. ➜  ~ nerdctl rm -f ginx 
  4. nginx 
  5. ➜  ~ nerdctl ps 
  6. CONTAINER ID    IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 

要強制刪除同樣可以使用 -f 或 --force 選項來操作。

鏡像管理

nerdctl images:鏡像列表

  1. ➜  ~ nerdctl images 
  2. REPOSITORY    TAG       IMAGE ID        CREATED           SIZE 
  3. alpine        latest    eb3e4e175ba6    6 days ago        5.9 MiB 
  4. nginx         alpine    bead42240255    29 minutes ago    16.0 KiB 

也需要注意的是沒有實現 docker images 的一些選項,比如 --all、--digests、--filter、--format。

nerdctl pull:拉取鏡像

  1. ➜  ~ nerdctl image rm busybox 
  2. Untagged: docker.io/library/busybox:latest@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60 
  3. Deleted: sha256:5b8c72934dfc08c7d2bd707e93197550f06c0751023dabb3a045b723c5e7b373 
  4. docker.io/library/busybox:latest:                                                 resolved       |++++++++++++++++++++++++++++++++++++++| 
  5. index-sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60:    done           |++++++++++++++++++++++++++++++++++++++| 
  6. manifest-sha256:dca71257cd2e72840a21f0323234bb2e33fea6d949fa0f21c5102146f583486b: done           |++++++++++++++++++++++++++++++++++++++| config-sha256:69593048aa3acfee0f75f20b77acb549de2472063053f6730c4091b53f2dfb02:   done           |++++++++++++++++++++++++++++++++++++++| layer-sha256:b71f96345d44b237decc0c2d6c2f9ad0d17fde83dad7579608f1f0764d9686f2:    done           |++++++++++++++++++++++++++++++++++++++| elapsed: 5.7 s                                                                    total:  752.8  (132.0 KiB/s) 

nerdctl push:推送鏡像

當然在推送鏡像之前也可以使用 nerdctl login 命令登錄到鏡像倉庫,然后再執行 push 操作。

可以使用 nerdctl login --username xxx --password xxx 進行登錄,使用 nerdctl logout 可以注銷退出登錄。

nerdctl tag:鏡像標簽

使用 tag 命令可以為一個鏡像創建一個別名鏡像:

  1. ➜  ~ nerdctl images 
  2. REPOSITORY    TAG                  IMAGE ID        CREATED           SIZE 
  3. busybox       latest               0f354ec1728d    6 minutes ago     1.3 MiB 
  4. nginx         alpine               bead42240255    41 minutes ago    16.0 KiB 
  5. ➜  ~ nerdctl tag nginx:alpine harbor.k8s.local/course/nginx:alpine 
  6. ➜  ~ nerdctl images 
  7. REPOSITORY                       TAG                  IMAGE ID        CREATED           SIZE 
  8. busybox                          latest               0f354ec1728d    7 minutes ago     1.3 MiB 
  9. nginx                            alpine               bead42240255    41 minutes ago    16.0 KiB 
  10. harbor.k8s.local/course/nginx    alpine               bead42240255    2 seconds ago     16.0 KiB 

nerdctl save:導出鏡像

使用 save 命令可以導出鏡像為一個 tar 壓縮包。

  1. ➜  ~ nerdctl save -o busybox.tar.gz busybox:latest 
  2. ➜  ~ ls -lh busybox.tar.gz 
  3. -rw-r--r-- 1 root root 761K Aug 19 15:19 busybox.tar.gz 

nerdctl rmi:刪除鏡像

  1. ➜  ~ nerdctl rmi busybox 
  2. Untagged: docker.io/library/busybox:latest@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60 
  3. Deleted: sha256:5b8c72934dfc08c7d2bd707e93197550f06c0751023dabb3a045b723c5e7b373 

nerdctl load:導入鏡像

使用 load 命令可以將上面導出的鏡像再次導入:

  1. ➜  ~ nerdctl load -i busybox.tar.gz 
  2. unpacking docker.io/library/busybox:latest (sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60)...done 

使用 -i 或 --input 選項指定需要導入的壓縮包。

鏡像構建

鏡像構建是平時我們非常重要的一個需求,我們知道 ctr 并沒有構建鏡像的命令,而現在我們又不使用 Docker 了,那么如何進行鏡像構建了,幸運的是 nerdctl 就提供了 nerdctl build 這樣的鏡像構建命令。

nerdctl build:從 Dockerfile 構建鏡像

比如現在我們定制一個 nginx 鏡像,新建一個如下所示的 Dockerfile 文件:

  1. FROM nginx 
  2. RUN echo '這是一個基于containerd使用nerdctl構建的nginx鏡像' > /usr/share/nginx/html/index.html 

然后在文件所在目錄執行鏡像構建命令:

  1. ➜  ~ nerdctl build -t nginx:nerdctl -f Dockerfile . 
  2. FATA[0000] `buildctl` needs to be installed and `buildkitd` needs to be running, see https://github.com/moby/buildkit: exec"buildctl": executable file not found in $PATH 

可以看到有一個錯誤提示,需要我們安裝 buildctl 并運行 buildkitd,這是因為 nerdctl build 需要依賴 buildkit 工具。

buildkit 項目也是 Docker 公司開源的一個構建工具包,支持 OCI 標準的鏡像構建。它主要包含以下部分:

  • 服務端 buildkitd:當前支持 runc 和 containerd 作為 worker,默認是 runc,我們這里使用 containerd
  • 客戶端 buildctl:負責解析 Dockerfile,并向服務端 buildkitd 發出構建請求

buildkit 是典型的 C/S 架構,客戶端和服務端是可以不在一臺服務器上,而 nerdctl 在構建鏡像的時候也作為 buildkitd 的客戶端,所以需要我們安裝并運行 buildkitd。

所以接下來我們先來安裝 buildkit:

  1. ➜  ~ wget https://github.com/moby/buildkit/releases/download/v0.9.0/buildkit-v0.9.0.linux-amd64.tar.gz 
  2. # 如果有限制,也可以替換成下面的 URL 加速下載 
  3. # wget https://download.fastgit.org/moby/buildkit/releases/download/v0.9.0/buildkit-v0.9.0.linux-amd64.tar.gz 
  4. ➜  ~ tar -zxvf buildkit-v0.9.0.linux-amd64.tar.gz -C /usr/local/containerd/ 
  5. bin/ 
  6. bin/buildctl 
  7. bin/buildkit-qemu-aarch64 
  8. bin/buildkit-qemu-arm 
  9. bin/buildkit-qemu-i386 
  10. bin/buildkit-qemu-mips64 
  11. bin/buildkit-qemu-mips64el 
  12. bin/buildkit-qemu-ppc64le 
  13. bin/buildkit-qemu-riscv64 
  14. bin/buildkit-qemu-s390x 
  15. bin/buildkit-runc 
  16. bin/buildkitd 
  17. ➜  ~ ln -s /usr/local/containerd/bin/buildkitd /usr/local/bin/buildkitd 
  18. ➜  ~ ln -s /usr/local/containerd/bin/buildctl /usr/local/bin/buildctl 

這里我們使用 Systemd 來管理 buildkitd,創建如下所示的 systemd unit 文件:

  1. ➜  ~ cat /etc/systemd/system/buildkit.service 
  2. [Unit] 
  3. Description=BuildKit 
  4. Documentation=https://github.com/moby/buildkit 
  5.  
  6. [Service] 
  7. ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true 
  8.  
  9. [Install] 
  10. WantedBy=multi-user.target 

然后啟動 buildkitd:

  1. ➜  ~ systemctl daemon-reload 
  2. ➜  ~ systemctl enable buildkit --now 
  3. Created symlink /etc/systemd/system/multi-user.target.wants/buildkit.service → /etc/systemd/system/buildkit.service. 
  4. ➜  ~ systemctl status buildkit 
  5. ● buildkit.service - BuildKit 
  6.      Loaded: loaded (/etc/systemd/system/buildkit.service; enabled; vendor preset: enabled) 
  7.      Memory: 8.6M 
  8.      CGroup: /system.slice/buildkit.service 
  9.              └─5779 /usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true 
  10.  
  11. Aug 19 16:03:10 ydzsio systemd[1]: Started BuildKit. 
  12. Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=warning msg="using host network as the default" 
  13. Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=info msg="found worker \"euznuelxhxb689bc5of7pxmbc\", labels> 
  14. Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=info msg="found 1 workers, default=\"euznuelxhxb689bc5of7pxm> 
  15. Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=warning msg="currently, only the default worker can be used." 
  16. Aug 19 16:03:10 ydzsio buildkitd[5779]: time="2021-08-19T16:03:10+08:00" level=info msg="running server on /run/buildkit/buildkitd.sock" 

現在我們再來重新構建鏡像:

圖片

nerdctl 構建鏡像

構建完成后查看鏡像是否構建成功:

  1. ➜  ~ nerdctl images 
  2. WARN[0000] unparsable image name "overlayfs@sha256:d5b9b9e4c930f30340650cb373f62f97c93ee3b92c83f01c6e00b7b87d62c624" 
  3. REPOSITORY    TAG        IMAGE ID        CREATED               SIZE 
  4. nginx         latest     4d4d96ac750a    4 minutes ago         16.0 KiB 
  5. nginx         nerdctl    d5b9b9e4c930    About a minute ago    24.0 KiB 
  6.                          d5b9b9e4c930    About a minute ago    24.0 KiB 

我們可以看到已經有我們構建的 nginx:nerdctl 鏡像了,不過出現了一個 WARN[0000] unparsable image name "xxx" 的 Warning 信息,在鏡像列表里面也可以看到有一個鏡像 tag 為空的鏡像,和我們構建的鏡像 ID 一樣,在 nerdctl 的 github issue 上也有提到這個問題:https://github.com/containerd/nerdctl/issues/177,不過到現在為止還沒有 FIX,幸運的是這只是一個⚠️,不會影響我們的使用。

接下來使用上面我們構建的鏡像來啟動一個容器進行測試:

  1. ➜  ~ nerdctl run -d -p 80:80 --name=nginx --restart=always nginx:nerdctl 
  2. f8f639cb667926023231b13584226b2c7b856847e0a25bd5f686b9a6e7e3cacd 
  3. ➜  ~ nerdctl ps 
  4. CONTAINER ID    IMAGE                              COMMAND                   CREATED         STATUS    PORTS                 NAMES 
  5. f8f639cb6679    docker.io/library/nginx:nerdctl    "/docker-entrypoint.…"    1 second ago    Up        0.0.0.0:80->80/tcp    nginx 
  6. ➜  ~ curl localhost 
  7. This is a nerdctl build's nginx image base on containerd 

這樣我們就使用 nerdctl + buildkitd 輕松完成了容器鏡像的構建。

當然如果你還想在單機環境下使用 Docker Compose,在 containerd 模式下,我們也可以使用 nerdctl 來兼容該功能。同樣我們可以使用 nerdctl compose、nerdctl compose up、nerdctl compose logs、nerdctl compose build、nerdctl compose down 等命令來管理 Compose 服務。這樣使用 containerd、nerdctl 結合 buildkit 等工具就完全可以替代 docker 在鏡像構建、鏡像容器方面的管理功能了。

 

責任編輯:姜華 來源: k8s技術圈
相關推薦

2020-01-09 17:03:29

人工智能技術算法

2023-04-05 14:19:07

FlinkRedisNoSQL

2024-01-05 07:36:54

人工智能創造力模型

2021-04-12 10:20:20

Java微服務Go

2022-07-28 14:46:01

人工智能機器人計算機科學

2013-12-17 09:02:03

Python調試

2023-05-23 13:59:41

RustPython程序

2022-12-21 15:56:23

代碼文檔工具

2013-12-31 09:19:23

Python調試

2025-09-12 00:00:00

DevToolsJavaScript調試術

2015-04-09 11:27:34

2011-05-06 14:24:33

域名云服務云安全中網

2021-12-28 11:23:36

SQLServerExcel數據分析

2021-05-20 08:37:32

multiprocesPython線程

2013-08-22 10:17:51

Google大數據業務價值

2015-03-16 12:50:44

2015-02-05 13:27:02

移動開發模塊SDK

2011-01-18 10:45:16

喬布斯

2012-06-08 13:47:32

Wndows 8Vista

2020-11-17 15:31:23

Java微服務Go
點贊
收藏

51CTO技術棧公眾號

精品中文字幕久久久久久| 手机在线视频一区| 人妻丰满熟妇av无码久久洗澡| 蜜桃视频在线入口www| 盗摄系列偷拍视频精品tp| 久久99精品久久久久| 日韩电视剧在线观看免费网站| 在线观看欧美激情| 中文字幕 国产精品| 日韩在线你懂的| 亚洲一区在线电影| yy111111少妇影院日韩夜片| 婷婷社区五月天| 亚洲爱爱视频| 国产午夜亚洲精品不卡| 欧美在线视频网| 在线天堂www在线国语对白| 91网在线看| 国产一区 二区 三区一级| 中文字幕日韩欧美在线视频| 男女男精品视频站| 国产资源在线播放| 日韩精品1区2区3区| 亚洲男人av在线| 国产美女无遮挡网站| 亚洲日本国产精品| 午夜免费福利影院| 黄色电影免费在线看| 国产在线不卡一区| 国产精品久久久久久影视 | youjizz亚洲女人| videos性欧美另类高清| 久久色成人在线| 人妖精品videosex性欧美| 69av.com| 美女福利一区| 色国产综合视频| 先锋在线资源一区二区三区| 国产精品视频a| 欧美日韩hd| 日韩二区三区在线| 午夜福利三级理论电影| 日韩av影片| 国产欧美一区二区精品久导航 | 欧美性生活一级| 亚洲天堂中文字幕| 99国精产品一二二线| 中文字幕乱码视频| 欧美激情一区| 久久久av一区| 91丨porny丨对白| 4438全国亚洲精品观看视频| 欧美日韩综合视频| 一区二区三区四区视频在线观看| 国产精品一级二级| 麻豆91精品视频| 精品中文字幕在线2019| 久久人妻一区二区| 高清在线一区| 亚洲成a人v欧美综合天堂| 日韩在线观看电影完整版高清免费| 91精品国产乱码久久久久| 亚洲精品一级| 日韩中文字幕不卡视频| 啊啊啊一区二区| 亚洲天堂av影院| 国产精品麻豆欧美日韩ww| 国产精品av一区| 中文字幕一区二区在线视频 | 国产视频在线观看视频| 亚洲清纯自拍| 91国语精品自产拍在线观看性色 | 午夜精品久久久久久久爽| 香蕉久久夜色精品国产| 久久久精品亚洲| 免费无遮挡无码永久在线观看视频 | 男生女生差差差的视频在线观看| 久久久九九九九| 亚洲一区二区三区乱码aⅴ| 久久久久久少妇| 女人天堂亚洲aⅴ在线观看| 亚洲欧美在线一区| 国产精品亚洲一区二区无码| 久久精品论坛| 国产亚洲精品久久久久久777| 在线播放av网址| 全国精品免费看| 日韩精品一区二| 第一区免费在线观看| 国产精品极品美女在线观看| 亚洲高清免费视频| 日本a在线天堂| 老司机av在线免费看| 欧美经典一区二区| 精品少妇人妻av一区二区| 国产乱视频在线观看| 97精品久久久久中文字幕| 成人3d动漫一区二区三区91| 青青草视频在线免费观看| 99这里都是精品| 国产高清精品一区二区三区| 国外av在线| 一区二区三区在线高清| 大桥未久一区二区| 黄色成人在线| 欧美视频中文在线看| 福利视频999| 高清一区二区三区av| 欧美麻豆精品久久久久久| 黑森林精品导航| 国产一区一一区高清不卡| 欧美一级理论性理论a| theporn国产精品| 日韩有码中文字幕在线| 久久大大胆人体| 国产7777777| 亚洲久久视频| 亚洲字幕一区二区| 成年午夜在线| 国产精品久久久久久久久晋中| 日韩欧美精品久久| free性欧美| 懂色av中文一区二区三区天美| 国产综合av在线| 亚洲国产欧美日本视频| 日韩一区二区三区在线视频| 国产精品无码无卡无需播放器| 伊人激情综合| 欧美一区第一页| 国产精品第6页| 久久精品久久99精品久久| 久久精品五月婷婷| 国外av在线| 欧美性xxxx极品hd满灌| 国产国语老龄妇女a片| 91成人观看| 久久久久久香蕉网| 国产精品美女久久久久av爽| 视频一区中文字幕国产| 成人两性免费视频| 国产91免费在线观看| 久久午夜老司机| av在线播放天堂| 日韩中文影院| 欧美一卡二卡在线观看| 少妇户外露出[11p]| 欧美日韩在线大尺度| 亚洲综合中文字幕在线| 国产婷婷视频在线| 欧美一级艳片视频免费观看| 日本一级二级视频| 先锋影音久久久| 蜜桃成人在线| 4438x成人网全国最大| 欧美三级视频在线| 欧美激情一区二区三区p站| 欧美xxx在线观看| 亚洲综合在线小说| 91美女主播在线视频| 日韩av在线精品| 免费黄色网址在线| 国产亚洲一区二区在线观看| av五月天在线| 在线看片不卡| 国产成人小视频在线观看| 国产99久一区二区三区a片 | 在线观看日产精品| 无码人妻少妇色欲av一区二区| 亚洲专区视频| 欧美日本精品在线| 理论片中文字幕| 五月激情综合色| 天天综合天天添夜夜添狠狠添| 四虎成人av| 欧美资源在线观看| 粉嫩av一区| 欧美一级黄色片| 日韩精品国产一区二区| 国产精品自在欧美一区| 日韩精品不卡| 9999在线精品视频| 中文字幕九色91在线| 夜夜躁很很躁日日躁麻豆| 久久亚洲精品小早川怜子| 免费大片在线观看| 日本欧美高清| 国产精品旅馆在线| 欧美aaaxxxx做受视频| 欧美日韩国产高清一区二区三区 | 亚洲系列第一页| 亚洲一区二区三区小说| 精品无码一区二区三区| 国色天香一区二区| 亚洲自拍偷拍区| 草草视频在线观看| 亚洲第一网站免费视频| 欧美成人免费看| 91免费国产在线| 国产青青在线视频| 澳门久久精品| 久久久久久久色| 国产综合视频一区二区三区免费| 欧美一级精品在线| 成人免费一级片| 亚洲成av人影院| 性生交大片免费全黄| 9i在线看片成人免费| 涩涩网站在线看| 香蕉视频成人在线观看| 成人在线免费高清视频| av中文一区| 国产精品私拍pans大尺度在线| 激情综合闲人网| 日韩亚洲欧美成人一区| 中文字幕xxxx| 国产精品免费丝袜| 亚洲国产精品自拍视频| 国产二区国产一区在线观看| 国产91沈先生在线播放| 91精品短视频| 国产在线视频欧美| 3d玉蒲团在线观看| 中文字幕综合在线| 国产露出视频在线观看| 亚洲欧美日韩一区二区三区四区| 不卡的av电影| 免费特级黄色片| 色琪琪久久se色| 92国产精品视频| 亚洲欧美在线成人| 欧美有码在线观看视频| h片精品在线观看| 欧美日本在线视频中文字字幕| 免费黄色网页在线观看| 日韩一级片在线播放| 911美女片黄在线观看游戏| 日本高清不卡视频| 秋霞av一区二区三区| 欧美日韩亚洲一区二| 日本一区二区欧美| 亚洲国产综合人成综合网站| 久久久久久福利| 久久久综合网站| 美国黄色a级片| 99精品欧美一区二区三区小说 | 香蕉大人久久国产成人av| 欧美激情视频一区二区三区不卡| 五月天婷婷在线观看| 亚洲精品一区二区三区四区高清| 久久精品视频1| 欧美日韩在线影院| 日韩不卡在线播放| 色婷婷久久一区二区三区麻豆| 久久噜噜色综合一区二区| 国产精品美女久久久久久久久久久| 国产精品理论在线| 中文字幕一区视频| 欧美黑人性猛交xxx| 亚洲国产美女搞黄色| 国产精品第9页| 国产精品久久久久久久久免费丝袜 | 六月丁香婷婷激情| 鲁大师成人一区二区三区| 超碰免费在线公开| 欧美 日韩 国产一区二区在线视频| 99中文字幕在线观看| 亚洲免费专区| 品久久久久久久久久96高清| aaa国产精品视频| 国产乱人伦精品一区二区| 国产91在线精品| 亚洲一区二区中文字幕| 波多野结衣在线一区二区| 久久精品五月婷婷| 93在线视频精品免费观看| 国产一二三四五| 亚洲精品韩国| 久久午夜夜伦鲁鲁一区二区| 在线播放一区| 丰满爆乳一区二区三区| 日本v片在线高清不卡在线观看| 国产a级片网站| 先锋资源久久| 一本久道高清无码视频| 日日摸夜夜添夜夜添精品视频 | 国产成人毛片| 国产高清一区视频| 国产成人三级| 麻豆传媒一区二区| 亚洲啊v在线观看| 国产精品无码av在线播放| 麻豆国产欧美一区二区三区| 中文字幕99页| 国产精品欧美综合在线| 国产中文字幕免费| 亚洲一区二区三区免费视频| 日本高清不卡码| 欧美午夜xxx| 国产精品久久久久久久免费看| 亚洲国产精品嫩草影院久久| 韩国中文字幕hd久久精品| 亚洲欧洲一区二区三区在线观看| 超碰电影在线播放| 欧美成人精品激情在线观看| 中文字幕 在线观看| 亚洲aⅴ日韩av电影在线观看 | 国产老肥熟一区二区三区| 久久精品视频18| 久久久国产综合精品女国产盗摄| 在线观看黄网址| 在线区一区二视频| 污视频在线免费| 欧美成人午夜视频| 黄色日韩网站| 亚洲xxx自由成熟| 日本成人精品| 亚洲精品中文字幕在线| 日韩欧美视频| 国产男女在线观看| 成人免费视频国产在线观看| 污污污www精品国产网站| 亚洲人成网站精品片在线观看 | 黄色的视频在线观看| 国内免费精品永久在线视频| 多野结衣av一区| 亚洲综合精品一区二区| 天天射成人网| 免费人成自慰网站| 国产一区在线观看麻豆| 美国一级黄色录像| 亚洲天堂成人在线观看| www.久久网| 国产一区二区三区免费视频| 国模精品视频| 国内外成人免费视频| 免费看成人哺乳视频网站| 亚洲人久久久| 日本不卡视频在线观看| 国产jk精品白丝av在线观看| 精品久久久久久久久久| 天堂网在线中文| 在线播放精品一区二区三区| 免费黄色在线| 成人在线精品视频| 在线一区免费| 九色91porny| 亚洲一区二区三区激情| 成人午夜精品福利免费| 久久免费视频观看| 久久视频在线观看| 播放灌醉水嫩大学生国内精品| 99国产精品久久久久| 国产三级av片| 亚洲美女喷白浆| 成人国产综合| 异国色恋浪漫潭| 国产电影一区二区三区| 久久久精品视频免费| 日韩国产在线播放| 欧美一区国产| 中文字幕久精品免| 国产精品系列在线播放| 久久在线视频精品| 日韩av综合网站| 亚洲精品.com| 国产大尺度在线观看| 国产91精品免费| chinese全程对白| 欧美一区二区成人| 国模精品视频| 亚洲精品乱码视频| 国产成人一区在线| 中文字幕第四页| 色天天综合狠狠色| 中文字幕视频精品一区二区三区| 日本熟妇人妻xxxx| 欧美韩日一区二区三区| wwwav在线播放| 欧美专区国产专区| 亚洲综合激情在线| 粉嫩av懂色av蜜臀av分享| 欧美性猛交xxxx黑人交| 欧美亚洲日本| 成人激情免费在线| 海角社区69精品视频| 女女互磨互喷水高潮les呻吟| 91精品国产综合久久久蜜臀粉嫩| 福利在线播放| 成人黄动漫网站免费| 久久婷婷久久| 久久久久久久国产视频| 一区二区欧美在线| 超碰地址久久| 中文字幕在线视频精品| 欧美日韩亚洲精品一区二区三区| 老司机av在线免费看| 免费成人看片网址| 国产精品综合二区| 中文无码精品一区二区三区| 欧美激情精品久久久久久变态|