3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker 原理、学习教程

發布時間:2024/7/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker 原理、学习教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

From:https://blog.csdn.net/dataiyangu/article/details/82260586

Docker 常用命令總結:https://blog.csdn.net/itguangit/article/details/80246071

Docker 超詳細教程:http://chason.me/docker-tutorial/

Docker 容器超詳細講解:https://www.linuxidc.com/Linux/2018-08/153712.htm

Docker教程、Dockerfile教程:https://blog.csdn.net/luanpeng825485697/article/details/80921390

阮一峰:Docker 入門教程:http://dockone.io/article/3645

掘金:學點 Docker 知識:https://juejin.im/post/5c2c69cee51d450d9707236e

一、Docker 簡介

Docker 兩個主要部件:

  • Docker: 開源的容器虛擬化平臺
  • Docker Hub: 用于分享、管理 Docker 容器的 Docker SaaS 平臺 --?Docker Hub

Docker 使用客戶端-服務器 (C/S) 架構模式。Docker 客戶端會與 Docker 守護進程進行通信。Docker 守護進程會處理復雜繁重的任務,例如建立、運行、發布你的 Docker 容器。Docker 客戶端和守護進程可以運行在同一個系統上,當然你也可以使用 Docker 客戶端去連接一個遠程的 Docker 守護進程。Docker 客戶端和守護進程之間通過 socket 或者 RESTful API 進行通信。

1.1 Docker 守護進程

如上圖所示,Docker 守護進程運行在一臺主機上。用戶并不直接和守護進程進行交互,而是通過 Docker 客戶端間接和其通信。

1.2 Docker 客戶端

Docker 客戶端,實際上是 docker 的二進制程序,是主要的用戶與 Docker 交互方式。它接收用戶指令并且與背后的 Docker 守護進程通信,如此來回往復。

1.3 Docker 內部

要理解 Docker 內部構建,需要理解以下三種部件:

  • Docker 鏡像 - Docker images
  • Docker 倉庫 - Docker registeries
  • Docker 容器 - Docker containers

Docker 鏡像

Docker 鏡像是 Docker 容器運行時的只讀模板,每一個鏡像由一系列的層 (layers) 組成。Docker 使用 UnionFS 來將這些層聯合到單獨的鏡像中。UnionFS 允許獨立文件系統中的文件和文件夾(稱之為分支)被透明覆蓋,形成一個單獨連貫的文件系統。正因為有了這些層的存在,Docker 是如此的輕量。當你改變了一個 Docker 鏡像,比如升級到某個程序到新的版本,一個新的層會被創建。因此,不用替換整個原先的鏡像或者重新建立(在使用虛擬機的時候你可能會這么做),只是一個新 的層被添加或升級了。現在你不用重新發布整個鏡像,只需要升級,層使得分發 Docker 鏡像變得簡單和快速。

Docker 倉庫

Docker 倉庫用來保存鏡像,可以理解為代碼控制中的代碼倉庫。同樣的,Docker 倉庫也有公有和私有的概念。公有的 Docker 倉庫名字是 Docker Hub。Docker Hub 提供了龐大的鏡像集合供使用。這些鏡像可以是自己創建,或者在別人的鏡像基礎上創建。Docker 倉庫是 Docker 的分發部分。

Docker 容器

Docker 容器和文件夾很類似,一個Docker容器包含了所有的某個應用運行所需要的環境。每一個 Docker 容器都是從 Docker 鏡像創建的。Docker 容器可以運行、開始、停止、移動和刪除。每一個 Docker 容器都是獨立和安全的應用平臺,Docker 容器是 Docker 的運行部分。

1.4 libcontainer

Docker 從 0.9 版本開始使用 libcontainer 替代 lxc,libcontainer 和 Linux 系統的交互圖如下:

  • 圖片來源:?Docker 0.9: introducing execution drivers and libcontainer

1.5 命名空間「Namespaces」

pid namespace

不同用戶的進程就是通過 pid namespace 隔離開的,且不同 namespace 中可以有相同 PID。具有以下特征:

  • 每個 namespace 中的 pid 是有自己的 pid=1 的進程(類似 /sbin/init 進程)
  • 每個 namespace 中的進程只能影響自己的同一個 namespace 或子 namespace 中的進程
  • 因為 /proc 包含正在運行的進程,因此在 container 中的 pseudo-filesystem 的 /proc 目錄只能看到自己 namespace 中的進程
  • 因為 namespace 允許嵌套,父 namespace 可以影響子 namespace 的進程,所以子 namespace 的進程可以在父 namespace 中看到,但是具有不同的 pid

參考文檔:Introduction to Linux namespaces – Part 3: PID

mnt namespace

類似 chroot,將一個進程放到一個特定的目錄執行。mnt namespace 允許不同 namespace 的進程看到的文件結構不同,這樣每個 namespace 中的進程所看到的文件目錄就被隔離開了。同 chroot 不同,每個 namespace 中的 container 在 /proc/mounts 的信息只包含所在 namespace 的 mount point。

net namespace

網絡隔離是通過 net namespace 實現的, 每個 net namespace 有獨立的 network devices, IP addresses, IP routing tables, /proc/net 目錄。這樣每個 container 的網絡就能隔離開來。 docker 默認采用 veth 的方式將 container 中的虛擬網卡同 host 上的一個 docker bridge 連接在一起。

參考文檔:Introduction to Linux namespaces – Part 5: NET

uts namespace

UTS ("UNIX Time-sharing System") namespace 允許每個 container 擁有獨立的 hostname 和 domain name, 使其在網絡上可以被視作一個獨立的節點而非 Host 上的一個進程。

參考文檔:Introduction to Linux namespaces – Part 1: UTS

ipc namespace

container 中進程交互還是采用 Linux 常見的進程間交互方法 (interprocess communication - IPC), 包括常見的信號量、消息隊列和共享內存。然而同 VM 不同,container 的進程間交互實際上還是 host 上具有相同 pid namespace 中的進程間交互,因此需要在IPC資源申請時加入 namespace 信息 - 每個 IPC 資源有一個唯一的 32bit ID。

參考文檔:Introduction to Linux namespaces – Part 2: IPC

user namespace

每個 container 可以有不同的 user 和 group id, 也就是說可以以 container 內部的用戶在 container 內部執行程序而非 Host 上的用戶。

有了以上 6 種 namespace 從進程、網絡、IPC、文件系統、UTS 和用戶角度的隔離,一個 container 就可以對外展現出一個獨立計算機的能力,并且不同 container 從 OS 層面實現了隔離。 然而不同 namespace 之間資源還是相互競爭的,仍然需要類似 ulimit 來管理每個 container 所能使用的資源 - cgroup。

Reference

  • Docker Getting Start: Related Knowledge
  • Docker 介紹以及其相關術語、底層原理和技術

1.6 資源配額「cgroups」

cgroups 實現了對資源的配額和度量。 cgroups 的使用非常簡單,提供類似文件的接口,在 /cgroup 目錄下新建一個文件夾即可新建一個 group,在此文件夾中新建 task 文件,并將 pid 寫入該文件,即可實現對該進程的資源控制。具體的資源配置選項可以在該文件夾中新建子 subsystem ,{子系統前綴}.{資源項} 是典型的配置方法, 如 memory.usageinbytes 就定義了該 group 在 subsystem memory 中的一個內存限制選項。 另外,cgroups 中的 subsystem 可以隨意組合,一個 subsystem 可以在不同的 group 中,也可以一個 group 包含多個 subsystem - 也就是說一個 subsystem。

  • memory
    • 內存相關的限制
  • cpu
    • 在 cgroup 中,并不能像硬件虛擬化方案一樣能夠定義 CPU 能力,但是能夠定義 CPU 輪轉的優先級,因此具有較高 CPU 優先級的進程會更可能得到 CPU 運算。 通過將參數寫入 cpu.shares ,即可定義改 cgroup 的 CPU 優先級 - 這里是一個相對權重,而非絕對值
  • blkio
    • block IO 相關的統計和限制,byte/operation 統計和限制 (IOPS 等),讀寫速度限制等,但是這里主要統計的都是同步 IO
  • devices
    • 設備權限限制

參考文檔:how to use cgroup

二、Docker 安裝

docker 的相關安裝方法這里不作介紹,具體安裝參考?官檔

菜鳥教程?Docker 安裝:https://www.runoob.com/docker/ubuntu-docker-install.html

安裝成后,記得更換國內的 docker 鏡像源

獲取當前 docker 版本

$ sudo docker version Client version: 1.3.2 Client API version: 1.15 Go version (client): go1.3.3 Git commit (client): 39fa2fa/1.3.2 OS/Arch (client): linux/amd64 Server version: 1.3.2 Server API version: 1.15 Go version (server): go1.3.3 Git commit (server): 39fa2fa/1.3.2

安裝完成后,就開始使用了。開始之前先看一張圖:現在看不懂沒關系。

Image 文件

Docker 把應用程序及其依賴打包在一個 image 文件里面,可以理解為一個容器的說明書。通過這個image文件可以生成容器的實例。同一個image文件可以生成同時運行的多個實例。

image 文件是一個二進制文件,實際上,一個image文件往往繼承自另外一個image文件,加上一些個性化設置而成。舉例來說:你可以在 ubuntu 的 image 基礎上加上 Apache 服務器,形成你自己的 image。

# 列出本機的所有 image 文件。 $ docker image ls# 刪除 image 文件 $ docker image rm [imageName]

并且 image 文件是通用的,一臺機器上的 image 文件拷貝到另一臺機器上,照樣可以使用。一般來說,我們往往是使用別人制定好的 image 文件,即使要定制也可以對已有的 image 文件進行加工,而不是從頭制作,這樣可以節省很多時間。

為了方便,image制作完成后,可以上傳到網上的倉庫,Docker 的官方倉庫?https://hub.docker.com/ 是最重要、最常用的 image 倉庫。此外,出售自己制作的 image 文件也是可以的。

實例: Hello world

下面,我們通過最簡單的 image 文件“hello world”,感受一下 Docker。

首先,運行下面的命令,將 image 文件從倉庫抓取到本地。

$ docker image pull library/hello-world

上面的代碼中,docker image pull 是 抓取(拉取) image 文件的命令,library/hello-world 是 image 文件在倉庫里面的位置,其中 library是 image 文件所在的組,hello-world 是 image 文件的名字。

由于 Docker 官方提供的文件都放在 library 組 里面,所以他是默認組,可以省略。因此上面的命令可以寫成下面這樣:

$ docker image pull hello-world

抓取成功后就可以看到本地的 image 文件了

ig:~ itguang$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest e38bc07ac18e 3 weeks ago 1.85kB

現在運行這個image文件,可以看到如些輸出:

ig:~ itguang$ docker container run hello-worldHello from Docker! This message shows that your installation appears to be working correctly.To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.(amd64)3. The Docker daemon created a new container from that image which runs theexecutable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bashShare images, automate workflows, and more with a free Docker ID:https://hub.docker.com/For more examples and ideas, visit:https://docs.docker.com/engine/userguide/

docker container run 會從一個鏡像文件中生成一個容器實例,并且運行它。注意,docker container run命令具有自動抓取 image 文件的功能。如果發現本地沒有指定的 image 文件,就會從倉庫自動抓取。因此,前面的docker image pull命令并不是必需的步驟。

待上面那段提示輸出后,hello-world就會停止運行,容器就會終止。

有些容器不會終止,因為提供的是服務,比如安裝unbuntu的image,就可以在命令行體驗unbutu系統。

對于那些不會自動終止的容器,必須使用docker container kill [container_id]來終止。我們可以新打開一個終端窗口:
?

ig:~ itguang$ docker container ls # 查看當前運行容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 649a6b785a86 ubuntu "bash" 3 seconds ago Up 4 seconds loving_austinig:~ itguang$ docker container kill 649a6b785a86 # 殺死某個容器 649a6b785a86ig:~ itguang$ docker container ls 再次查看 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESig:~ itguang$

container 容器文件

image文件生成的實例本身也是一個文件,稱為:容器文件。也即是說,一旦容器生成,就會存在兩個文件:一個image文件,一個容器文件。而且關閉容器并不會刪除容器文件,只是容器停止運行而已。

# 列出本機正在運行的容器 $ docker container ls# 列出本機所有容器,包括終止運行的容器 ig:~ itguang$ docker container ls --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 649a6b785a86 ubuntu "bash" 10 minutes ago Exited (137) 9 minutes ago loving_austin 85b9c705e73f hello-world "/hello" 10 minutes ago Exited (0) 10 minutes ago silly_lumiere c9281ad7f7b8 ubuntu "bash" 17 minutes ago Exited (127) 11 minutes ago stupefied_curran e06bf36259ef hello-world "/hello" 24 minutes ago Exited (0) 24 minutes ago flamboyant_chaplygin ig:~ itguang$

可以看出,我現在已經有了四個容器,終止運行的容器文件依然會占用硬盤空間,可以使用docker container rm [container_id]命令刪除。

ig:~ itguang$ docker container ls --all CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9281ad7f7b8 ubuntu "bash" 22 minutes ago Exited (127) 17 minutes ago stupefied_curran e06bf36259ef hello-world "/hello" 29 minutes ago Exited (0) 29 minutes ago flamboyant_chaplygin ig:~ itguang$ docker container rm c9281ad7f7b8 e06bf36259ef

Dockerfile 文件

學會了如何使用 image文件 和 生成容器文件 之后,接下來你可能會想直到這個 image 文件是如何生成的呢? 如果你要推廣自己的軟件,勢必要制作自己的 image 文件。

這時候就要用到 Dockerfile 文件,他是一個文本文件,用來配置 image。Docker容器根據 Dockerfile 文件生成 image 二進制文件。

下面通過一個實例,來演示如何編寫 Dockerfile 文件生成自己的 image 二進制文件。

實例:制作自己的 Docker 容器

下面我以 koa-demos 項目為例,介紹怎么寫 Dockerfile 文件,實現讓用戶在 Docker 容器里面運行 Koa 框架。

  • 1.先下載源代碼:
$ git clone https://github.com/ruanyf/koa-demos.git $ cd koa-demos
  • 2.編寫 Dockerfile 文件

首先,在項目的根目錄下,新建一個文本文件 .dockerignore 然后寫入下面的內容。

.git node_modules npm-debug.log

上面的代碼表示,這三個路徑要排除,不要打包進 image 文件,如果你沒有路徑可以排除,這個文件也可以不用建立。

然后在項目根目錄下再新建一個 Dockerfile 文本文件,寫入下面的內容:

FROM node:8.4 COPY . /app WORKDIR /app RUN npm install --registry=https://registry.npm.taobao.org EXPOSE 3000

上面代碼解釋如下:

From node:8.4 : 該image繼承自官方的node image,冒號表示標簽,這里表示8.4版本的node。 COPY . /app : 將當前目錄下的所有文件都拷貝到 image文件的 /app 目錄。 WORKDIR /app : 指定接下來的工作目錄為 /app 。 RUN npm install : 在/app目錄下,運行npm install命令安裝依賴。注意,安裝后所有的依賴,都將打包進入 image 文件。 EXPOSE 3000 : 將容器的3000 端口暴露出來,允許外部連接這個端口。
  • 創建 image 文件

有了 Dockerfile 文件以后就可以使用 docker image build 命令創建 image 文件了。

$ docker image build -t koa-demo . # 或者 $ docker image build -t koa-demo:0.0.1 .

上面代碼中,-t?參數用來指定 image 文件的名字,后面還可以用冒號指定標簽,如果不指定,默認標簽就是latest,最后那個.表示 Dockerfile 文件所在的路徑。這個例子 Dockerfile 文件在當前路徑,所以就是一個.

上面代碼中,

  • -t 參數 用來指定 image 文件的名字,后面還可以用冒號指定標簽,如果不指定,默認標簽就是latest,
  • 最后那個 . 表示 Dockerfile 文件所在的路徑。這個例子 Dockerfile 文件在當前路徑,所以就是一個 .

如果構建成功,會有如下提示信息:

... Successfully built 979e0930e4b6 Successfully tagged koa-demo:latest

我們使用 docker images 查看當前的 image 文件

ig:koa-demos itguang$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE koa-demo latest 979e0930e4b6 About a minute ago 676MB ubuntu latest 452a96d81c30 8 days ago 79.6MB hello-world latest e38bc07ac18e 3 weeks ago 1.85kB node 8.4 386940f92d24 8 months ago 673MB
  • 生成容器

前面講過,docker container run 命令會?從 image 文件?生成容器,

$ docker container run -p 8000:3000 -it koa-demo /bin/bash # 或者 $ docker container run -p 8000:3000 -it koa-demo:0.0.1 /bin/bash

上面各個參數解釋如下:

-p : 容器的3000端口映射到本地的8000端口. -it : 容器的shell會映射到當前本地的shell,你在本機窗口輸入的命令會傳入到容器中. koa-demo:0.0.1 : image 文件的名字(如果有標簽,還需要提供標簽,默認是 latest 標簽)。 /bin/bash : 容器啟動以后,容器內部第一個執行的命令.這里是啟用Bash,以保證用戶可以使用shell

如果一切正常,運行上面的命令以后,就會返回一個命令行提示符。

root@6be4c4a279df:/app#

這表示你已經在容器里面了,返回的提示符就是容器內部的 Shell 提示符。執行下面的命令。

root@6be4c4a279df:/app# node demos/01.js

這時,Koa 框架已經運行起來了。打開本機的瀏覽器,訪問?http://127.0.0.1:8000,網頁顯示”Not Found”,這是因為這個 demo 沒有寫路由。

這個例子中 node 進程運行在 Docker 容器的虛擬環境里面,進程接觸到的文件系統和網絡接口都是虛擬的,與本機文件系統和網絡接口都是隔離的,因此需要定義容器與物理機的端口映射(map)。

現在,在容器的命令行下,按 ctrl+c 停止 node 進程, 按 ctrl+d ( 或者exit)退出容器。此外,也可以使用 docker container kill [container-id] 終止容器的運行。

# 在本機的另一個終端窗口,查出容器的 ID $ docker container ls# 停止指定的容器運行 $ docker container kill [containerID]

也可以使用?docker container run?命令的?--rm?參數,在容器終止運行后自動刪除容器文件。

$ docker container run --rm -p 8000:3000 -it koa-demo /bin/bash

CMD 命令

上一節的例子里面,容器啟動以后,需要手動輸入命令 node demos/01.js。我們可以把這個命令寫在 Dockerfile 里面,這樣容器啟動以后,這個命令就已經執行了,不用再手動輸入了。

FROM node:8.4 COPY . /app WORKDIR /app RUN npm install --registry=https://registry.npm.taobao.org EXPOSE 3000 CMD node demos/01.js

上面的 Dockerfile 文件最后面多了一行 CMD node demos/01.js,表示容器啟動后,自動執行 node demos/01.js

你可能會問 RUN 命令和 CMD 命令的區別是什么呢?

簡單來說:

  • RUN 命令 在 image 文件的構建階段執行,執行結果會打包進 image 文件;
  • CMD 命令 則是在容器啟動后執行。
  • 另外?一個 Dockerfile 文件只能包含多個RUN命令,但只能包含一個CMD命令
  • 注意:指定了 CMD 命令后,docker container run 命令就不能附加命令了,比如前面的 /bin/bash,否則,它會覆蓋CMD命令

    現在啟動容器可以用下面的命令:

    $ docker container run --rm -p 8000:3000 -it koa-demo:0.0.1

    發布image文件

    容器運行成功后,就確認了 image文件的有效性,這是我們就可以考慮把 image 文件分享到網上。
    首先,去 hub.docker.com 或 cloud.docker.com 注冊一個賬戶。然后,用下面的命令登錄。

    $ docker login

    接著,為本地的 image 標注用戶名和版本。

    $ docker image tag [imageName] [username]/[repository]:[tag] # 實例 $ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1

    也可以不標注用戶名,重新構建一下 image 文件。

    $ docker image build -t [username]/[repository]:[tag] .

    最后,發布 image 文件。

    $ docker image push [username]/[repository]:[tag]

    發布成功以后,登錄 hub.docker.com,就可以看到已經發布的 image 文件。

    其他有用的命令

    docker的主要用法就是上面這些。另外還有一些常見的命令:

  • docker container start。前面的 docker container run 命令是新建容器,每運行一次,就會新建一個容器。同樣的命令運行兩次就會生成兩個一模一樣的容器文件。如果希望重復使用容器,就需要使用 docker container start 命令,它用來啟動已經生成,已經停止運行的容器文件。命令:docker container start [container_id]
  • docker container stop。前面的 docker container kill 命令終止容器的運行,相當于向容器的主進程發送SIGKILL信號,而docker container stop 也是用來終止容器的運行,相當于向容器的主進程發送 SIGTERM 信號,然后過一段時間在發送SIGKILL信號。這個信號的差別就是:程序收到 SIGTERM 信號后,可自行進行收尾清理工作,但也可以不理會這個信號,但如果收到 SIGKILL信號,就會立即終止這個容器的運行,那些正在進行的操作會全部丟失。命令:docker container stop [container_id]。
  • docker container logs。docker container logs 用來查看容器的輸出,即容器里shell的標準輸出。比如: 如果 docker run 命令運行容器的時候,沒有使用 -it 參數,就要使用這個命令查看輸出。命令:docker container logs [container_id]
  • docker container exec。docker container exec 命令用于進行一個正在運行的容器。如果 docker container run 命令運行容器的時候,沒有使用 -it 參數,就要使用這個命令進入進入容器,一旦進入容器,就可以在容器的shell執行命令了。命令格式:docker container exec [container_id] /bin/bash
  • docker container cp。docker container cp 命令用于從正在運行的容器里,將文件拷貝到本機。下面是拷貝當前 目錄的寫法:docker container cp [container_id]:[/path/to/file] .
  • 小結

    到了這里相信你對 docker 的基本操作與相關概念已經有了大概了解,現在讓我們回到文章開頭的那個圖:

    可以看出: DockerfileDocker hubimage鏡像文件container容器文件容器實例 的關系一目了然。

  • ?image文件 來源有兩個:Dockfile文件 和 Docker hub。
  • 可以使用 docker container run 命令從 image 文件生成并運行容器。
  • 三、Docker 基礎用法

    Docker HUB?: Docker鏡像首頁,包括官方鏡像和其它公開鏡像

    因為國情的原因,國內下載 Docker HUB 官方的相關鏡像比較慢,可以使用?docker.cn?鏡像,鏡像保持和官方一致,關鍵是速度塊,推薦使用。

    3.1 Search images

    $ sudo docker search ubuntu

    搜索可用的 docker 鏡像
    使用 docker 最簡單的方式莫過于從現有的容器鏡像開始。Docker 官方網站專門有一個頁面來存儲所有可用的鏡像,網址是:https://index.docker.io/ 。你可以通過瀏覽這個網頁來查找你想要使用的鏡像,或者使用命令行的工具來檢索。
    命令格式:docker search 鏡像名字
    正確的命令:$ docker search tutorial

    3.2 Pull images

    $ sudo docker pull ubuntu # 獲取 ubuntu 官方鏡像 $ sudo docker images # 查看當前鏡像列表

    使用 docker pull 命令即可。( docker命令 和 git 有一些類似的地方)。在 docker 的鏡像索引網站上面,鏡像都是按照?用戶名/鏡像名?的方式來存儲的。有一組比較特殊的鏡像,比如ubuntu 這類基礎鏡像,經過官方的驗證,值得信任,可以直接用 鏡像名來檢索到。
    提示:執行pull命令的時候要寫完整的名字,比如 "learn/tutorial"。
    示例命令:$ docker pull learn/tutorial

    3.3 Running an interactive shell

    $ sudo docker run -i -t ubuntu:14.04 /bin/bash
    • docker run - 運行一個容器
    • -t - 分配一個(偽)tty (link is external)
    • -i - 交互模式 (so we can interact with it)
    • ubuntu:14.04 - 使用 ubuntu 基礎鏡像 14.04
    • /bin/bash - 運行命令 bash shell

    注: ubuntu 會有多個版本,通過指定 tag 來啟動特定的版本 [image]:[tag]

    $ sudo docker ps # 查看當前運行的容器, ps -a 列出當前系統所有的容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6c9129e9df10 ubuntu:14.04 /bin/bash 6 minutes ago Up 6 minutes cranky_babbage

    3.4 相關快捷鍵

    • 退出:Ctrl-Dorexit
    • detach:Ctrl-P + Ctrl-Q
    • attach:docker attach CONTAINER-ID

    Docker 刪除鏡像

    1. 查詢鏡像:docker images
    ? ? 可以看到所有已經存在的鏡像的 ID (IMAGE ID)
    2. 查詢容器:docker ps -a
    ? ? 可以看到所有容器的 ID (CONTAINER ID)
    3. 先刪除容器:docker rm 容器ID
    4. 再刪除鏡像:docker rmi 鏡像ID

    注意點:
    ? ? 1. 刪除前需要保證容器是停止的? stop
    ? ? 2. 需要注意刪除鏡像和容器的命令不一樣。?
    ? ? ? ? docker rm CONTAINER_ID? ?刪除容器
    ? ? ? ? docker rmi IMAGE_ID? ? ? ? ? ?刪除鏡像
    ? ? 3. 順序需要先刪除容器,再刪除鏡像

    在 docker 容器中運行 hello world

    From:https://www.docker.org.cn/book/docker/what-is-docker-16.html

    簡介:通過docker run命令可以啟動某一個鏡像,并運行一個命令。

    在 docker 容器中運行 hello world

    docker容器可以理解為在沙盒中運行的進程。這個沙盒包含了該進程運行所必須的資源,包括文件系統、系統類庫、shell 環境等等。但這個沙盒默認是不會運行任何程序的。你需要在沙盒中運行一個進程來啟動某一個容器。這個進程是該容器的唯一進程,所以當該進程結束的時候,容器也會完全的停止。

    目標:在我們剛剛下載的鏡像中輸出"hello word"。為了達到這個目的,我們需要在這個容器中運行"echo"命令,輸出"hello word"。
    提示:docker run 命令有兩個參數,一個是鏡像名,一個是要在鏡像中運行的命令。
    正確的命令:$docker run learn/tutorial echo "hello word"

    在容器中安裝新的程序

    下一步我們要做的事情是在容器里面安裝一個簡單的程序(ping)。我們之前下載的tutorial鏡像是基于ubuntu的,所以你可以使用ubuntu的apt-get命令來安裝ping程序: apt-get install -y ping。
    備注:apt-get 命令執行完畢之后,容器就會停止,但對容器的改動不會丟失。

    目標:在 learn/tutorial 鏡像里面安裝 ping 程序。
    提示:在執行 apt-get 命令的時候,要帶上-y參數。如果不指定-y參數的話,apt-get命令會進入交互模式,需要用戶輸入命令來進行確認,但在 docker 環境中是無法響應這種交互的。
    正確的命令:$docker run learn/tutorial apt-get install -y ping

    保存對容器的修改

    簡介:通過docker commit 命令保存對容器的修改

    當你對某一個容器做了修改之后(通過在容器中運行某一個命令),可以把對容器的修改保存下來,這樣下次可以從保存后的最新狀態運行該容器。docker中保存狀態的過程稱之為committing,它保存的新舊狀態之間的區別,從而產生一個新的版本。

    目標:首先使用 docker ps -l?命令獲得安裝完 ping 命令之后容器的 id。然后把這個鏡像保存為 learn/ping。
    提示:
    ? ? 1. 運行 docker commit,可以查看該命令的參數列表。
    ? ? 2. 你需要指定要提交保存容器的ID。(譯者按:通過docker ps -l 命令獲得)
    ? ? 3. 無需拷貝完整的id,通常來講最開始的三至四個字母即可區分。(譯者按:非常類似git里面的版本號)
    正確的命令:$ docker commit 698 learn/ping

    執行完 docker commit 命令之后,會返回新版本鏡像的id號。

    運行新的鏡像

    簡介:對一個鏡像提交修改之后,就可以運行它里面新安裝的命令了。

    運行新的鏡像
    ok,到現在為止,你已經建立了一個完整的、自成體系的docker環境,并且安裝了ping命令在里面。它可以在任何支持docker環境的系統中運行啦!(譯者按:是不是很神奇呢?)讓我們來體驗一下吧!

    目標:在新的鏡像中運行 ping www.google.com 命令。
    提示:一定要使用新的鏡像名 learn/ping來運行ping命令。(譯者按:最開始下載的learn/tutorial鏡像中是沒有ping命令的)
    正確的命令:$ docker run lean/ping ping www.google.com

    檢查運行中的鏡像

    簡介:使用docker ps命令可以查看所有正在運行中的容器列表,使用docker inspect命令我們可以查看更詳細的關于某一個容器的信息。

    現在你已經運行了一個docker容器,讓我們來看下正在運行的容器。

    使用 docker ps命令 可以查看所有正在運行中的容器列表,
    使用 docker inspect命令 我們可以查看更詳細的關于某一個容器的信息。

    目標:查找某一個運行中容器的id,然后使用docker inspect命令查看容器的信息。
    提示:可以使用鏡像id的前面部分,不需要完整的id。無需拷貝完整的id,通常來講最開始的三至四個字母即可區分
    正確的命令:$ docker inspect efe

    發布自己的鏡像

    簡介:我們也可以把我們自己編譯的鏡像發布到索引頁面,一方面可以自己重用,另一方面也可以分享給其他人使用。

    現在我們已經驗證了新鏡像可以正常工作,下一步我們可以將其發布到官方的索引網站。還記得我們最開始下載的learn/tutorial鏡像吧,我們也可以把我們自己編譯的鏡像發布到索引頁面,一方面可以自己重用,另一方面也可以分享給其他人使用。

    目標:把 learn/ping 鏡像發布到docker的index網站。
    提示:
    ? ? 1. docker images 命令可以列出所有安裝過的鏡像。
    ? ? 2. docker push 命令可以將某一個鏡像發布到官方網站。
    ? ? 3. 你只能將鏡像發布到自己的空間下面。這個模擬器登錄的是learn帳號。
    預期的命令:$ docker push learn/ping

    四、Docker 命令幫助

    4.1 docker help

    docker command

    $ sudo docker # docker 命令幫助Commands:attach Attach to a running container # 當前 shell 下 attach 連接指定運行鏡像build Build an image from a Dockerfile # 通過 Dockerfile 定制鏡像commit Create a new image from a container's changes # 提交當前容器為新的鏡像cp Copy files/folders from the containers filesystem to the host path# 從容器中拷貝指定文件或者目錄到宿主機中create Create a new container # 創建一個新的容器,同 run,但不啟動容器diff Inspect changes on a container's filesystem # 查看 docker 容器變化events Get real time events from the server # 從 docker 服務獲取容器實時事件exec Run a command in an existing container # 在已存在的容器上運行命令export Stream the contents of a container as a tar archive # 導出容器的內容流作為一個 tar 歸檔文件[對應 import ]history Show the history of an image # 展示一個鏡像形成歷史images List images # 列出系統當前鏡像import Create a new filesystem image from the contents of a tarball # 從tar包中的內容創建一個新的文件系統映像[對應 export]info Display system-wide information # 顯示系統相關信息inspect Return low-level information on a container # 查看容器詳細信息kill Kill a running container # kill 指定 docker 容器load Load an image from a tar archive # 從一個 tar 包中加載一個鏡像[對應 save]login Register or Login to the docker registry server # 注冊或者登陸一個 docker 源服務器logout Log out from a Docker registry server # 從當前 Docker registry 退出logs Fetch the logs of a container # 輸出當前容器日志信息port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT# 查看映射端口對應的容器內部源端口pause Pause all processes within a container # 暫停容器ps List containers # 列出容器列表pull Pull an image or a repository from the docker registry server# 從docker鏡像源服務器拉取指定鏡像或者庫鏡像push Push an image or a repository to the docker registry server# 推送指定鏡像或者庫鏡像至docker源服務器restart Restart a running container # 重啟運行的容器rm Remove one or more containers # 移除一個或者多個容器rmi Remove one or more images # 移除一個或多個鏡像[無容器使用該鏡像才可刪除,否則需刪除相關容器才可繼續或 -f 強制刪除]run Run a command in a new container# 創建一個新的容器并運行一個命令save Save an image to a tar archive # 保存一個鏡像為一個 tar 包[對應 load]search Search for an image on the Docker Hub # 在 docker hub 中搜索鏡像start Start a stopped containers # 啟動容器stop Stop a running containers # 停止容器tag Tag an image into a repository # 給源中鏡像打標簽top Lookup the running processes of a container # 查看容器中運行的進程信息unpause Unpause a paused container # 取消暫停容器version Show the docker version information # 查看 docker 版本號wait Block until a container stops, then print its exit code # 截取容器停止時的退出狀態值 Run 'docker COMMAND --help' for more information on a command.

    docker option

    Usage of docker:--api-enable-cors=false Enable CORS headers in the remote API # 遠程 API 中開啟 CORS 頭-b, --bridge="" Attach containers to a pre-existing network bridge # 橋接網絡use 'none' to disable container networking--bip="" Use this CIDR notation address for the network bridge's IP, not compatible with -b# 和 -b 選項不兼容,具體沒有測試過-d, --daemon=false Enable daemon mode # daemon 模式-D, --debug=false Enable debug mode # debug 模式--dns=[] Force docker to use specific DNS servers # 強制 docker 使用指定 dns 服務器--dns-search=[] Force Docker to use specific DNS search domains # 強制 docker 使用指定 dns 搜索域-e, --exec-driver="native" Force the docker runtime to use a specific exec driver # 強制 docker 運行時使用指定執行驅動器--fixed-cidr="" IPv4 subnet for fixed IPs (ex: 10.20.0.0/16)this subnet must be nested in the bridge subnet (which is defined by -b or --bip)-G, --group="docker" Group to assign the unix socket specified by -H when running in daemon modeuse '' (the empty string) to disable setting of a group-g, --graph="/var/lib/docker" Path to use as the root of the docker runtime # 容器運行的根目錄路徑-H, --host=[] The socket(s) to bind to in daemon mode # daemon 模式下 docker 指定綁定方式[tcp or 本地 socket]specified using one or more tcp://host:port, unix:///path/to/socket, fd://* or fd://socketfd.--icc=true Enable inter-container communication # 跨容器通信--insecure-registry=[] Enable insecure communication with specified registries (no certificate verification for HTTPS and enable HTTP fallback) (e.g., localhost:5000 or 10.20.0.0/16)--ip="0.0.0.0" Default IP address to use when binding container ports # 指定監聽地址,默認所有 ip--ip-forward=true Enable net.ipv4.ip_forward # 開啟轉發--ip-masq=true Enable IP masquerading for bridge's IP range--iptables=true Enable Docker's addition of iptables rules # 添加對應 iptables 規則--mtu=0 Set the containers network MTU # 設置網絡 mtuif no value is provided: default to the default route MTU or 1500 if no default route is available-p, --pidfile="/var/run/docker.pid" Path to use for daemon PID file # 指定 pid 文件位置--registry-mirror=[] Specify a preferred Docker registry mirror -s, --storage-driver="" Force the docker runtime to use a specific storage driver # 強制 docker 運行時使用指定存儲驅動--selinux-enabled=false Enable selinux support # 開啟 selinux 支持--storage-opt=[] Set storage driver options # 設置存儲驅動選項--tls=false Use TLS; implied by tls-verify flags # 開啟 tls--tlscacert="/root/.docker/ca.pem" Trust only remotes providing a certificate signed by the CA given here--tlscert="/root/.docker/cert.pem" Path to TLS certificate file # tls 證書文件位置--tlskey="/root/.docker/key.pem" Path to TLS key file # tls key 文件位置--tlsverify=false Use TLS and verify the remote (daemon: verify client, client: verify daemon) # 使用 tls 并確認遠程控制主機-v, --version=false Print version information and quit # 輸出 docker 版本信息

    4.2 docker search

    $ sudo docker search --helpUsage: docker search TERMSearch the Docker Hub for images # 從 Docker Hub 搜索鏡像 --automated=false Only show automated builds--no-trunc=false Don't truncate output-s, --stars=0 Only displays with at least xxx stars

    示例:

    # 查找 star 數至少為 100 的鏡像,找出只有官方鏡像 start 數超過 100, # 默認不加 s 選項找出所有相關 ubuntu 鏡像 $ sudo docker search -s 100 ubuntu NAME DESCRIPTION STARS OFFICIAL AUTOMATED ubuntu Official Ubuntu base image 425 [OK]

    4.3 docker info

    # 容器個數 Images: 22 # 鏡像個數 Storage Driver: devicemapper # 存儲驅動 Pool $ sudo docker info Containers: 1 Name: docker-8:17-3221225728-poolPool Blocksize: 65.54 kBData file: /data/docker/devicemapper/devicemapper/dataMetadata file: /data/docker/devicemapper/devicemapper/metadataData Space Used: 1.83 GBData Space Total: 107.4 GBMetadata Space Used: 2.191 MBMetadata Space Total: 2.147 GBLibrary Version: 1.02.84-RHEL7 (2014-03-26) Execution Driver: native-0.2 # 存儲驅動 Kernel Version: 3.10.0-123.el7.x86_64 Operating System: CentOS Linux 7 (Core)

    4.4 docker pull && docker push

    $ sudo docker pull --help # pull 拉取鏡像 Usage: docker pull [OPTIONS] NAME[:TAG] Pull an image or a repository from the registry-a, --all-tags=false Download all tagged images in the repository $ sudo docker push # push 推送指定鏡像 Usage: docker push NAME[:TAG] Push an image or a repository to the registry

    示例:

    # 下載官方 ubuntu docker 鏡像,默認下載所有 ubuntu 官方庫鏡像 $ sudo docker pull ubuntu # 下載指定版本 ubuntu 官方鏡像 $ sudo docker pull ubuntu:14.04 # 推送鏡像庫到私有源[可注冊 docker 官方賬戶,推送到官方自有賬戶] $ sudo docker push 192.168.0.100:5000/ubuntu # 推送指定鏡像到私有源 $ sudo docker push 192.168.0.100:5000/ubuntu:14.04

    4.5 docker images

    列出當前系統鏡像

    $ sudo docker images --helpUsage: docker images [OPTIONS] [NAME] List images# -a 顯示當前系統的所有鏡像,包括過渡層鏡像,默認 docker images 顯示最終鏡像,不包括過渡層鏡像 -a, --all=false Show all images (by default filter out the intermediate image layers) -f, --filter=[] Provide filter values (i.e. 'dangling=true') --no-trunc=false Don't truncate output -q, --quiet=false Only show numeric IDs

    示例:

    $ sudo docker images # 顯示當前系統鏡像,不包括過渡層鏡像 $ sudo docker images -a # 顯示當前系統所有鏡像,包括過渡層鏡像 $ sudo docker images ubuntu # 顯示當前系統 docker ubuntu 庫中的所有鏡像 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 12.04 ebe4be4dd427 4 weeks ago 210.6 MB ubuntu 14.04 e54ca5efa2e9 4 weeks ago 276.5 MB ubuntu 14.04-ssh 6334d3ac099a 7 weeks ago 383.2 MB

    4.6 docker rmi

    刪除一個或者多個鏡像

    $ sudo docker rmi --helpUsage: docker rmi IMAGE [IMAGE...] 移除一個或者多個鏡像-f, --force=false Force removal of the image # 強制移除鏡像不管是否有容器使用該鏡像 --no-prune=false Do not delete untagged parents # 不要刪除未標記的父鏡像

    4.7 docker run

    $ sudo docker run --helpUsage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Run a command in a new container-a, --attach=[] Attach to stdin, stdout or stderr.-c, --cpu-shares=0 CPU shares (relative weight) # 設置 cpu 使用權重 --cap-add=[] Add Linux capabilities--cap-drop=[] Drop Linux capabilities--cidfile="" Write the container ID to the file # 把容器 id 寫入到指定文件 --cpuset="" CPUs in which to allow execution (0-3, 0,1) # cpu 綁定 -d, --detach=false Detached mode: Run container in the background, print new container id # 后臺運行容器 --device=[] Add a host device to the container (e.g. --device=/dev/sdc:/dev/xvdc) --dns=[] Set custom dns servers # 設置 dns --dns-search=[] Set custom dns search domains # 設置 dns 域搜索 -e, --env=[] Set environment variables # 定義環境變量 --entrypoint="" Overwrite the default entrypoint of the image # ? --env-file=[] Read in a line delimited file of ENV variables # 從指定文件讀取變量值 --expose=[] Expose a port from the container without publishing it to your host # 指定對外提供服務端口 -h, --hostname="" Container host name # 設置容器主機名 -i, --interactive=false Keep stdin open even if not attached # 保持標準輸出開啟即使沒有 attached --link=[] Add link to another container (name:alias) # 添加鏈接到另外一個容器 --lxc-conf=[] (lxc exec-driver only) Add custom lxc options --lxc-conf="lxc.cgroup.cpuset.cpus = 0,1" -m, --memory="" Memory limit (format: <number><optional unit>, where unit = b, k, m or g) # 內存限制 --name="" Assign a name to the container # 設置容器名 --net="bridge" Set the Network mode for the container # 設置容器網絡模式 'bridge': creates a new network stack for the container on the docker bridge 'none': no networking for this container 'container:<name|id>': reuses another container network stack 'host': use the host network stack inside the container. Note: the host mode gives the container full access to local system services such as D-bus and is therefore considered insecure.-P, --publish-all=false Publish all exposed ports to the host interfaces # 自動映射容器對外提供服務的端口 -p, --publish=[] Publish a container's port to the host # 指定端口映射 format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort (use 'docker port' to see the actual mapping) --privileged=false Give extended privileges to this container # 提供更多的權限給容器 --restart="" Restart policy to apply when a container exits (no, on-failure[:max-retry], always) --rm=false Automatically remove the container when it exits (incompatible with -d) # 如果容器退出自動移除和 -d 選項沖突 --security-opt=[] Security Options--sig-proxy=true Proxify received signals to the process (even in non-tty mode). SIGCHLD is not proxied.-t, --tty=false Allocate a pseudo-tty # 分配偽終端 -u, --user="" Username or UID # 指定運行容器的用戶 uid 或者用戶名 -v, --volume=[] Bind mount a volume (e.g., from the host: -v /host:/container, from docker: -v /container) # 掛載卷 --volumes-from=[] Mount volumes from the specified container(s) # 從指定容器掛載卷 -w, --workdir="" Working directory inside the container # 指定容器工作目錄

    示例:

    $ sudo docker images ubuntu REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.04 e54ca5efa2e9 4 weeks ago 276.5 MB ... ... # 創建一個 cpu 優先級為 100,內存限制 512MB,主機名為 test1, 名為 docker_test1 后臺運行 bash 的容器 a424ca613c9f2247cd3ede95adfbaf8d28400cbcb1d5f9b69a7b56f97b2b52e5 $ sudo docker run -t -i -c 100 -m 512MB -h test1 -d --name="docker_test1" ubuntu /bin/bash $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a424ca613c9f ubuntu:14.04 /bin/bash 6 seconds ago Up 5 seconds docker_test1 $ sudo docker attach docker_test1 root@test1:/# pwd / root@test1:/# exit exit

    關于cpu優先級:

    By default all groups have 1024 shares. A group with 100 shares will get a ~10% portion of the CPU time -?archlinux cgroups

    4.8 docker start|stop|kill... ...

    docker start | stop | kill | restart | pause?| unpause | rm | commit | inspect | logs

    • docker start CONTAINER [CONTAINER...]? ? # 運行一個或多個停止的容器
    • docker stop CONTAINER [CONTAINER...]? ? # 停掉一個或多個運行的容器-t選項可指定超時時間
    • docker kill [OPTIONS] CONTAINER [CONTAINER...]? ? ? ? ? # 默認 kill 發送 SIGKILL 信號-s可以指定發送 kill 信號類型
    • docker restart [OPTIONS] CONTAINER [CONTAINER...]? ? # 重啟一個或多個運行的容器-t選項可指定超時時間
    • docker pause CONTAINER? ? ? ? ? ? # 暫停一個容器,方便 commit
    • docker unpause CONTAINER? ? ? ? # 繼續暫停的容器
    • docker rm [OPTIONS] CONTAINER [CONTAINER...]? ? ? ? # 移除一個或多個容器
      • -f, --force=false Force removal of running container
      • -l, --link=false Remove the specified link and not the underlying container
      • -v, --volumes=false Remove the volumes associated with the container
    • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]? ? ? ? # 提交指定容器為鏡像
      • -a, --author="" Author (e.g., "John Hannibal Smith?hannibal@a-team.com")
      • -m, --message="" Commit message
      • -p, --pause=true Pause container during commit? ? ? ? # 默認 commit 是暫停狀態
    • docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]? ? ? ? # 查看容器或者鏡像的詳細信息
    • docker logs CONTAINER? ? ? ? ? ? ? ? ? ? ? ? ? ? # 輸出指定容器日志信息
      • -f, --follow=false Follow log output? ? ? ? # 類似 tail -f
      • -t, --timestamps=false Show timestamps
      • --tail="all" Output the specified number of lines at the end of logs (defaults to all logs)

    參考文檔:Docker Run Reference

    4.9 Docker 1.3 新增特性和命令

    Digital Signature Verification

    Docker 1.3 版本將使用數字簽名自動驗證所有官方庫的來源和完整性,如果一個官方鏡像被篡改或者被破壞,目前 Docker 只會對這種情況發出警告而并不阻止容器的運行。

    Inject new processes withdocker exec

    docker exec --helpUsage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...] Run a command in an existing container-d, --detach=false Detached mode: run command in the background-i, --interactive=false Keep STDIN open even if not attached-t, --tty=false Allocate a pseudo-TTY

    為了簡化調試,可以使用docker exec命令通過 Docker API 和 CLI 在運行的容器上運行程序。

    $ docker exec -it ubuntu_bash bash

    上例將在容器 ubuntu_bash 中創建一個新的 Bash 會話。

    Tune container lifecycles withdocker create

    我們可以通過docker run <image name>命令創建一個容器并運行其中的程序,因為有很多用戶要求創建容器的時候不啟動容器,所以docker create應運而生了。

    $ docker create -t -i fedora bash 6d8af538ec541dd581ebc2a24153a28329acb5268abe5ef868c1f1a261221752

    上例創建了一個可寫的容器層 (并且打印出容器 ID),但是并不運行它,可以使用以下命令運行該容器:

    $ docker start -a -i 6d8af538ec5 bash-4.2#

    Security Options

    通過--security-opt選項,運行容器時用戶可自定義 SELinux 和 AppArmor 卷標和配置。

    $ docker run --security-opt label:type:svirt_apache -i -t centos \ bash

    上例只允許容器監聽在 Apache 端口,這個選項的好處是用戶不需要運行 docker 的時候指定--privileged選項,降低安全風險。

    參考文檔:Docker 1.3: signed images, process injection, security options, Mac shared directories

    4.10 Docker 1.5 新特性

    參考文檔:Docker 1.5 新特性

    五、Docker 端口映射

    # Find IP address of container with ID <container_id> 通過容器 id 獲取 ip $ sudo docker inspect <container_id> | grep IPAddress | cut -d ’"’ -f 4

    無論如何,這些 ip 是基于本地系統的并且容器的端口非本地主機是訪問不到的。此外,除了端口只能本地訪問外,對于容器的另外一個問題是這些 ip 在容器每次啟動的時候都會改變。

    Docker 解決了容器的這兩個問題,并且給容器內部服務的訪問提供了一個簡單而可靠的方法。Docker 通過端口綁定主機系統的接口,允許非本地客戶端訪問容器內部運行的服務。為了簡便的使得容器間通信,Docker 提供了這種連接機制。

    5.1 自動映射端口

    -P 使用時需要指定 --expose 選項,指定需要對外提供服務的端口

    $ sudo docker run -t -P --expose 22 --name server ubuntu:14.04

    使用 docker run -P 自動綁定所有對外提供服務的容器端口,映射的端口將會從沒有使用的端口池中 (49000..49900) 自動選擇,你可以通過 docker ps、docker inspect <container_id>或者 docker port <container_id> <port> 確定具體的綁定信息。

    5.2 綁定端口到指定接口

    基本語法

    $ sudo docker run -p [([<host_interface>:[host_port]])|(<host_port>):]<container_port>[/udp] <image> <cmd>

    默認不指定綁定 ip 則監聽所有網絡接口。

    綁定 TCP 端口

    # Bind TCP port 8080 of the container to TCP port 80 # on 127.0.0.1 of the host machine. $ sudo docker run -p 127.0.0.1:80:8080 <image> <cmd> # Bind TCP port 8080 of the container to a dynamically # allocated TCP port on 127.0.0.1 of the host machine. $ sudo docker run -p 127.0.0.1::8080 <image> <cmd> # Bind TCP port 8080 of the container to TCP port 80 # on all available interfaces of the host machine. $ sudo docker run -p 80:8080 <image> <cmd> # Bind TCP port 8080 of the container to a dynamically # allocated TCP port on all available interfaces $ sudo docker run -p 8080 <image> <cmd>

    綁定 UDP 端口

    # Bind UDP port 5353 of the container to UDP port 53 # on 127.0.0.1 of the host machine. $ sudo docker run -p 127.0.0.1:53:5353/udp <image> <cmd>

    六、Docker 網絡配置

    圖:?Docker - container and lightweight virtualization

    Dokcer 通過使用 Linux 橋接提供容器之間的通信,docker0 橋接接口的目的就是方便 Docker 管理。當 Docker daemon 啟動時需要做以下操作:

    • creates the docker0 bridge if not present? ? ? ? # 如果 docker0 不存在則創建
    • searches for an IP address range which doesn’t overlap with an existing route? ? # 搜索一個與當前路由不沖突的 ip 段
    • picks an IP in the selected range? ? ? ? ? ? ? #? 在確定的范圍中選擇 ip
    • assigns this IP to the docker0 bridge? ? ? ? #? 綁定 ip 到 docker0

    6.1 Docker 四種網絡模式

    四種網絡模式摘自?Docker 網絡詳解及 pipework 源碼解讀與實踐

    docker run 創建 Docker 容器時,可以用 --net 選項指定容器的網絡模式,Docker 有以下 4 種網絡模式:

    • host 模式,? ? ? ? 使用 --net=host 指定。

      ? ? ? ? 如果啟動容器的時候使用 host 模式,那么這個容器將不會獲得一個獨立的 Network Namespace,而是和宿主機共用一個 Network Namespace。容器將不會虛擬出自己的網卡,配置自己的 IP 等,而是使用宿主機的 IP 和端口。

      ? ? ? ? 例如,我們在 10.10.101.105/24 的機器上用 host 模式啟動一個含有 web 應用的 Docker 容器,監聽 tcp 80 端口。當我們在容器中執行任何類似 ifconfig 命令查看網絡環境時,看到的都是宿主機上的信息。而外界訪問容器中的應用,則直接使用 10.10.101.105:80 即可,不用任何 NAT 轉換,就如直接跑在宿主機中一樣。但是,容器的其他方面,如文件系統、進程列表等還是和宿主機隔離的。

    • container 模式,使用 --net=container:NAMEorID 指定。
      ? ? ? ? 這個模式指定新創建的容器和已經存在的一個容器共享一個 Network Namespace,而不是和宿主機共享。新創建的容器不會創建自己的網卡,配置自己的 IP,而是和一個指定的容器共享 IP、端口范圍等。同樣,兩個容器除了網絡方面,其他的如文件系統、進程列表等還是隔離的。兩個容器的進程可以通過 lo 網卡設備通信。
    • none 模式,? ? ? ?使用 --net=none 指定。
      ? ? ? ? 這個模式和前兩個不同。在這種模式下,Docker 容器擁有自己的 Network Namespace,但是,并不為 Docker容器進行任何網絡配置。也就是說,這個 Docker 容器沒有網卡、IP、路由等信息。需要我們自己為 Docker 容器添加網卡、配置 IP 等。
    • bridge 模式,? ? ?使用 --net=bridge 指定,默認設置。

    bridge模式

    圖:The Container World | Part 2 Networking

    bridge 模式是 Docker 默認的網絡設置,此模式會為每一個容器分配 Network Namespace、設置 IP 等,并將一個主機上的 Docker 容器連接到一個虛擬網橋上。當 Docker server 啟動時,會在主機上創建一個名為 docker0 的虛擬網橋,此主機上啟動的 Docker 容器會連接到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了一個二層網絡中。接下來就要為容器分配 IP 了,Docker 會從 RFC1918 所定義的私有 IP 網段中,選擇一個和宿主機不同的IP地址和子網分配給 docker0,連接到 docker0 的容器就從這個子網中選擇一個未占用的 IP 使用。如一般 Docker 會使用 172.17.0.0/16 這個網段,并將 172.17.42.1/16 分配給 docker0 網橋(在主機上使用 ifconfig 命令是可以看到 docker0 的,可以認為它是網橋的管理接口,在宿主機上作為一塊虛擬網卡使用)

    6.2 列出當前主機網橋

    $ sudo brctl show # brctl 工具依賴 bridge-utils 軟件包 bridge name bridge id STP enabled interfaces docker0 8000.000000000000 no

    6.3 查看當前 docker0 ip

    $ sudo ifconfig docker0 docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0

    在容器運行時,每個容器都會分配一個特定的虛擬機口并橋接到 docker0。每個容器都會配置同 docker0 ip 相同網段的專用 ip 地址,docker0 的 IP 地址被用于所有容器的默認網關。

    6.4 運行一個容器

    $ sudo docker run -t -i -d ubuntu /bin/bash 52f811c5d3d69edddefc75aff5a4525fc8ba8bcfa1818132f9dc7d4f7c7e78b4 $ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.fef213db5a66 no vethQCDY1N

    以上, docker0 扮演著 52f811c5d3d6 container 這個容器的虛擬接口 vethQCDY1N interface 橋接的角色。

    使用特定范圍的 IP

    Docker 會嘗試尋找沒有被主機使用的 ip 段,盡管它適用于大多數情況下,但是它不是萬能的,有時候我們還是需要對 ip 進一步規劃。Docker 允許你管理 docker0 橋接或者通過-b選項自定義橋接網卡,需要安裝bridge-utils軟件包。

    基本步驟如下:

    • ensure Docker is stopped? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 確保 docker 的進程是停止的
    • create your own bridge (bridge0 for example)? ? ? ? # 創建自定義網橋
    • assign a specific IP to this bridge? ? ? ? ? ? ? ? ? ? ? ? ? ?# 給網橋分配特定的 ip
    • start Docker with the -b=bridge0 parameter? ? ? ? ? ?# 以 -b 的方式指定網橋
    # Stopping Docker and removing docker0 $ sudo service docker stop $ sudo ip link set dev docker0 down $ sudo brctl delbr docker0 # Create our own bridge $ sudo brctl addbr bridge0 $ sudo ip addr add 192.168.5.1/24 dev bridge0 $ sudo ip link set dev bridge0 up # Confirming that our bridge is up and running $ ip addr show bridge04: bridge0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state UP group default link/ether 66:38:d0:0d:76:18 brd ff:ff:ff:ff:ff:ff inet 192.168.5.1/24 scope global bridge0 valid_lft forever preferred_lft forever # Tell Docker about it and restart (on Ubuntu) $ echo 'DOCKER_OPTS="-b=bridge0"' >> /etc/default/docker $ sudo service docker start

    參考文檔:?Network Configuration

    6.5 不同主機間容器通信

    不同容器之間的通信可以借助于 pipework 這個工具:

    $ git clone https://github.com/jpetazzo/pipework.git$ sudo cp -rp pipework/pipework /usr/local/bin/

    安裝相應依賴軟件

    $ sudo apt-get install iputils-arping bridge-utils -y

    橋接網絡

    橋接網絡可以參考?日常問題處理 Tips?關于橋接的配置說明,這里不再贅述。

    # brctl showbridge name bridge id STP enabled interfacesbr0 8000.000c291412cd no eth0docker0 8000.56847afe9799 no vetheb48029

    可以刪除 docker0,直接把 docker 的橋接指定為 br0。也可以保留使用默認的配置,這樣單主機容器之間的通信可以通過 docker0,而跨主機不同容器之間通過 pipework 新建 docker 容器的網卡橋接到 br0,這樣跨主機容器之間就可以通信了。

    • ubuntu
    $ sudo service docker stop$ sudo ip link set dev docker0 down$ sudo brctl delbr docker0$ echo 'DOCKER_OPTS="-b=br0"' >> /etc/default/docker$ sudo service docker start
    • CentOS 7/RHEL 7
    $ sudo systemctl stop docker$ sudo ip link set dev docker0 down$ sudo brctl delbr docker0$ cat /etc/sysconfig/docker | grep 'OPTIONS='OPTIONS=--selinux-enabled -b=br0 -H fd://$ sudo systemctl start docker

    pipework

    不同容器之間的通信可以借助于 pipework 這個工具給 docker 容器新建虛擬網卡并綁定 IP 橋接到 br0

    $ git clone https://github.com/jpetazzo/pipework.git$ sudo cp -rp pipework/pipework /usr/local/bin/$ pipeworkSyntax:pipework <hostinterface> [-i containerinterface] <guest> <ipaddr>/<subnet>[@default_gateway] [macaddr][@vlan]pipework <hostinterface> [-i containerinterface] <guest> dhcp [macaddr][@vlan]pipework --wait [-i containerinterface]

    如果刪除了默認的 docker0 橋接,把 docker 默認橋接指定到了 br0,則最好在創建容器的時候加上--net=none,防止自動分配的 IP 在局域網中有沖突。

    $ sudo docker run --rm -ti --net=none ubuntu:14.04 /bin/bash root@a46657528059:/# $ # Ctrl-P + Ctrl-Q 回到宿主機 shell,容器 detach 狀態 $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a46657528059 ubuntu:14.04 "/bin/bash" 4 minutes ago Up 4 minutes hungry_lalande $ sudo pipework br0 -i eth0 a46657528059 192.168.115.10/24@192.168.115.2 # 默認不指定網卡設備名,則默認添加為 eth1 # 另外 pipework 不能添加靜態路由,如果有需求則可以在 run 的時候加上 --privileged=true 權限在容器中手動添加, # 但這種安全性有缺陷,可以通過 ip netns 操作 $ sudo docker attach a46657528059 root@a46657528059:/# ifconfig eth0 eth0 Link encap:Ethernet HWaddr 86:b6:6b:e8:2e:4d inet addr:192.168.115.10 Bcast:0.0.0.0 Mask:255.255.255.0inet6 addr: fe80::84b6:6bff:fee8:2e4d/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:8 errors:0 dropped:0 overruns:0 frame:0TX packets:9 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:648 (648.0 B) TX bytes:690 (690.0 B)root@a46657528059:/# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.115.2 0.0.0.0 UG 0 0 0 eth0 192.168.115.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

    使用 ip netns 添加靜態路由,避免創建容器使用 --privileged=true 選項造成一些不必要的安全問題:

    $ docker inspect --format="{{ .State.Pid }}" a46657528059 # 獲取指定容器 pid 6350 $ sudo ln -s /proc/6350/ns/net /var/run/netns/6350 $ sudo ip netns exec 6350 ip route add 192.168.0.0/16 dev eth0 via 192.168.115.2 $ sudo ip netns exec 6350 ip route # 添加成功 192.168.0.0/16 via 192.168.115.2 dev eth0 ... ...

    在其它宿主機進行相應的配置,新建容器并使用 pipework 添加虛擬網卡橋接到 br0,測試通信情況即可。

    另外,pipework 可以創建容器的 vlan 網絡,這里不作過多的介紹了,官方文檔已經寫的很清楚了,可以查看以下兩篇文章:

    • Pipework 官方文檔
    • Docker 網絡詳解及 pipework 源碼解讀與實踐

    七、Dockerfile

    Docker 可以通過 Dockerfile 的內容來自動構建鏡像。Dockerfile 是一個包含創建鏡像所有命令的文本文件,通過docker build命令可以根據 Dockerfile 的內容構建鏡像,在介紹如何構建之前先介紹下 Dockerfile 的基本語法結構。

    Dockerfile 有以下指令選項:

    • FROM
    • MAINTAINER
    • RUN
    • CMD
    • EXPOSE
    • ENV
    • ADD
    • COPY
    • ENTRYPOINT
    • VOLUME
    • USER
    • WORKDIR
    • ONBUILD

    7.1 FROM

    用法:

    FROM <image>

    或者

    FROM <image>
    • FROM 指定構建鏡像的基礎源鏡像,如果本地沒有指定的鏡像,則會自動從 Docker 的公共庫 pull 鏡像下來。
    • FROM 必須是 Dockerfile 中非注釋行的第一個指令,即一個 Dockerfile 從 FROM 語句開始。
    • FROM 可以在一個 Dockerfile 中出現多次,如果有需求在一個 Dockerfile 中創建多個鏡像。
    • 如果 FROM 語句沒有指定鏡像標簽,則默認使用 latest 標簽。

    7.2 MAINTAINER

    用法:

    MAINTAINER <name>

    指定創建鏡像的用戶

    RUN 有兩種使用方式

    • RUN
    • RUN?"executable", "param1", "param2"

    每條 RUN 指令將在當前鏡像基礎上執行指定命令,并提交為新的鏡像,后續的RUN都在之前RUN提交后的鏡像為基礎,鏡像是分層的,可以通過一個鏡像的任何一個歷史提交點來創建,類似源碼的版本控制。

    exec 方式會被解析為一個 JSON 數組,所以必須使用雙引號而不是單引號。exec 方式不會調用一個命令 shell,所以也就不會繼承相應的變量,如:

    RUN [ "echo", "$HOME" ]

    這種方式是不會達到輸出 HOME 變量的,正確的方式應該是這樣的

    RUN [ "sh", "-c", "echo", "$HOME" ]

    RUN 產生的緩存在下一次構建的時候是不會失效的,會被重用,可以使用 --no-cache 選項,即 docker build --no-cache,如此便不會緩存。

    7.3 CMD

    CMD 有三種使用方式:

    • CMD?"executable","param1","param2"
    • CMD?"param1","param2"
    • CMD command param1 param2 (shell form)

    CMD 指定在 Dockerfile 中只能使用一次,如果有多個,則只有最后一個會生效。

    CMD 的目的是為了在啟動容器時提供一個默認的命令執行選項。如果用戶啟動容器時指定了運行的命令,則會覆蓋掉 CMD 指定的命令。

    CMD 會在啟動容器的時候執行,build 時不執行,而 RUN 只是在構建鏡像的時候執行,后續鏡像構建完成之后,啟動容器就與 RUN 無關了,

    這個初學者容易弄混這個概念,這里簡單注解一下。

    7.4 EXPOSE

    EXPOSE <port> [<port>...]

    告訴 Docker 服務端容器對外映射的本地端口,需要在 docker run 的時候使用-p或者-P選項生效。

    7.5 ENV

    ENV <key> <value> # 只能設置一個變量ENV <key>=<value> ... # 允許一次設置多個變量

    指定一個環節變量,會被后續RUN指令使用,并在容器運行時保留。

    例子:

    ENV myName="John Doe" myDog=Rex\ The\ Dog \myCat=fluffy

    等同于

    ENV myName John DoeENV myDog Rex The DogENV myCat fluffy

    7.6 ADD

    ADD <src>... <dest>

    ADD 復制本地主機文件、目錄或者遠程文件 URLS 從 并且添加到容器指定路徑中 。

    支持通過 GO 的正則模糊匹配,具體規則可參見?Go filepath.Match

    ADD hom* /mydir/ # adds all files starting with "hom"ADD hom?.txt /mydir/ # ? is replaced with any single character
    • 路徑必須是絕對路徑,如果 不存在,會自動創建對應目錄
    • 路徑必須是 Dockerfile 所在路徑的相對路徑
    • 如果是一個目錄,只會復制目錄下的內容,而目錄本身則不會被復制

    7.7 COPY

    COPY <src>... <dest>

    COPY 復制新文件或者目錄從 并且添加到容器指定路徑中 。用法同 ADD,唯一的不同是不能指定遠程文件 URLS。

    7.8 ENTRYPOINT

    • ENTRYPOINT?"executable", "param1", "param2"
    • ENTRYPOINT command param1 param2 (shell form)

    配置容器啟動后執行的命令,并且不可被 docker run 提供的參數覆蓋,而 CMD 是可以被覆蓋的。如果需要覆蓋,則可以使用 docker run --entrypoint 選項。

    每個 Dockerfile 中只能有一個ENTRYPOINT,當指定多個時,只有最后一個生效。

    Exec form ENTRYPOINT 例子

    通過 ENTRYPOINT 使用 exec form 方式設置穩定的默認命令和選項,而使用 CMD 添加默認之外經常被改動的選項。

    FROM ubuntuENTRYPOINT ["top", "-b"]CMD ["-c"]

    通過 Dockerfile 使用 ENTRYPOINT 展示前臺運行 Apache 服務

    FROM debian:stableRUN apt-get update && apt-get install -y --force-yes apache2EXPOSE 80 443VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

    Shell form ENTRYPOINT 例子

    這種方式會在 /bin/sh -c 中執行,會忽略任何 CMD 或者 docker run 命令行選項,為了確保 docker stop 能夠停止長時間運行 ENTRYPOINT 的容器,確保執行的時候使用 exec 選項。

    FROM ubuntuENTRYPOINT exec top -b

    如果在 ENTRYPOINT 忘記使用 exec 選項,則可以使用 CMD 補上:

    FROM ubuntuENTRYPOINT top -bCMD --ignored-param1 # --ignored-param2 ... --ignored-param3 ... 依此類推

    7.9 VOLUME

    VOLUME ["/data"]

    創建一個可以從本地主機或其他容器掛載的掛載點,后續具體介紹。

    7.10 USER

    USER daemon

    指定運行容器時的用戶名或 UID,后續的RUN、CMD、ENTRYPOINT也會使用指定用戶。

    7.11 WORKDIR

    WORKDIR /path/to/workdir

    為后續的RUN、CMD、ENTRYPOINT指令配置工作目錄。可以使用多個WORKDIR指令,后續命令如果參數是相對路徑,則會基于之前命令指定的路徑。

    WORKDIR /aWORKDIR bWORKDIR cRUN pwd

    最終路徑是/a/b/c。

    WORKDIR指令可以在ENV設置變量之后調用環境變量:

    ENV DIRPATH /pathWORKDIR $DIRPATH/$DIRNAME

    最終路徑則為 /path/$DIRNAME。

    7.12 ONBUILD

    ONBUILD [INSTRUCTION]

    配置當所創建的鏡像作為其它新創建鏡像的基礎鏡像時,所執行的操作指令。

    例如,Dockerfile 使用如下的內容創建了鏡像 image-A:

    [...]ONBUILD ADD . /app/srcONBUILD RUN /usr/local/bin/python-build --dir /app/src[...]

    如果基于 image-A 創建新的鏡像時,新的 Dockerfile 中使用 FROM image-A 指定基礎鏡像時,會自動執行 ONBUILD 指令內容,等價于在后面添加了兩條指令。

    # Automatically run the followingADD . /app/srcRUN /usr/local/bin/python-build --dir /app/src

    使用ONBUILD指令的鏡像,推薦在標簽中注明,例如 ruby:1.9-onbuild。

    7.13 Dockerfile Examples

    # Nginx # # VERSION 0.0.1FROM ubuntu MAINTAINER Victor Vieux <victor@docker.com>RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server# Firefox over VNC ## VERSION 0.3FROM ubuntu# Install vnc, xvfb in order to create a 'fake' display and firefox RUN apt-get update && apt-get install -y x11vnc xvfb firefox RUN mkdir ~/.vnc# Setup a password RUN x11vnc -storepasswd 1234 ~/.vnc/passwd# Autostart firefox (might not be the best way, but it does the trick) RUN bash -c 'echo "firefox" >> /.bashrc'EXPOSE 5900 CMD ["x11vnc", "-forever", "-usepw", "-create"]# Multiple images example # # VERSION 0.1FROM ubuntu RUN echo foo > bar # Will output something like ===> 907ad6c2736fFROM ubuntu RUN echo moo > oink # Will output something like ===> 695d7793cbe4# You?ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with # /oink.

    7.14 docker build

    $ docker build --helpUsage: docker build [OPTIONS] PATH | URL | -Build a new image from the source code at PATH# 移除過渡容器,即使構建失敗 --force-rm=false Always remove intermediate containers, even after unsuccessful builds --no-cache=false Do not use cache when building the image # 不實用 cache-q, --quiet=false Suppress the verbose output generated by the containers# 構建成功后移除過渡層容器 --rm=true Remove intermediate containers after a successful build-t, --tag="" Repository name (and optionally a tag) to be applied to the resulting image in case of success

    參考文檔:Dockerfile Reference

    7.15 dockerfile 最佳實踐

    • 使用.dockerignore文件

    為了在docker build過程中更快上傳和更加高效,應該使用一個.dockerignore文件用來排除構建鏡像時不需要的文件或目錄。例如,除非.git在構建過程中需要用到,否則你應該將它添加到.dockerignore文件中,這樣可以節省很多時間。

    • 避免安裝不必要的軟件包

    為了降低復雜性、依賴性、文件大小以及構建時間,應該避免安裝額外的或不必要的包。例如,不需要在一個數據庫鏡像中安裝一個文本編輯器。

    • 每個容器都跑一個進程

    在大多數情況下,一個容器應該只單獨跑一個程序。解耦應用到多個容器使其更容易橫向擴展和重用。如果一個服務依賴另外一個服務,可以參考?Linking Containers Together。

    • 最小化層

    我們知道每執行一個指令,都會有一次鏡像的提交,鏡像是分層的結構,對于Dockerfile,應該找到可讀性和最小化層之間的平衡。

    • 多行參數排序

    如果可能,通過字母順序來排序,這樣可以避免安裝包的重復并且更容易更新列表,另外可讀性也會更強,添加一個空行使用\換行:

    RUN apt-get update && apt-get install -y \bzr \cvs \git \mercurial \subversion
    • 創建緩存

    鏡像構建過程中會按照Dockerfile的順序依次執行,每執行一次指令 Docker 會尋找是否有存在的鏡像緩存可復用,如果沒有則創建新的鏡像。如果不想使用緩存,則可以在docker build時添加--no-cache=true選項。

    從基礎鏡像開始就已經在緩存中了,下一個指令會對比所有的子鏡像尋找是否執行相同的指令,如果沒有則緩存失效。在大多數情況下只對比Dockerfile指令和子鏡像就足夠了。ADD和COPY指令除外,執行ADD和COPY時存放到鏡像的文件也是需要檢查的,完成一個文件的校驗之后再利用這個校驗在緩存中查找,如果檢測的文件改變則緩存失效。RUN apt-get -y update命令只檢查命令是否匹配,如果匹配就不會再執行更新了。

    為了有效地利用緩存,你需要保持你的 Dockerfile 一致,并且盡量在末尾修改。

    Dockerfile 指令

    • FROM: 只要可能就使用官方鏡像庫作為基礎鏡像
    • RUN: 為保持可讀性、方便理解、可維護性,把長或者復雜的RUN語句使用\分隔符分成多行
      • 不建議RUN apt-get update獨立成行,否則如果后續包有更新,那么也不會再執行更新
      • 避免使用RUN apt-get upgrade或者dist-upgrade,很多必要的包在一個非privileged權限的容器里是無法升級的。如果知道某個包更新,使用apt-get install -y xxx
      • 標準寫法
        • RUN apt-get update && apt-get install -y package-bar package-foo

    例子:

    RUN apt-get update && apt-get install -y \aufs-tools \automake \btrfs-tools \build-essential \curl \dpkg-sig \git \iptables \libapparmor-dev \libcap-dev \libsqlite3-dev \lxc=1.0* \mercurial \parallel \reprepro \ruby1.9.1 \ruby1.9.1-dev \s3cmd=1.1.0*
    • CMD: 推薦使用 CMD [“executable”, “param1”, “param2”…]這種格式,CMD [“param”, “param”]則配合ENTRYPOINT使用
    • EXPOSE: Dockerfile 指定要公開的端口,使用docker run時指定映射到宿主機的端口即可
    • ENV: 為了使新的軟件更容易運行,可以使用ENV更新PATH變量。如ENV PATH /usr/local/nginx/bin:$PATH確保CMD ["nginx"]即可運行

    ENV也可以這樣定義變量:

    ENV PG_MAJOR 9.3 ENV PG_VERSION 9.3.4 RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && … ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
    • ADDorCOPY:ADD比COPY多一些特性「tar 文件自動解包和支持遠程 URL」,不推薦添加遠程 URL

    如 不推薦 這種方式:

    ADD http://example.com/big.tar.xz /usr/src/things/RUN tar -xJf /usr/src/things/big.tar.xz -C /usr/src/thingsRUN make -C /usr/src/things all

    推薦使用 curl 或者 wget 替換,使用如下方式:

    RUN mkdir -p /usr/src/things \&& curl -SL http://example.com/big.tar.gz \| tar -xJC /usr/src/things \&& make -C /usr/src/things all

    如果不需要添加 tar 文件,推薦使用COPY。

    參考文檔:

    • Best practices for writing Dockerfiles
    • Dockerfile最佳實踐(一)
    • Dockerfile最佳實踐(二)

    八、容器數據管理

    docker管理數據的方式有兩種:

    • 數據卷
    • 數據卷容器

    8.1 數據卷

    數據卷是一個或多個容器專門指定繞過Union File System的目錄,為持續性或共享數據提供一些有用的功能:

    • 數據卷可以在容器間共享和重用
    • 數據卷數據改變是直接修改的
    • 數據卷數據改變不會被包括在容器中
    • 數據卷是持續性的,直到沒有容器使用它們

    添加一個數據卷

    你可以使用-v選項添加一個數據卷,或者可以使用多次-v選項為一個 docker 容器運行掛載多個數據卷。

    $ sudo docker run --name data -v /data -t -i ubuntu:14.04 /bin/bash # 創建數據卷綁定到到新建容器,新建容器中會創建 /data 數據卷 bash-4.1# ls -ld /data/ drwxr-xr-x 2 root root 4096 Jul 23 06:59 /data/bash-4.1# df -Th Filesystem Type Size Used Avail Use% Mounted on ... ...ext4 91G 4.6G 82G 6% /data

    創建的數據卷可以通過docker inspect獲取宿主機對應路徑

    $ sudo docker inspect data ... ... "Volumes": { "/data": "/var/lib/docker/vfs/dir/151de401d268226f96d824fdf444e77a4500aed74c495de5980c807a2ffb7ea9" }, # 可以看到創建的數據卷宿主機路徑 ... ...

    或者直接指定獲取

    $ sudo docker inspect --format="{{ .Volumes }}" data map[/data: /var/lib/docker/vfs/dir/151de401d268226f96d824fdf444e77a4500aed74c495de5980c807a2ffb7ea9]

    掛載宿主機目錄為一個數據卷

    -v 選項除了可以創建卷,也可以掛載當前主機的一個目錄到容器中。

    $ sudo docker run --name web -v /source/:/web -t -i ubuntu:14.04 /bin/bash bash-4.1# ls -ld /web/ drwxr-xr-x 2 root root 4096 Jul 23 06:59 /web/ bash-4.1# df -Th ... ...ext4 91G 4.6G 82G 6% /web bash-4.1# exit

    默認掛載卷是可讀寫的,可以在掛載時指定只讀

    $ sudo docker run --rm --name test -v /source/:/test:ro -t -i ubuntu:14.04 /bin/bash

    8.2 創建和掛載一個數據卷容器

    如果你有一些持久性的數據并且想在容器間共享,或者想用在非持久性的容器上,最好的方法是創建一個數據卷容器,然后從此容器上掛載數據。

    創建數據卷容器

    $ sudo docker run -t -i -d -v /test --name test ubuntu:14.04 echo hello

    使用--volumes-from選項在另一個容器中掛載 /test 卷。不管 test 容器是否運行,其它容器都可以掛載該容器數據卷,當然如果只是單獨的數據卷是沒必要運行容器的。

    $ sudo docker run -t -i -d --volumes-from test --name test1 ubuntu:14.04 /bin/bash

    添加另一個容器

    $ sudo docker run -t -i -d --volumes-from test --name test2 ubuntu:14.04 /bin/bash

    也可以繼承其它掛載有 /test 卷的容器

    $ sudo docker run -t -i -d --volumes-from test1 --name test3 ubuntu:14.04 /bin/bash

    8.3 備份、恢復或遷移數據卷

    備份

    $ sudo docker run --rm --volumes-from test -v $(pwd):/backup ubuntu:14.04 tar cvf /backup/test.tar /test tar: Removing leading `/' from member names /test/ /test/b /test/d /test/c /test/a

    啟動一個新的容器并且從test容器中掛載卷,然后掛載當前目錄到容器中為 backup,并備份 test 卷中所有的數據為 test.tar,執行完成之后刪除容器--rm,此時備份就在當前的目錄下,名為test.tar。

    $ ls # 宿主機當前目錄下產生了 test 卷的備份文件 test.tar test.tar

    恢復

    你可以恢復給同一個容器或者另外的容器,新建容器并解壓備份文件到新的容器數據卷

    $ sudo docker run -t -i -d -v /test --name test4 ubuntu:14.04 /bin/bash $ sudo docker run --rm --volumes-from test4 -v $(pwd):/backup ubuntu:14.04 tar xvf /backup/test.tar -C / # 恢復之前的文件到新建卷中,執行完后自動刪除容器 test/ test/b test/d test/c test/a

    8.4 刪除 Volumes

    Volume 只有在下列情況下才能被刪除:

    • docker rm -v刪除容器時添加了-v選項
    • docker run --rm運行容器時添加了--rm選項

    否則,會在/var/lib/docker/vfs/dir目錄中遺留很多不明目錄。

    參考文檔:

    • Managing Data in Containers
    • 深入理解Docker Volume(一)
    • 深入理解Docker Volume(二)

    九、鏈接容器

    docker 允許把多個容器連接在一起,相互交互信息。docker 鏈接會創建一種容器父子級別的關系,其中父容器可以看到其子容器提供的信息。

    9.1 容器命名

    在創建容器時,如果不指定容器的名字,則默認會自動創建一個名字,這里推薦給容器命名:

    • 1、給容器命名方便記憶,如命名運行 web 應用的容器為 web
    • 2、為 docker 容器提供一個參考,允許方便其他容器調用,如把容器 web 鏈接到容器 db

    可以通過--name選項給容器自定義命名:

    $ sudo docker run -d -t -i --name test ubuntu:14.04 bash$ sudo docker inspect --format="{{ .Nmae }}" test/test

    注:容器名稱必須唯一,即你只能命名一個叫test的容器。如果你想復用容器名,則必須在創建新的容器前通過docker rm刪除舊的容器或者創建容器時添加--rm選項。

    9.2 鏈接容器

    鏈接允許容器間安全通信,使用--link選項創建鏈接。

    $ sudo docker run -d --name db training/postgres

    基于 training/postgres 鏡像創建一個名為 db 的容器,然后下面創建一個叫做 web 的容器,并且將它與 db 相互連接在一起

    $ sudo docker run -d -P --name web --link db:db training/webapp python app.py

    --link <name or id>:alias選項指定鏈接到的容器。

    查看 web 容器的鏈接關系:

    $ sudo docker inspect -f "{{ .HostConfig.Links }}" web[/db:/web/db]

    可以看到 web 容器被鏈接到 db 容器為/web/db,這允許 web 容器訪問 db 容器的信息。

    容器之間的鏈接實際做了什么?一個鏈接允許一個源容器提供信息訪問給一個接收容器。在本例中,web 容器作為一個接收者,允許訪問源容器 db 的相關服務信息。Docker 創建了一個安全隧道而不需要對外公開任何端口給外部容器,因此不需要在創建容器的時候添加-p或-P指定對外公開的端口,這也是鏈接容器的最大好處,本例為 PostgreSQL 數據庫。

    Docker 主要通過以下兩個方式提供連接信息給接收容器:

    • 環境變量
    • 更新/etc/hosts文件

    環境變量

    當兩個容器鏈接,Docker 會在目標容器上設置一些環境變量,以獲取源容器的相關信息。

    首先,Docker 會在每個通過--link選項指定別名的目標容器上設置一個<alias>_NAME環境變量。如果一個名為 web 的容器通過--link db:webdb被鏈接到一個名為 db 的數據庫容器,那么 web 容器上會設置一個環境變量為WEBDB_NAME=/web/webdb.

    以之前的為例,Docker 還會設置端口變量:

    $ sudo docker run --rm --name web2 --link db:db training/webapp env . . . DB_NAME=/web2/db DB_PORT=tcp://172.17.0.5:5432 DB_PORT_5432_TCP=tcp://172.17.0.5:5432 # <name>_PORT_<port>_<protocol> 協議可以是 TCP 或 UDP DB_PORT_5432_TCP_PROTO=tcp DB_PORT_5432_TCP_PORT=5432 DB_PORT_5432_TCP_ADDR=172.17.0.5 . . .

    注:這些環境變量只設置給容器中的第一個進程,類似一些守護進程 (如 sshd ) 當他們派生 shells 時會清除這些變量

    更新/etc/hosts文件

    除了環境變量,Docker 會在目標容器上添加相關主機條目到/etc/hosts中,上例中就是 web 容器。

    $ sudo docker run -t -i --rm --link db:db training/webapp /bin/bash root@aed84ee21bde:/opt/webapp# cat /etc/hosts 172.17.0.7 aed84ee21bde . . . 172.17.0.5 db

    /etc/host文件在源容器被重啟之后會自動更新 IP 地址,而環境變量中的 IP 地址則不會自動更新的。

    /etc/host文件在源容器被重啟之后會自動更新 IP 地址,而環境變量中的 IP 地址則不會自動更新的。

    十、構建 私有庫

    Docker 官方提供了 docker registry 的構建方法?docker-registry

    10.1 快速構建

    快速構建 docker registry 通過以下兩步:

    • 安裝 docker
    • 運行 registry:docker run -p 5000:5000 registry

    這種方法通過 Docker hub 使用官方鏡像?official image from the Docker hub

    10.2 不使用容器構建 registry

    安裝必要的軟件

    $ sudo apt-get install build-essential python-dev libevent-dev python-pip liblzma-dev

    配置 docker-registry

    sudo pip install docker-registry

    或者 使用 github clone 手動安裝

    $ git clone https://github.com/dotcloud/docker-registry.git$ cd docker-registry/$ cp config/config_sample.yml config/config.yml$ mkdir /data/registry -p$ pip install .

    運行

    docker-registry

    高級啟動方式 [不推薦]

    使用gunicorn控制:

    gunicorn -c contrib/gunicorn_config.py docker_registry.wsgi:application

    或者對外監聽開放

    gunicorn --access-logfile - --error-logfile - -k gevent -b 0.0.0.0:5000 -w 4 --max-requests 100 docker_registry.wsgi:application

    10.3 提交指定容器到私有庫

    $ docker tag ubuntu:12.04 私有庫IP:5000/ubuntu:12.04$ docker push 私有庫IP:5000/ubuntu

    更多的配置選項推薦閱讀官方文檔:

    • Docker-Registry README
    • Docker-Registry advanced use

    來自:http://opskumu.github.io/docker.html

    總結

    以上是生活随笔為你收集整理的Docker 原理、学习教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    成人影院yy111111在线观看 | aa片在线观看视频在线播放 | 无码av最新清无码专区吞精 | 国产明星裸体无码xxxx视频 | 国产在线精品一区二区高清不卡 | 国产欧美精品一区二区三区 | 狠狠cao日日穞夜夜穞av | 丝袜人妻一区二区三区 | 无人区乱码一区二区三区 | 欧美三级不卡在线观看 | 国产av一区二区精品久久凹凸 | 日日摸天天摸爽爽狠狠97 | 国产9 9在线 | 中文 | 久久久久久av无码免费看大片 | 国产亚洲美女精品久久久2020 | 中文字幕久久久久人妻 | 国内少妇偷人精品视频免费 | √8天堂资源地址中文在线 | 国产精品久久精品三级 | 好男人www社区 | 少妇一晚三次一区二区三区 | 丁香花在线影院观看在线播放 | 亚洲中文字幕无码一久久区 | 亚洲狠狠色丁香婷婷综合 | 水蜜桃色314在线观看 | 久久综合网欧美色妞网 | 樱花草在线播放免费中文 | 久久国内精品自在自线 | 精品无码一区二区三区的天堂 | 色欲综合久久中文字幕网 | 特大黑人娇小亚洲女 | 欧美老妇与禽交 | 日本熟妇大屁股人妻 | 国产成人无码一二三区视频 | 99精品视频在线观看免费 | 国产无遮挡又黄又爽免费视频 | 无套内射视频囯产 | 波多野结衣aⅴ在线 | 婷婷五月综合激情中文字幕 | 精品一二三区久久aaa片 | 国产真实夫妇视频 | 人妻体内射精一区二区三四 | 亚洲成av人片天堂网无码】 | 97久久国产亚洲精品超碰热 | 国产69精品久久久久app下载 | 亚洲欧美精品aaaaaa片 | 国产精品对白交换视频 | 日本饥渴人妻欲求不满 | 狠狠综合久久久久综合网 | 亚洲欧洲日本综合aⅴ在线 | 丰满人妻一区二区三区免费视频 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 国产色视频一区二区三区 | 亚洲无人区一区二区三区 | 成人无码视频免费播放 | 国产av一区二区精品久久凹凸 | 久久久精品成人免费观看 | 亚洲区欧美区综合区自拍区 | 成在人线av无码免费 | 国产午夜无码精品免费看 | 人人妻人人藻人人爽欧美一区 | 日本一卡二卡不卡视频查询 | 久久伊人色av天堂九九小黄鸭 | 日本护士毛茸茸高潮 | 色一情一乱一伦一区二区三欧美 | 伊在人天堂亚洲香蕉精品区 | 特级做a爰片毛片免费69 | 国产三级久久久精品麻豆三级 | 国产亚洲精品久久久久久国模美 | 久久亚洲中文字幕精品一区 | 老头边吃奶边弄进去呻吟 | 99久久婷婷国产综合精品青草免费 | 狠狠躁日日躁夜夜躁2020 | 人妻互换免费中文字幕 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 色婷婷综合中文久久一本 | 国产成人综合在线女婷五月99播放 | 国产无遮挡吃胸膜奶免费看 | 一本久道久久综合婷婷五月 | 亚洲精品无码人妻无码 | 亚洲精品成人av在线 | 亚洲国产精品毛片av不卡在线 | 欧美性生交xxxxx久久久 | 国产麻豆精品精东影业av网站 | 久久精品人人做人人综合试看 | 国产口爆吞精在线视频 | 国产精品久久福利网站 | 国产无av码在线观看 | 亚洲中文字幕久久无码 | 国内精品人妻无码久久久影院 | 国产无遮挡吃胸膜奶免费看 | 激情爆乳一区二区三区 | 国产精品亚洲综合色区韩国 | 成人一在线视频日韩国产 | 在线观看欧美一区二区三区 | 国产麻豆精品一区二区三区v视界 | 丁香啪啪综合成人亚洲 | 久久人人爽人人人人片 | 国产av人人夜夜澡人人爽麻豆 | 久久这里只有精品视频9 | 亚洲呦女专区 | 婷婷丁香六月激情综合啪 | 男女爱爱好爽视频免费看 | 精品亚洲成av人在线观看 | 麻豆国产丝袜白领秘书在线观看 | 免费网站看v片在线18禁无码 | 激情亚洲一区国产精品 | 人人澡人人妻人人爽人人蜜桃 | 麻花豆传媒剧国产免费mv在线 | 精品国产福利一区二区 | 成在人线av无码免观看麻豆 | 亚洲精品成人福利网站 | 激情内射亚州一区二区三区爱妻 | 欧美丰满老熟妇xxxxx性 | 日产精品高潮呻吟av久久 | 1000部啪啪未满十八勿入下载 | 在线精品国产一区二区三区 | 在线精品国产一区二区三区 | 国产精品久久久 | 精品国产福利一区二区 | 日本高清一区免费中文视频 | 综合网日日天干夜夜久久 | 日韩人妻少妇一区二区三区 | 精品无码国产自产拍在线观看蜜 | 国产人妻精品午夜福利免费 | 乱人伦人妻中文字幕无码久久网 | 国产乱人无码伦av在线a | 亚洲中文字幕av在天堂 | 亚洲国产精品美女久久久久 | 婷婷五月综合缴情在线视频 | 日本精品人妻无码77777 天堂一区人妻无码 | 免费视频欧美无人区码 | 18无码粉嫩小泬无套在线观看 | 亚洲人成影院在线无码按摩店 | 日韩精品一区二区av在线 | 亚拍精品一区二区三区探花 | 亚洲国产精品一区二区第一页 | 日韩视频 中文字幕 视频一区 | 无码人妻久久一区二区三区不卡 | 女人被爽到呻吟gif动态图视看 | 午夜精品一区二区三区在线观看 | 国内揄拍国内精品少妇国语 | 黄网在线观看免费网站 | 国产综合在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲国产成人av在线观看 | 亲嘴扒胸摸屁股激烈网站 | 天天综合网天天综合色 | 性欧美videos高清精品 | 国产成人一区二区三区在线观看 | 性做久久久久久久久 | 少妇高潮一区二区三区99 | 国产真人无遮挡作爱免费视频 | 精品国产一区二区三区av 性色 | 亚洲の无码国产の无码影院 | 狠狠色丁香久久婷婷综合五月 | 高清国产亚洲精品自在久久 | 秋霞成人午夜鲁丝一区二区三区 | 97色伦图片97综合影院 | 久久午夜无码鲁丝片午夜精品 | 无码一区二区三区在线观看 | 少妇性俱乐部纵欲狂欢电影 | 国产超碰人人爽人人做人人添 | 亚洲国产一区二区三区在线观看 | 中文无码伦av中文字幕 | 99国产精品白浆在线观看免费 | 西西人体www44rt大胆高清 | 成人无码精品一区二区三区 | 亚洲国产综合无码一区 | 午夜福利一区二区三区在线观看 | 午夜成人1000部免费视频 | 亚洲va欧美va天堂v国产综合 | 婷婷综合久久中文字幕蜜桃三电影 | 97资源共享在线视频 | 国产精品99久久精品爆乳 | 中文字幕乱码中文乱码51精品 | 人人妻人人澡人人爽人人精品浪潮 | 国产艳妇av在线观看果冻传媒 | 欧美日韩一区二区三区自拍 | 无码国内精品人妻少妇 | 国产欧美精品一区二区三区 | 久久综合给合久久狠狠狠97色 | 性色av无码免费一区二区三区 | 亚洲日韩一区二区 | 老熟妇乱子伦牲交视频 | 色 综合 欧美 亚洲 国产 | 在线观看国产一区二区三区 | 久久www免费人成人片 | 久久精品国产99久久6动漫 | 日韩在线不卡免费视频一区 | 亚洲一区二区三区国产精华液 | 亚欧洲精品在线视频免费观看 | 在线观看欧美一区二区三区 | 性欧美大战久久久久久久 | 四虎国产精品一区二区 | 男女性色大片免费网站 | 亚洲 激情 小说 另类 欧美 | 极品尤物被啪到呻吟喷水 | 丰满少妇弄高潮了www | www国产亚洲精品久久网站 | 亚洲国产精品久久久久久 | 久久久久亚洲精品中文字幕 | 精品无码国产自产拍在线观看蜜 | 欧美日韩色另类综合 | 人人爽人人澡人人人妻 | 亚洲另类伦春色综合小说 | 成人亚洲精品久久久久软件 | 日韩在线不卡免费视频一区 | 国产在线一区二区三区四区五区 | 东京热男人av天堂 | 亚洲一区二区三区在线观看网站 | 日韩少妇白浆无码系列 | 丰满人妻一区二区三区免费视频 | 精品国产一区二区三区四区 | 国产精品人人爽人人做我的可爱 | 蜜桃视频韩日免费播放 | 亚洲欧洲中文日韩av乱码 | 狂野欧美性猛xxxx乱大交 | 国产黄在线观看免费观看不卡 | 正在播放老肥熟妇露脸 | 日日夜夜撸啊撸 | 国产精品免费大片 | 两性色午夜视频免费播放 | 5858s亚洲色大成网站www | 中文字幕+乱码+中文字幕一区 | 中文无码伦av中文字幕 | 久久午夜无码鲁丝片午夜精品 | av无码不卡在线观看免费 | 成人av无码一区二区三区 | 精品无码一区二区三区的天堂 | 伦伦影院午夜理论片 | 欧美熟妇另类久久久久久不卡 | 国产精品久久久久9999小说 | 内射老妇bbwx0c0ck | 亚洲综合无码一区二区三区 | 色偷偷人人澡人人爽人人模 | 国产亚洲人成在线播放 | 亚洲区欧美区综合区自拍区 | 久久久久久九九精品久 | 亚洲性无码av中文字幕 | 色婷婷综合激情综在线播放 | 纯爱无遮挡h肉动漫在线播放 | www国产精品内射老师 | 国产黄在线观看免费观看不卡 | 亚洲成a人片在线观看无码 | 亚洲精品一区二区三区婷婷月 | 日韩人妻少妇一区二区三区 | 四十如虎的丰满熟妇啪啪 | 图片区 小说区 区 亚洲五月 | 又粗又大又硬毛片免费看 | 精品国产一区二区三区av 性色 | 色五月丁香五月综合五月 | aⅴ亚洲 日韩 色 图网站 播放 | 欧美精品一区二区精品久久 | 丰满岳乱妇在线观看中字无码 | 人人爽人人澡人人人妻 | 精品国产一区二区三区四区在线看 | 国产激情无码一区二区 | 久久国产自偷自偷免费一区调 | 国产综合久久久久鬼色 | 亚洲男人av香蕉爽爽爽爽 | 欧美日韩一区二区综合 | 国产欧美亚洲精品a | 男人的天堂2018无码 | 国产亚洲精品久久久闺蜜 | 狠狠色色综合网站 | 久久人人爽人人爽人人片ⅴ | 4hu四虎永久在线观看 | 狠狠噜狠狠狠狠丁香五月 | 欧美日韩精品 | 精品久久8x国产免费观看 | 国产人妻人伦精品 | 成人试看120秒体验区 | 亚洲熟妇自偷自拍另类 | av无码久久久久不卡免费网站 | 亚洲成a人一区二区三区 | 中文字幕精品av一区二区五区 | 久久99精品久久久久久动态图 | 麻豆国产人妻欲求不满 | 欧美高清在线精品一区 | 国产午夜福利亚洲第一 | 精品国产av色一区二区深夜久久 | 内射老妇bbwx0c0ck | 国产国产精品人在线视 | 欧美乱妇无乱码大黄a片 | 无码纯肉视频在线观看 | 国产亚洲精品久久久闺蜜 | 欧美喷潮久久久xxxxx | 中文字幕+乱码+中文字幕一区 | 亚洲aⅴ无码成人网站国产app | 亚洲综合另类小说色区 | 人妻人人添人妻人人爱 | 国产两女互慰高潮视频在线观看 | 成人无码影片精品久久久 | 久久久久久九九精品久 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产色精品久久人妻 | 国产成人综合美国十次 | 国产免费无码一区二区视频 | 美女黄网站人色视频免费国产 | 国产精品久久久久久久9999 | 国产无遮挡又黄又爽又色 | 亚洲中文字幕无码中字 | 午夜福利一区二区三区在线观看 | 国产熟妇高潮叫床视频播放 | 亚洲高清偷拍一区二区三区 | 无码人妻出轨黑人中文字幕 | 久久久久久国产精品无码下载 | 国产精品va在线观看无码 | 日韩av无码一区二区三区 | 亚洲欧美日韩国产精品一区二区 | 特黄特色大片免费播放器图片 | 国产精品久久国产三级国 | av人摸人人人澡人人超碰下载 | 亚洲色无码一区二区三区 | 亚洲精品无码国产 | 国产成人无码a区在线观看视频app | 精品久久久久久亚洲精品 | 一本久久伊人热热精品中文字幕 | 熟妇人妻无乱码中文字幕 | 色婷婷综合激情综在线播放 | 无码人妻黑人中文字幕 | 国产亲子乱弄免费视频 | 97夜夜澡人人爽人人喊中国片 | 久久精品一区二区三区四区 | 99精品无人区乱码1区2区3区 | 精品久久久久久亚洲精品 | 疯狂三人交性欧美 | 波多野42部无码喷潮在线 | 蜜桃av抽搐高潮一区二区 | 18禁止看的免费污网站 | 精品人人妻人人澡人人爽人人 | 国产成人av免费观看 | 国产午夜亚洲精品不卡 | 成人精品天堂一区二区三区 | 1000部啪啪未满十八勿入下载 | 色婷婷综合中文久久一本 | 亚洲精品美女久久久久久久 | 呦交小u女精品视频 | 午夜成人1000部免费视频 | 久9re热视频这里只有精品 | 久久99精品久久久久久 | 日韩少妇内射免费播放 | 一区二区三区高清视频一 | 人妻少妇被猛烈进入中文字幕 | 国产人妻精品一区二区三区 | 日韩视频 中文字幕 视频一区 | 四十如虎的丰满熟妇啪啪 | 日韩精品成人一区二区三区 | 久久综合给合久久狠狠狠97色 | 无码av岛国片在线播放 | 欧美日韩人成综合在线播放 | 欧美人与物videos另类 | 国产精品沙发午睡系列 | 国产精品怡红院永久免费 | 国产午夜无码视频在线观看 | 国产精品久免费的黄网站 | 国产黑色丝袜在线播放 | 真人与拘做受免费视频一 | 国产乱子伦视频在线播放 | 天干天干啦夜天干天2017 | 日韩人妻系列无码专区 | 夜先锋av资源网站 | 荫蒂添的好舒服视频囗交 | 2020久久香蕉国产线看观看 | а√资源新版在线天堂 | 久久婷婷五月综合色国产香蕉 | 国产麻豆精品精东影业av网站 | 国产精华av午夜在线观看 | 在线播放亚洲第一字幕 | 国产深夜福利视频在线 | 人妻中文无码久热丝袜 | 樱花草在线社区www | 狂野欧美性猛交免费视频 | 又湿又紧又大又爽a视频国产 | 精品国产麻豆免费人成网站 | 午夜无码人妻av大片色欲 | 内射欧美老妇wbb | 亚洲精品国产第一综合99久久 | 300部国产真实乱 | 偷窥村妇洗澡毛毛多 | 亚洲精品无码国产 | 免费播放一区二区三区 | 国产亲子乱弄免费视频 | 日韩亚洲欧美精品综合 | 激情亚洲一区国产精品 | 国产成人精品视频ⅴa片软件竹菊 | 人人爽人人澡人人人妻 | 国产精品国产自线拍免费软件 | 日本精品高清一区二区 | 中文字幕无码av激情不卡 | 无码吃奶揉捏奶头高潮视频 | 麻豆md0077饥渴少妇 | 九一九色国产 | 国产9 9在线 | 中文 | 狠狠cao日日穞夜夜穞av | 中文字幕乱码亚洲无线三区 | 亚洲综合色区中文字幕 | 日韩人妻无码一区二区三区久久99 | а√资源新版在线天堂 | 成人一在线视频日韩国产 | 麻豆国产97在线 | 欧洲 | 久久婷婷五月综合色国产香蕉 | 在线播放无码字幕亚洲 | yw尤物av无码国产在线观看 | 亚洲欧美国产精品久久 | 欧美熟妇另类久久久久久多毛 | 性生交大片免费看女人按摩摩 | 国内精品九九久久久精品 | 高潮毛片无遮挡高清免费 | 高潮毛片无遮挡高清免费 | 给我免费的视频在线观看 | 在线天堂新版最新版在线8 | 好男人社区资源 | 人妻少妇被猛烈进入中文字幕 | 欧洲美熟女乱又伦 | 免费国产成人高清在线观看网站 | 欧美老妇交乱视频在线观看 | 久久精品国产精品国产精品污 | 丰满少妇熟乱xxxxx视频 | 永久免费观看美女裸体的网站 | 免费播放一区二区三区 | 波多野结衣一区二区三区av免费 | 久久精品人人做人人综合试看 | 精品少妇爆乳无码av无码专区 | 国产国产精品人在线视 | 精品国产国产综合精品 | 国产乱人无码伦av在线a | 欧美性猛交内射兽交老熟妇 | 狠狠色噜噜狠狠狠狠7777米奇 | 国语自产偷拍精品视频偷 | 青青草原综合久久大伊人精品 | 荫蒂添的好舒服视频囗交 | 国产97在线 | 亚洲 | 亚洲精品国产a久久久久久 | 久久久国产一区二区三区 | 日本乱人伦片中文三区 | 久久99热只有频精品8 | 日本又色又爽又黄的a片18禁 | 久久午夜夜伦鲁鲁片无码免费 | 成人精品一区二区三区中文字幕 | 老熟妇仑乱视频一区二区 | 国产人妻人伦精品 | 亚洲成在人网站无码天堂 | 国产精品久久久午夜夜伦鲁鲁 | 色一情一乱一伦一区二区三欧美 | 国产香蕉97碰碰久久人人 | 18禁黄网站男男禁片免费观看 | 亚洲精品无码人妻无码 | 国产黑色丝袜在线播放 | 亚洲无人区午夜福利码高清完整版 | 成在人线av无码免观看麻豆 | 亚洲精品成人福利网站 | 欧美丰满老熟妇xxxxx性 | 97久久国产亚洲精品超碰热 | 1000部啪啪未满十八勿入下载 | 亚洲一区二区三区国产精华液 | 中国女人内谢69xxxx | 久久亚洲a片com人成 | 天堂а√在线中文在线 | 成人精品视频一区二区三区尤物 | 国产精品久久久久7777 | 亚洲天堂2017无码 | 久久成人a毛片免费观看网站 | 亚洲一区二区三区国产精华液 | 国产精品亚洲综合色区韩国 | 乌克兰少妇xxxx做受 | 精品成人av一区二区三区 | 东京热一精品无码av | 国产精品久久久久无码av色戒 | 宝宝好涨水快流出来免费视频 | 亚洲日本在线电影 | 免费国产成人高清在线观看网站 | 99久久精品国产一区二区蜜芽 | 三级4级全黄60分钟 | 色老头在线一区二区三区 | 最新国产麻豆aⅴ精品无码 | a在线亚洲男人的天堂 | 国产凸凹视频一区二区 | 国产色在线 | 国产 | 国产一区二区三区影院 | 亚洲 欧美 激情 小说 另类 | 精品成人av一区二区三区 | 成熟女人特级毛片www免费 | 国産精品久久久久久久 | 国产做国产爱免费视频 | 中文无码成人免费视频在线观看 | 亚洲精品久久久久中文第一幕 | 玩弄中年熟妇正在播放 | 99国产欧美久久久精品 | 无码纯肉视频在线观看 | 国产精品久久久久影院嫩草 | 激情爆乳一区二区三区 | 欧美大屁股xxxxhd黑色 | 久久国语露脸国产精品电影 | 中文字幕人妻无码一区二区三区 | 1000部啪啪未满十八勿入下载 | 欧美性生交活xxxxxdddd | 国产又爽又黄又刺激的视频 | 露脸叫床粗话东北少妇 | 国产一区二区三区影院 | 久久久久久国产精品无码下载 | 国产av久久久久精东av | 久久久久久久久888 | 国产区女主播在线观看 | 色欲综合久久中文字幕网 | 极品嫩模高潮叫床 | 亚洲国产高清在线观看视频 | 无码人妻丰满熟妇区五十路百度 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 99国产精品白浆在线观看免费 | 国产小呦泬泬99精品 | 少妇人妻大乳在线视频 | 又紧又大又爽精品一区二区 | 丰满少妇熟乱xxxxx视频 | 色综合久久久无码网中文 | 欧美日韩一区二区免费视频 | 国产综合色产在线精品 | 欧美 日韩 亚洲 在线 | 2019nv天堂香蕉在线观看 | 国产免费观看黄av片 | 国产精品久久久一区二区三区 | 国产麻豆精品一区二区三区v视界 | 东京热男人av天堂 | 野外少妇愉情中文字幕 | 伊人久久大香线焦av综合影院 | 成人亚洲精品久久久久软件 | 免费人成在线观看网站 | 国产精品自产拍在线观看 | 强辱丰满人妻hd中文字幕 | 国产亚洲美女精品久久久2020 | 国产精品人妻一区二区三区四 | 久久精品国产日本波多野结衣 | 男人和女人高潮免费网站 | 成人无码精品1区2区3区免费看 | 国产特级毛片aaaaaaa高清 | 婷婷五月综合激情中文字幕 | 真人与拘做受免费视频一 | 亚欧洲精品在线视频免费观看 | 亚洲精品一区二区三区在线观看 | 日本熟妇人妻xxxxx人hd | 国产精品亚洲专区无码不卡 | 欧美激情综合亚洲一二区 | 国产精品无码久久av | 国产午夜无码精品免费看 | 日韩av无码中文无码电影 | 疯狂三人交性欧美 | 中文字幕av无码一区二区三区电影 | 国产又爽又猛又粗的视频a片 | 超碰97人人射妻 | 鲁鲁鲁爽爽爽在线视频观看 | 夜夜夜高潮夜夜爽夜夜爰爰 | 亚洲欧洲日本无在线码 | 天天拍夜夜添久久精品 | 婷婷丁香六月激情综合啪 | 中文字幕日韩精品一区二区三区 | 亚洲の无码国产の无码步美 | 日韩无码专区 | 国产亚洲精品久久久久久久久动漫 | 少妇无码一区二区二三区 | 人人妻人人澡人人爽欧美一区 | 亚洲精品国产第一综合99久久 | 少妇性俱乐部纵欲狂欢电影 | 精品亚洲成av人在线观看 | 久久99精品国产.久久久久 | 4hu四虎永久在线观看 | 欧美人与牲动交xxxx | 成人综合网亚洲伊人 | 小sao货水好多真紧h无码视频 | 亚洲中文字幕久久无码 | 永久免费精品精品永久-夜色 | 欧美刺激性大交 | 欧洲熟妇色 欧美 | 国产小呦泬泬99精品 | 日韩av无码一区二区三区 | 性做久久久久久久久 | 内射后入在线观看一区 | 精品人妻人人做人人爽 | 中国女人内谢69xxxxxa片 | 日韩精品一区二区av在线 | 日本va欧美va欧美va精品 | 人妻与老人中文字幕 | 一本久道久久综合狠狠爱 | 成人亚洲精品久久久久 | 樱花草在线社区www | 午夜精品一区二区三区的区别 | 久久久国产一区二区三区 | 3d动漫精品啪啪一区二区中 | 亚洲人成无码网www | 77777熟女视频在线观看 а天堂中文在线官网 | 人人妻人人澡人人爽人人精品 | 日本免费一区二区三区最新 | 18禁止看的免费污网站 | 精品人妻中文字幕有码在线 | 久久久久久a亚洲欧洲av冫 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 人人爽人人爽人人片av亚洲 | 国产免费久久久久久无码 | 日韩人妻无码中文字幕视频 | 国产性生交xxxxx无码 | 久久精品国产大片免费观看 | 性欧美熟妇videofreesex | 中文字幕无码av激情不卡 | 娇妻被黑人粗大高潮白浆 | 国产亚洲欧美日韩亚洲中文色 | 国产一区二区不卡老阿姨 | 日韩亚洲欧美中文高清在线 | 人妻aⅴ无码一区二区三区 | 97资源共享在线视频 | 国产又爽又猛又粗的视频a片 | 亚洲成色www久久网站 | 中国大陆精品视频xxxx | 精品国产av色一区二区深夜久久 | 强开小婷嫩苞又嫩又紧视频 | 国产办公室秘书无码精品99 | 国产成人无码av片在线观看不卡 | 1000部夫妻午夜免费 | 欧美激情综合亚洲一二区 | 国产在线aaa片一区二区99 | 人妻中文无码久热丝袜 | 亚洲色大成网站www国产 | 少妇人妻av毛片在线看 | 2020最新国产自产精品 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 欧美色就是色 | 露脸叫床粗话东北少妇 | 精品无码一区二区三区爱欲 | 欧美日韩视频无码一区二区三 | 精品久久久久久人妻无码中文字幕 | 国内揄拍国内精品人妻 | 亚洲七七久久桃花影院 | 97色伦图片97综合影院 | 亚洲欧美综合区丁香五月小说 | 国产网红无码精品视频 | 国产高清av在线播放 | 久久99精品国产.久久久久 | 成人影院yy111111在线观看 | 无码国产乱人伦偷精品视频 | 奇米影视7777久久精品人人爽 | 亚洲中文无码av永久不收费 | 一本久道高清无码视频 | 亚洲国产av精品一区二区蜜芽 | 熟女少妇在线视频播放 | 亚洲人成网站色7799 | 99国产精品白浆在线观看免费 | 亚洲中文字幕无码中字 | 成 人 免费观看网站 | 少妇久久久久久人妻无码 | 免费观看又污又黄的网站 | 久久亚洲国产成人精品性色 | 国产精品多人p群无码 | 国产人成高清在线视频99最全资源 | 宝宝好涨水快流出来免费视频 | 性开放的女人aaa片 | 久久久久av无码免费网 | 人妻无码久久精品人妻 | 婷婷综合久久中文字幕蜜桃三电影 | 18禁黄网站男男禁片免费观看 | 熟女少妇在线视频播放 | 久久亚洲中文字幕无码 | 强开小婷嫩苞又嫩又紧视频 | 天堂久久天堂av色综合 | 久久综合狠狠综合久久综合88 | 2020最新国产自产精品 | 未满成年国产在线观看 | 欧美刺激性大交 | 在线a亚洲视频播放在线观看 | 中文字幕精品av一区二区五区 | 欧美日韩在线亚洲综合国产人 | 少妇被粗大的猛进出69影院 | 亲嘴扒胸摸屁股激烈网站 | 成人精品天堂一区二区三区 | 99视频精品全部免费免费观看 | 最近免费中文字幕中文高清百度 | 曰本女人与公拘交酡免费视频 | 波多野结衣一区二区三区av免费 | 亚洲人亚洲人成电影网站色 | 狠狠躁日日躁夜夜躁2020 | 国产亲子乱弄免费视频 | 美女黄网站人色视频免费国产 | 无套内谢老熟女 | 牲欲强的熟妇农村老妇女视频 | 日韩在线不卡免费视频一区 | 色欲久久久天天天综合网精品 | 亚洲成av人片在线观看无码不卡 | 色综合久久久久综合一本到桃花网 | 图片小说视频一区二区 | 亚洲热妇无码av在线播放 | 一本久久伊人热热精品中文字幕 | 亚洲中文字幕无码一久久区 | 色婷婷av一区二区三区之红樱桃 | 亚洲色欲久久久综合网东京热 | 18禁黄网站男男禁片免费观看 | 国产人妖乱国产精品人妖 | 性史性农村dvd毛片 | 小sao货水好多真紧h无码视频 | 亚洲国产精品久久人人爱 | 国产精品理论片在线观看 | 成在人线av无码免费 | 一本久道高清无码视频 | 丰满肥臀大屁股熟妇激情视频 | 少妇久久久久久人妻无码 | 午夜性刺激在线视频免费 | 国产特级毛片aaaaaaa高清 | 久久精品丝袜高跟鞋 | 最新国产麻豆aⅴ精品无码 | 日本熟妇人妻xxxxx人hd | 亚洲精品国偷拍自产在线麻豆 | 欧美自拍另类欧美综合图片区 | 99精品无人区乱码1区2区3区 | 色婷婷香蕉在线一区二区 | 桃花色综合影院 | 人妻插b视频一区二区三区 | 久久久精品欧美一区二区免费 | 乌克兰少妇xxxx做受 | 国产亚洲精品久久久久久国模美 | 精品国产一区二区三区av 性色 | 美女黄网站人色视频免费国产 | 国产成人一区二区三区别 | 天天综合网天天综合色 | 亚洲人成网站色7799 | 久久久久久国产精品无码下载 | a在线亚洲男人的天堂 | 亚洲色成人中文字幕网站 | 亚洲熟妇色xxxxx亚洲 | 国产97人人超碰caoprom | 无码av最新清无码专区吞精 | 乱码av麻豆丝袜熟女系列 | 秋霞成人午夜鲁丝一区二区三区 | 一本加勒比波多野结衣 | 亚洲色在线无码国产精品不卡 | 精品久久久无码中文字幕 | 精品久久久无码中文字幕 | 蜜桃视频韩日免费播放 | 天堂久久天堂av色综合 | 5858s亚洲色大成网站www | 亚洲中文字幕成人无码 | 丝袜足控一区二区三区 | 亚洲爆乳精品无码一区二区三区 | 国产精品无码永久免费888 | 日韩精品无码一本二本三本色 | 色婷婷av一区二区三区之红樱桃 | 无码纯肉视频在线观看 | 俺去俺来也在线www色官网 | 久久久中文字幕日本无吗 | 国产精品人妻一区二区三区四 | 无码人妻丰满熟妇区五十路百度 | 强伦人妻一区二区三区视频18 | 国产一区二区三区影院 | 国产亚洲美女精品久久久2020 | 永久免费观看美女裸体的网站 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产精品久久久久久无码 | 天堂亚洲免费视频 | 午夜理论片yy44880影院 | 中国女人内谢69xxxxxa片 | 小泽玛莉亚一区二区视频在线 | 国产午夜亚洲精品不卡 | 亚洲精品www久久久 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 午夜时刻免费入口 | 亚洲成a人片在线观看无码3d | 中文久久乱码一区二区 | 激情国产av做激情国产爱 | 国产精品理论片在线观看 | 亚洲爆乳无码专区 | 98国产精品综合一区二区三区 | 午夜丰满少妇性开放视频 | 在教室伦流澡到高潮hnp视频 | 欧美精品在线观看 | 欧美黑人性暴力猛交喷水 | 强开小婷嫩苞又嫩又紧视频 | 欧美亚洲日韩国产人成在线播放 | 一本无码人妻在中文字幕免费 | 97无码免费人妻超级碰碰夜夜 | 亚洲成a人一区二区三区 | 国产无遮挡又黄又爽免费视频 | 精品无码一区二区三区爱欲 | 国产真实夫妇视频 | 欧美 丝袜 自拍 制服 另类 | 成人免费视频视频在线观看 免费 | 亚洲综合无码一区二区三区 | 亚洲国产精品久久人人爱 | 国产黑色丝袜在线播放 | 日本乱人伦片中文三区 | 无码精品人妻一区二区三区av | 久久久久免费精品国产 | 国产精品久免费的黄网站 | 色爱情人网站 | 天天摸天天碰天天添 | 人妻aⅴ无码一区二区三区 | 亚洲精品成人福利网站 | 国产女主播喷水视频在线观看 | 伦伦影院午夜理论片 | 国产xxx69麻豆国语对白 | 国产精品办公室沙发 | 亚洲熟妇色xxxxx亚洲 | 国产成人综合美国十次 | 亚洲精品午夜无码电影网 | 国产黑色丝袜在线播放 | 久久精品国产日本波多野结衣 | 任你躁国产自任一区二区三区 | 天天拍夜夜添久久精品大 | 国产又爽又黄又刺激的视频 | 图片区 小说区 区 亚洲五月 | 国产精品人妻一区二区三区四 | 精品偷自拍另类在线观看 | 300部国产真实乱 | 性色欲情网站iwww九文堂 | 国产精品99爱免费视频 | 久在线观看福利视频 | 国产麻豆精品精东影业av网站 | 亚洲国产精品久久人人爱 | 亚拍精品一区二区三区探花 | 狠狠色噜噜狠狠狠狠7777米奇 | 国産精品久久久久久久 | 日日鲁鲁鲁夜夜爽爽狠狠 | 奇米影视7777久久精品人人爽 | 女人和拘做爰正片视频 | 日本免费一区二区三区最新 | 日韩精品一区二区av在线 | 免费人成网站视频在线观看 | 亚洲精品国产精品乱码不卡 | 国产片av国语在线观看 | 日本高清一区免费中文视频 | av无码久久久久不卡免费网站 | 色窝窝无码一区二区三区色欲 | 丝袜 中出 制服 人妻 美腿 | 少妇无套内谢久久久久 | 荡女精品导航 | 精品国产一区二区三区四区在线看 | 欧美精品国产综合久久 | 97人妻精品一区二区三区 | 欧美日本免费一区二区三区 | 欧洲熟妇色 欧美 | 久久国产劲爆∧v内射 | 正在播放东北夫妻内射 | 国产午夜无码精品免费看 | 中文字幕+乱码+中文字幕一区 | 亚洲日韩一区二区三区 | 曰本女人与公拘交酡免费视频 | 国产深夜福利视频在线 | 欧美老妇交乱视频在线观看 | 婷婷五月综合缴情在线视频 | 色狠狠av一区二区三区 | 亚洲日本va午夜在线电影 | 中文无码成人免费视频在线观看 | a在线观看免费网站大全 | 精品国产av色一区二区深夜久久 | 亚洲成在人网站无码天堂 | 亚洲 a v无 码免 费 成 人 a v | 熟女俱乐部五十路六十路av | 狠狠噜狠狠狠狠丁香五月 | 国产精品成人av在线观看 | 亚洲成a人片在线观看无码3d | 成人欧美一区二区三区黑人免费 | 久激情内射婷内射蜜桃人妖 | 亚洲精品国产品国语在线观看 | av无码电影一区二区三区 | 国产精品免费大片 | 精品国产一区二区三区av 性色 | 强伦人妻一区二区三区视频18 | 风流少妇按摩来高潮 | 黄网在线观看免费网站 | 亚洲日韩av片在线观看 | 玩弄中年熟妇正在播放 | 久久久中文字幕日本无吗 | 中文字幕无码日韩专区 | 亚洲欧美色中文字幕在线 | 精品欧美一区二区三区久久久 | 无套内射视频囯产 | 伊人久久大香线蕉亚洲 | 无码精品国产va在线观看dvd | 少妇高潮一区二区三区99 | 在线成人www免费观看视频 | 国产在线精品一区二区三区直播 | 日本精品人妻无码免费大全 | 色综合久久中文娱乐网 | 精品久久久久久亚洲精品 | 亚洲成a人片在线观看日本 | 中文字幕乱妇无码av在线 | 精品无码国产一区二区三区av | 婷婷丁香五月天综合东京热 | 国产午夜视频在线观看 | 狠狠色色综合网站 | 国产亚洲人成a在线v网站 | 性啪啪chinese东北女人 | 俺去俺来也www色官网 | 18无码粉嫩小泬无套在线观看 | 老子影院午夜伦不卡 | 奇米影视7777久久精品 | 色婷婷久久一区二区三区麻豆 | 99久久久国产精品无码免费 | 国产绳艺sm调教室论坛 | 日本xxxx色视频在线观看免费 | 蜜桃视频插满18在线观看 | 无码帝国www无码专区色综合 | 一个人看的视频www在线 | 色欲av亚洲一区无码少妇 | 中文字幕av伊人av无码av | 人人妻人人藻人人爽欧美一区 | 国产麻豆精品一区二区三区v视界 | 国产无遮挡又黄又爽又色 | 亚洲一区二区三区无码久久 | 成人精品视频一区二区三区尤物 | 精品熟女少妇av免费观看 | 丰满少妇弄高潮了www | 久久精品一区二区三区四区 | 国产成人无码av片在线观看不卡 | 日本www一道久久久免费榴莲 | 欧美性生交xxxxx久久久 | 无码国模国产在线观看 | 人妻夜夜爽天天爽三区 | 日本一卡2卡3卡四卡精品网站 | 亚洲熟妇色xxxxx欧美老妇y | 少妇人妻偷人精品无码视频 | 午夜福利试看120秒体验区 | 四十如虎的丰满熟妇啪啪 | 在线精品国产一区二区三区 | 天干天干啦夜天干天2017 | 国产性生交xxxxx无码 | 国产美女精品一区二区三区 | 色狠狠av一区二区三区 | 精品人妻人人做人人爽夜夜爽 | 亚洲中文字幕成人无码 | 中文字幕久久久久人妻 | 精品国产青草久久久久福利 | 波多野结衣高清一区二区三区 | 精品亚洲成av人在线观看 | 久久无码中文字幕免费影院蜜桃 | 中文字幕av日韩精品一区二区 | 国产亚av手机在线观看 | 东京热男人av天堂 | 少妇愉情理伦片bd | 中文字幕无码av波多野吉衣 | 国产suv精品一区二区五 | 粉嫩少妇内射浓精videos | 国产精品无码永久免费888 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 久久精品中文字幕大胸 | 午夜丰满少妇性开放视频 | 男女下面进入的视频免费午夜 | 国产成人无码午夜视频在线观看 | 亚洲精品www久久久 | 一本久道久久综合狠狠爱 | 人妻插b视频一区二区三区 | 中文字幕人妻无码一夲道 | 国产人妻久久精品二区三区老狼 | 国产偷抇久久精品a片69 | 精品aⅴ一区二区三区 | 婷婷五月综合缴情在线视频 | 无码中文字幕色专区 | 久久国产36精品色熟妇 | 亚洲成av人片天堂网无码】 | 毛片内射-百度 | 色欲综合久久中文字幕网 | 人妻无码αv中文字幕久久琪琪布 | 中文字幕久久久久人妻 | 亚洲成色www久久网站 | 亚洲 另类 在线 欧美 制服 | 人人妻人人澡人人爽人人精品浪潮 | 一本久久伊人热热精品中文字幕 | 一本加勒比波多野结衣 | 久久国产精品二国产精品 | 女人和拘做爰正片视频 | 小sao货水好多真紧h无码视频 | 最新版天堂资源中文官网 | 精品无人区无码乱码毛片国产 | 国产两女互慰高潮视频在线观看 | 久久久久亚洲精品中文字幕 | 中文字幕日产无线码一区 | 日欧一片内射va在线影院 | 欧美熟妇另类久久久久久不卡 | 一本久久a久久精品vr综合 | 伊人久久婷婷五月综合97色 | 丰满少妇高潮惨叫视频 | 久久久久成人精品免费播放动漫 | 国产麻豆精品一区二区三区v视界 | 捆绑白丝粉色jk震动捧喷白浆 | 综合人妻久久一区二区精品 | 性开放的女人aaa片 | 欧美国产亚洲日韩在线二区 | 一本色道久久综合亚洲精品不卡 | 大胆欧美熟妇xx | 内射后入在线观看一区 | 午夜男女很黄的视频 | 色狠狠av一区二区三区 | 欧美丰满老熟妇xxxxx性 | 国产成人一区二区三区别 | 少妇无码av无码专区在线观看 | 一区二区三区乱码在线 | 欧洲 | 亚洲欧洲无卡二区视頻 | 97人妻精品一区二区三区 | 无遮无挡爽爽免费视频 | 久久久久人妻一区精品色欧美 | 亚洲国产精品毛片av不卡在线 | 中文精品无码中文字幕无码专区 | 黑人大群体交免费视频 | 小泽玛莉亚一区二区视频在线 | 特级做a爰片毛片免费69 | 免费男性肉肉影院 | 无码纯肉视频在线观看 | 久久视频在线观看精品 | 97无码免费人妻超级碰碰夜夜 | 狠狠cao日日穞夜夜穞av | 亚洲精品综合一区二区三区在线 | 亚洲精品国产第一综合99久久 | 双乳奶水饱满少妇呻吟 | 免费乱码人妻系列无码专区 | 亚洲天堂2017无码 | 久久精品国产一区二区三区 | 国产精品毛片一区二区 | 女人高潮内射99精品 | 精品少妇爆乳无码av无码专区 | 一个人免费观看的www视频 | 国内精品久久毛片一区二区 | 亚洲精品成人福利网站 | 妺妺窝人体色www婷婷 | 国产亚洲人成在线播放 | 内射老妇bbwx0c0ck | 台湾无码一区二区 | 久久五月精品中文字幕 | 精品国产一区av天美传媒 | 亲嘴扒胸摸屁股激烈网站 | 亚洲午夜久久久影院 | 久久精品成人欧美大片 | 欧美丰满少妇xxxx性 | 乱码av麻豆丝袜熟女系列 | 一本大道久久东京热无码av | 亚洲日本一区二区三区在线 | 久久精品无码一区二区三区 | 日韩精品无码一本二本三本色 | 亚洲伊人久久精品影院 | 给我免费的视频在线观看 | 少妇无码一区二区二三区 | 日产国产精品亚洲系列 | 国产精品办公室沙发 | 国产成人精品一区二区在线小狼 | 国产农村乱对白刺激视频 | 久久婷婷五月综合色国产香蕉 | 亚洲国产一区二区三区在线观看 | 亚洲综合在线一区二区三区 | 97夜夜澡人人爽人人喊中国片 | 99久久亚洲精品无码毛片 | 亚无码乱人伦一区二区 | 99久久人妻精品免费二区 | 国产真人无遮挡作爱免费视频 | 人人妻在人人 | 无码人妻av免费一区二区三区 | 国产黄在线观看免费观看不卡 | 青青青爽视频在线观看 | 中文字幕无码人妻少妇免费 | 最新版天堂资源中文官网 | www国产亚洲精品久久久日本 | 成人免费视频一区二区 | 国产高清av在线播放 | 亚洲色欲色欲天天天www | 又大又硬又爽免费视频 | 国产精品久久福利网站 | 久久久精品国产sm最大网站 | 日韩人妻系列无码专区 | 亚洲中文字幕无码一久久区 | 色噜噜亚洲男人的天堂 | 日本成熟视频免费视频 | 色综合久久88色综合天天 | 中文字幕无码av波多野吉衣 | 亚洲男女内射在线播放 | 欧美怡红院免费全部视频 | 中文字幕无码日韩欧毛 | 又紧又大又爽精品一区二区 | 中文字幕+乱码+中文字幕一区 | 天堂亚洲免费视频 | 国色天香社区在线视频 | 欧洲极品少妇 | 377p欧洲日本亚洲大胆 | 波多野结衣一区二区三区av免费 | 午夜福利电影 | 色综合久久中文娱乐网 | 伊人久久大香线焦av综合影院 | 亚洲成a人片在线观看无码 | aⅴ在线视频男人的天堂 | 日本护士xxxxhd少妇 | 午夜福利一区二区三区在线观看 | 野狼第一精品社区 | 2019nv天堂香蕉在线观看 | 乌克兰少妇xxxx做受 | 亚洲人成网站在线播放942 | 国产精品多人p群无码 | 性做久久久久久久久 | 中国女人内谢69xxxx | 精品乱码久久久久久久 | 欧美日韩人成综合在线播放 | 国产免费无码一区二区视频 | 婷婷六月久久综合丁香 | 人人妻人人澡人人爽欧美一区九九 | 免费无码一区二区三区蜜桃大 | 国产成人无码区免费内射一片色欲 | 99久久精品国产一区二区蜜芽 | 欧美日韩色另类综合 | 亚洲一区二区观看播放 | 99久久久无码国产aaa精品 | 亚洲精品国产精品乱码不卡 | 亲嘴扒胸摸屁股激烈网站 | 久久精品女人天堂av免费观看 | 欧美日韩亚洲国产精品 | 国产精品久久久久久亚洲毛片 | 日韩欧美成人免费观看 | 久久综合香蕉国产蜜臀av | 国产成人av免费观看 | 天下第一社区视频www日本 | 国产亚洲精品久久久ai换 | 中国大陆精品视频xxxx | 日韩成人一区二区三区在线观看 | 欧美日本免费一区二区三区 | 中文毛片无遮挡高清免费 | 欧洲熟妇色 欧美 | 亚洲日韩av一区二区三区中文 | 欧美变态另类xxxx | 欧洲极品少妇 | 国産精品久久久久久久 | 女人被男人躁得好爽免费视频 | 人妻熟女一区 | 三上悠亚人妻中文字幕在线 | 九九综合va免费看 | 给我免费的视频在线观看 | 久久久久99精品国产片 | 亚洲精品成人福利网站 | 色综合久久久久综合一本到桃花网 | 噜噜噜亚洲色成人网站 | 精品久久久久久人妻无码中文字幕 | 丰满妇女强制高潮18xxxx | 红桃av一区二区三区在线无码av | 欧美成人免费全部网站 | 狠狠cao日日穞夜夜穞av | 国产无遮挡吃胸膜奶免费看 | 国产黑色丝袜在线播放 | 亲嘴扒胸摸屁股激烈网站 | 亚洲狠狠色丁香婷婷综合 | 青青久在线视频免费观看 | 久久www免费人成人片 | 亚洲s色大片在线观看 | 久久精品一区二区三区四区 | 奇米影视7777久久精品人人爽 | 国色天香社区在线视频 | 夜夜夜高潮夜夜爽夜夜爰爰 | 无遮挡啪啪摇乳动态图 | 欧美日韩一区二区三区自拍 | 国产内射老熟女aaaa | 奇米影视7777久久精品 | 桃花色综合影院 | 欧美肥老太牲交大战 | 牛和人交xxxx欧美 | 国内少妇偷人精品视频免费 | 中文字幕av伊人av无码av | 亚洲精品国产精品乱码不卡 | 一区二区传媒有限公司 | 任你躁国产自任一区二区三区 | 精品久久久久久人妻无码中文字幕 | 成熟女人特级毛片www免费 | 久久综合给合久久狠狠狠97色 | 久久久久亚洲精品男人的天堂 | 亚无码乱人伦一区二区 | 亚洲精品鲁一鲁一区二区三区 | 亚洲精品鲁一鲁一区二区三区 | 久久久久免费看成人影片 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲成色www久久网站 | 国产午夜亚洲精品不卡 | 国产艳妇av在线观看果冻传媒 | 国产在线一区二区三区四区五区 | 国产乡下妇女做爰 | 澳门永久av免费网站 | 亚洲欧美综合区丁香五月小说 | 国产麻豆精品一区二区三区v视界 | 亚洲啪av永久无码精品放毛片 | 欧美性黑人极品hd | 女人被爽到呻吟gif动态图视看 | 97精品国产97久久久久久免费 | 亚洲一区二区三区含羞草 | 日韩无套无码精品 | 国产明星裸体无码xxxx视频 | 97久久超碰中文字幕 | 国产色视频一区二区三区 | 午夜精品久久久久久久 | 成在人线av无码免费 | 亚洲欧洲日本综合aⅴ在线 | 亚洲国产精品久久人人爱 | aa片在线观看视频在线播放 | a在线亚洲男人的天堂 | 熟妇人妻激情偷爽文 | 日韩av无码一区二区三区不卡 | 丰满妇女强制高潮18xxxx | 久久精品一区二区三区四区 | 国产精品福利视频导航 | 无码人妻丰满熟妇区毛片18 | 老头边吃奶边弄进去呻吟 | 性欧美videos高清精品 | 欧美人与物videos另类 | 97夜夜澡人人爽人人喊中国片 | 久久久中文字幕日本无吗 | 久久久久亚洲精品男人的天堂 | 十八禁真人啪啪免费网站 | 玩弄中年熟妇正在播放 | 伊人色综合久久天天小片 | 夜精品a片一区二区三区无码白浆 | 久久亚洲中文字幕无码 | 亚洲成av人综合在线观看 | 少妇激情av一区二区 | 亚洲国产精华液网站w | 久久综合网欧美色妞网 | 玩弄少妇高潮ⅹxxxyw | 欧美阿v高清资源不卡在线播放 | 日日鲁鲁鲁夜夜爽爽狠狠 | 日产精品99久久久久久 | 国产成人精品三级麻豆 | 精品无码国产自产拍在线观看蜜 | 日本精品人妻无码77777 天堂一区人妻无码 | 亚洲a无码综合a国产av中文 | 亚洲人交乣女bbw | 美女扒开屁股让男人桶 | 欧美日韩综合一区二区三区 | 精品偷自拍另类在线观看 | 初尝人妻少妇中文字幕 | 欧美野外疯狂做受xxxx高潮 | 精品国产一区二区三区四区在线看 | 国产免费久久精品国产传媒 | 久久精品丝袜高跟鞋 | 亚洲精品无码国产 | 无码国内精品人妻少妇 | 一本久久伊人热热精品中文字幕 | 亚洲精品综合一区二区三区在线 | 高清国产亚洲精品自在久久 | 性欧美videos高清精品 | 亚洲日韩精品欧美一区二区 | 国产午夜福利100集发布 | 日韩av无码一区二区三区不卡 | 国产香蕉尹人视频在线 | 激情内射日本一区二区三区 | 精品久久久中文字幕人妻 | 国产极品视觉盛宴 | 波多野结衣 黑人 | 色欲av亚洲一区无码少妇 | 免费看少妇作爱视频 | 乱中年女人伦av三区 | 青青青手机频在线观看 | 欧美日本精品一区二区三区 | 中国女人内谢69xxxx | 综合激情五月综合激情五月激情1 | 欧美人与物videos另类 | 中文无码精品a∨在线观看不卡 | 一本久久伊人热热精品中文字幕 | 国产小呦泬泬99精品 | 在线欧美精品一区二区三区 | 亚洲中文字幕va福利 | 国产成人精品优优av | 露脸叫床粗话东北少妇 | 特黄特色大片免费播放器图片 | 少妇人妻av毛片在线看 | 无码国内精品人妻少妇 | 国产在线精品一区二区高清不卡 | 小泽玛莉亚一区二区视频在线 | 樱花草在线播放免费中文 | 天天综合网天天综合色 | 国产精品va在线观看无码 | 乱人伦人妻中文字幕无码久久网 | 亚洲国产高清在线观看视频 | 四虎永久在线精品免费网址 | 成熟妇人a片免费看网站 | 午夜福利一区二区三区在线观看 | 婷婷色婷婷开心五月四房播播 | 67194成是人免费无码 | 亚洲色欲久久久综合网东京热 | 一本色道久久综合亚洲精品不卡 | 巨爆乳无码视频在线观看 | 精品无码一区二区三区的天堂 | 亚洲欧美日韩成人高清在线一区 | 久久久精品成人免费观看 | 男女爱爱好爽视频免费看 | 无码帝国www无码专区色综合 | 亚洲色大成网站www国产 | 午夜福利一区二区三区在线观看 | 狂野欧美性猛xxxx乱大交 | 天堂久久天堂av色综合 | yw尤物av无码国产在线观看 | 小泽玛莉亚一区二区视频在线 | 人人澡人人妻人人爽人人蜜桃 | 国产精品久久久久久亚洲影视内衣 | 欧美猛少妇色xxxxx | 国内精品久久久久久中文字幕 | 特黄特色大片免费播放器图片 | 在教室伦流澡到高潮hnp视频 | 亚洲爆乳大丰满无码专区 | 精品成在人线av无码免费看 | 啦啦啦www在线观看免费视频 | 亚洲精品一区二区三区在线观看 | 天天燥日日燥 | 99久久人妻精品免费二区 | 欧美35页视频在线观看 | 人妻插b视频一区二区三区 | 成人性做爰aaa片免费看不忠 | 国产无套内射久久久国产 | 久精品国产欧美亚洲色aⅴ大片 | 天堂а√在线中文在线 | 国产av无码专区亚洲a∨毛片 | 高清国产亚洲精品自在久久 | 久久国产精品二国产精品 | √天堂资源地址中文在线 | 国产激情综合五月久久 | 国产综合色产在线精品 | 在线观看国产午夜福利片 | 久久国产精品二国产精品 | 丰满少妇熟乱xxxxx视频 | 久久aⅴ免费观看 | 国产激情无码一区二区 | 麻豆国产97在线 | 欧洲 | 久久国产精品二国产精品 | www国产亚洲精品久久网站 | 国产凸凹视频一区二区 | 久久无码中文字幕免费影院蜜桃 | 一本久道久久综合婷婷五月 | 国产卡一卡二卡三 | 无码国内精品人妻少妇 | 久久亚洲精品成人无码 | 国产舌乚八伦偷品w中 | 色一情一乱一伦一视频免费看 | 精品国产精品久久一区免费式 | 最新版天堂资源中文官网 | 日本丰满熟妇videos | 波多野结衣av一区二区全免费观看 | 欧洲熟妇精品视频 | 久久久久人妻一区精品色欧美 | 人人澡人人透人人爽 | 亚洲精品一区二区三区在线 | 永久黄网站色视频免费直播 | 亚洲精品成人福利网站 | 国产精品成人av在线观看 | 2019nv天堂香蕉在线观看 | 丰腴饱满的极品熟妇 | 欧洲熟妇精品视频 | 日本熟妇浓毛 | 中文字幕无码免费久久99 | 国産精品久久久久久久 | 亚洲人成影院在线观看 | 少妇高潮喷潮久久久影院 | 少妇被黑人到高潮喷出白浆 | 一本大道伊人av久久综合 | 亚洲成a人片在线观看无码 | 婷婷五月综合缴情在线视频 | 国产精品亚洲а∨无码播放麻豆 | 久久国产精品偷任你爽任你 | 97夜夜澡人人双人人人喊 | 好屌草这里只有精品 | 久热国产vs视频在线观看 | 精品久久久久久人妻无码中文字幕 | 黑人粗大猛烈进出高潮视频 | 77777熟女视频在线观看 а天堂中文在线官网 | 99久久99久久免费精品蜜桃 | 久久这里只有精品视频9 | 国内丰满熟女出轨videos | 国产艳妇av在线观看果冻传媒 | 精品久久久久久亚洲精品 | 亚洲中文字幕乱码av波多ji | 久久久中文久久久无码 | 人人妻人人澡人人爽人人精品浪潮 | 熟妇人妻中文av无码 | 亚洲日韩精品欧美一区二区 | 超碰97人人射妻 | 日本熟妇浓毛 | 未满小14洗澡无码视频网站 | 欧美成人家庭影院 | 2019nv天堂香蕉在线观看 | 亚洲另类伦春色综合小说 | 欧美激情综合亚洲一二区 | 亚洲成色www久久网站 | 欧美真人作爱免费视频 | 俺去俺来也www色官网 | 午夜精品久久久久久久 | 国产麻豆精品精东影业av网站 | 国产精品对白交换视频 | www成人国产高清内射 | 日韩在线不卡免费视频一区 | 亚洲一区二区三区播放 | 男女超爽视频免费播放 | 鲁鲁鲁爽爽爽在线视频观看 | 国产精品亚洲五月天高清 | 亚洲热妇无码av在线播放 | 天天综合网天天综合色 | 性开放的女人aaa片 | 久久综合九色综合欧美狠狠 | 久久这里只有精品视频9 | 久久国产精品精品国产色婷婷 | 精品熟女少妇av免费观看 | 2019午夜福利不卡片在线 | 国产无套粉嫩白浆在线 | 日韩欧美成人免费观看 | 中文字幕 人妻熟女 | 久久久成人毛片无码 | 一个人看的视频www在线 | 国产精品18久久久久久麻辣 | 人妻少妇被猛烈进入中文字幕 | 曰韩无码二三区中文字幕 | 国产猛烈高潮尖叫视频免费 | 好爽又高潮了毛片免费下载 | 国产日产欧产精品精品app | 红桃av一区二区三区在线无码av | 欧美阿v高清资源不卡在线播放 | 午夜精品久久久久久久 | 动漫av一区二区在线观看 | 99久久婷婷国产综合精品青草免费 | 最新国产麻豆aⅴ精品无码 | 成人无码视频免费播放 | 亚洲精品午夜国产va久久成人 | 国产麻豆精品一区二区三区v视界 | 又色又爽又黄的美女裸体网站 | 在线成人www免费观看视频 | 国产在线精品一区二区三区直播 | 成人精品天堂一区二区三区 | 久久无码专区国产精品s | 日韩精品乱码av一区二区 | 亚洲精品一区二区三区大桥未久 | 国产深夜福利视频在线 | 国产成人精品久久亚洲高清不卡 | 午夜福利一区二区三区在线观看 | 欧美成人午夜精品久久久 | 中文字幕中文有码在线 | 亚洲熟妇色xxxxx欧美老妇 | 国产精品18久久久久久麻辣 | 成人无码视频免费播放 | 夜夜影院未满十八勿进 | 性色欲情网站iwww九文堂 | 西西人体www44rt大胆高清 | 无码av中文字幕免费放 | 娇妻被黑人粗大高潮白浆 | 日本一卡2卡3卡四卡精品网站 | 亚洲中文字幕无码中文字在线 | 国内少妇偷人精品视频免费 | 无码av免费一区二区三区试看 | 领导边摸边吃奶边做爽在线观看 | 精品日本一区二区三区在线观看 | 久久精品国产99精品亚洲 | 亚洲一区av无码专区在线观看 | 香港三级日本三级妇三级 | 国内综合精品午夜久久资源 | 麻豆人妻少妇精品无码专区 | 少妇人妻大乳在线视频 | 欧美成人免费全部网站 | 欧美性生交xxxxx久久久 | 成人无码精品1区2区3区免费看 | 欧美日韩综合一区二区三区 | 欧美肥老太牲交大战 | 欧美高清在线精品一区 | 自拍偷自拍亚洲精品被多人伦好爽 | 好爽又高潮了毛片免费下载 | 中文字幕 人妻熟女 | 99er热精品视频 | 无码人妻精品一区二区三区下载 | 亚洲国产av美女网站 | 国产精品亚洲а∨无码播放麻豆 | 国产情侣作爱视频免费观看 | 美女张开腿让人桶 | 亚洲一区二区三区偷拍女厕 | 红桃av一区二区三区在线无码av | aⅴ亚洲 日韩 色 图网站 播放 | 午夜性刺激在线视频免费 | ass日本丰满熟妇pics | 国产精品无码一区二区桃花视频 | 天天躁日日躁狠狠躁免费麻豆 | 欧美丰满熟妇xxxx | 国产精品久久久久久久影院 | 亚洲а∨天堂久久精品2021 | 无码帝国www无码专区色综合 | 夜夜夜高潮夜夜爽夜夜爰爰 | 乱码av麻豆丝袜熟女系列 | 在线播放无码字幕亚洲 | 又紧又大又爽精品一区二区 | 国产精品久久国产精品99 | 300部国产真实乱 | 国产免费久久久久久无码 | 亚洲欧美国产精品专区久久 | 3d动漫精品啪啪一区二区中 | 国产成人无码区免费内射一片色欲 | 最新国产麻豆aⅴ精品无码 | 国产无遮挡吃胸膜奶免费看 | 国产偷国产偷精品高清尤物 | 亚洲の无码国产の无码步美 | 最新国产乱人伦偷精品免费网站 | 亚洲 欧美 激情 小说 另类 | 久久99精品国产.久久久久 | 久久久精品欧美一区二区免费 | 亚洲区小说区激情区图片区 | 国产精品99爱免费视频 | 九九久久精品国产免费看小说 | 中文字幕无码日韩专区 | 国产成人一区二区三区在线观看 | 亚洲热妇无码av在线播放 | 欧美日本日韩 | 色欲综合久久中文字幕网 | 欧洲极品少妇 | 国产精品亚洲综合色区韩国 | 少妇被黑人到高潮喷出白浆 | 少妇的肉体aa片免费 | 少妇高潮一区二区三区99 | 性欧美牲交在线视频 | 奇米影视7777久久精品 | v一区无码内射国产 | 伊人久久大香线焦av综合影院 | 亚洲 高清 成人 动漫 | 午夜精品一区二区三区在线观看 | 国产午夜无码视频在线观看 | 亚洲精品美女久久久久久久 | 成人免费无码大片a毛片 | 欧美人与动性行为视频 | 亚洲国产成人av在线观看 | 亚洲日韩av一区二区三区中文 | 爆乳一区二区三区无码 | 熟女体下毛毛黑森林 | 无码任你躁久久久久久久 | 牲交欧美兽交欧美 | 丰满岳乱妇在线观看中字无码 | 国产在线aaa片一区二区99 | 成人欧美一区二区三区黑人免费 | 捆绑白丝粉色jk震动捧喷白浆 | 日产精品99久久久久久 | 亚洲欧洲日本无在线码 | 亚洲精品国偷拍自产在线观看蜜桃 | 捆绑白丝粉色jk震动捧喷白浆 | 精品国产麻豆免费人成网站 | 国产乱人伦av在线无码 | 久久99精品国产.久久久久 | 国产日产欧产精品精品app | 一区二区传媒有限公司 | 99er热精品视频 | 久久久久人妻一区精品色欧美 | 欧美日韩色另类综合 | 丰满妇女强制高潮18xxxx | 亚洲va中文字幕无码久久不卡 | 亚洲综合精品香蕉久久网 | 欧美老人巨大xxxx做受 | 国产欧美精品一区二区三区 | 一本一道久久综合久久 | 久久久久成人精品免费播放动漫 | 国产成人无码区免费内射一片色欲 | 成人综合网亚洲伊人 | 欧美怡红院免费全部视频 | 99精品国产综合久久久久五月天 | 亚洲国产精品美女久久久久 | 水蜜桃亚洲一二三四在线 | 成人无码视频在线观看网站 | 成人免费视频视频在线观看 免费 | 日本丰满熟妇videos | 欧美真人作爱免费视频 | 天堂无码人妻精品一区二区三区 | 四虎永久在线精品免费网址 | 久久久久久久久888 | 亚洲国产精品一区二区第一页 | 亚洲一区二区观看播放 | 人妻夜夜爽天天爽三区 | 国产精品对白交换视频 | 大乳丰满人妻中文字幕日本 | 精品国产麻豆免费人成网站 | 亚洲乱码中文字幕在线 | 98国产精品综合一区二区三区 | 久久99精品国产.久久久久 | 天天摸天天碰天天添 | 亚洲小说春色综合另类 | 亚洲成a人一区二区三区 | 免费乱码人妻系列无码专区 | 麻豆精品国产精华精华液好用吗 | 最新国产乱人伦偷精品免费网站 | 精品久久久中文字幕人妻 | 东京热男人av天堂 | 精品无人区无码乱码毛片国产 | 荡女精品导航 | 2019午夜福利不卡片在线 | 亚洲自偷自拍另类第1页 | 人妻少妇精品视频专区 | 丰满少妇弄高潮了www | 久久久久久久女国产乱让韩 | 人人爽人人澡人人高潮 | 乱中年女人伦av三区 | 中文字幕无码免费久久99 | 一本大道伊人av久久综合 | 欧美精品国产综合久久 | 中文字幕乱妇无码av在线 | 99久久99久久免费精品蜜桃 | 国产超级va在线观看视频 | 欧洲欧美人成视频在线 | 黑人大群体交免费视频 | 丝袜美腿亚洲一区二区 | 精品久久久久香蕉网 | 内射巨臀欧美在线视频 | 无码人妻丰满熟妇区五十路百度 | 亚洲色成人中文字幕网站 | 国产在线一区二区三区四区五区 | 色 综合 欧美 亚洲 国产 | 婷婷五月综合激情中文字幕 | 国产精品久久精品三级 | 亚洲日韩精品欧美一区二区 | 亚洲自偷自拍另类第1页 | 日韩视频 中文字幕 视频一区 | 久久综合九色综合97网 | 免费网站看v片在线18禁无码 | 日本精品人妻无码免费大全 | 亚洲国产高清在线观看视频 | 人妻插b视频一区二区三区 | 男女性色大片免费网站 | 久久精品无码一区二区三区 | 日本一区二区三区免费播放 | 国产午夜福利100集发布 | 国产亚洲精品久久久久久久 | 亚洲七七久久桃花影院 | 国产成人久久精品流白浆 | 性生交大片免费看女人按摩摩 | 亚洲日本在线电影 | 亚洲熟妇色xxxxx欧美老妇 | 伊人久久大香线蕉av一区二区 | 亚洲爆乳精品无码一区二区三区 | 中文字幕色婷婷在线视频 | 蜜臀aⅴ国产精品久久久国产老师 | 久久人人爽人人爽人人片av高清 | 国内精品久久毛片一区二区 | 亚洲阿v天堂在线 | 1000部啪啪未满十八勿入下载 | 日日夜夜撸啊撸 | 久久综合狠狠综合久久综合88 | 亚洲熟妇自偷自拍另类 | 国产精品久久久久无码av色戒 | 99久久久无码国产aaa精品 | 成人三级无码视频在线观看 | 亚洲一区二区三区国产精华液 | 一个人看的视频www在线 | 久久久中文久久久无码 | 亚洲阿v天堂在线 | 三级4级全黄60分钟 | 亚洲一区av无码专区在线观看 | 欧美日韩一区二区免费视频 | 亚洲午夜福利在线观看 | 国产亚洲精品久久久闺蜜 | 中文字幕日韩精品一区二区三区 | 老子影院午夜伦不卡 | 久久久久亚洲精品中文字幕 | 精品日本一区二区三区在线观看 | 国产人妻大战黑人第1集 | 国产精品久久国产三级国 | 欧美老妇交乱视频在线观看 | 人妻少妇精品无码专区动漫 | 久久www免费人成人片 | 欧美国产日产一区二区 | 小sao货水好多真紧h无码视频 | 131美女爱做视频 | 波多野结衣高清一区二区三区 | 野外少妇愉情中文字幕 | 女人被爽到呻吟gif动态图视看 | 国产精品嫩草久久久久 | 天天摸天天透天天添 | 亚洲无人区一区二区三区 | 国产婷婷色一区二区三区在线 | 欧美野外疯狂做受xxxx高潮 | 久久久久av无码免费网 | 久久精品国产日本波多野结衣 | 人妻天天爽夜夜爽一区二区 | 2019午夜福利不卡片在线 | 日本护士xxxxhd少妇 | 国产欧美精品一区二区三区 | 国内揄拍国内精品人妻 | 中文字幕无码视频专区 | 久久综合给久久狠狠97色 | 夜夜高潮次次欢爽av女 | 久久精品99久久香蕉国产色戒 | 国产在线无码精品电影网 | 日本熟妇大屁股人妻 | 亚洲熟妇自偷自拍另类 | 亚洲中文字幕va福利 | 曰本女人与公拘交酡免费视频 | 少妇人妻av毛片在线看 | 久久99精品国产麻豆 |