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

把Docker鏡像當作桌面系統來用

開發 前端
近些年來,Docker由于提供了一套非常方便地創建并運行應用容器的方法,而在全球掀起了一股容器化的熱潮。容器通過將軟件及其所需要的運行環境一同打包帶走,從而將人們從依賴的苦海中拯救出來。

博主一直都很喜歡思考怎樣管理裝在自己電腦上的桌面系統,這篇算是前作能當主力,能入虛擬機,還能隨時打包帶走,Linux就是這么強大的后續探索吧。

近些年來,Docker由于提供了一套非常方便地創建并運行應用容器的方法,而在全球掀起了一股容器化的熱潮。容器通過將軟件及其所需要的運行環境一同打包帶走,從而將人們從依賴的苦海中拯救出來。雖然Docker設計的初衷并不是操作系統容器,更不是一個直接運行在裸機上的操作系統,但是docker這套強大的工具也會給我們管理操作系統帶來巨大的便利。

[[216541]]

為什么要用Docker鏡像當作桌面系統?這就要從普通桌面系統的不方便之處說起。通常我們都擁有不止一臺電腦,我們希望這些電腦能夠保持一致。這里所說的“一致”,用一個例子來講,就是我在一臺電腦上編輯了一半的文件,不需要認為拷貝到另一臺電腦上,而是直接打開電腦就能編輯。如果這個文件只是一個純文本文件,或者一個Microsoft Word文檔,那么實現這個一致性非常簡單:把文件扔到Dropbox之類的云同步盤就好。然而對于專業用戶來講,這種一致性的保持并非單純的扔到Dropbox里面那么簡單:比如說你最近忙于一個項目,這個項目要用到若干編程語言,然后在電腦里裝了一堆庫,一堆工具軟件,有圖形界面的,也有命令行的。在工作的過程中,你有可能不斷安裝新的工具,或者決定棄用某個之前計劃使用的庫或者工具。要讓你的工作在你的若干臺電腦上都能工作,就要一直維護不同機器的環境的一致性:在一臺機器上安裝的工具,要在所有機器上重新安裝一遍。在一臺機器上升級了的庫,要在所有機器上都升級,稍微有所差池,就有可能出現某個腳本/程序在一臺機器上跑的好好的,在另一臺機器上卻無法運行的問題。

docker哲學

不熟悉docker的讀者可以戳這里來了解docker。Docker的使用非常簡單:我們通過寫一個Dockerfile,在Dockerfile中寫入相應的命令來安裝以及配置我們想要的庫跟工具。不熟悉docker的讀者可以看一下下面這個抄來的Dockerfile的例子,來了解一下Dockerfile長啥樣子:

 

  1. FROM ubuntu 
  2. MAINTAINER Kimbro Staken 
  3. RUN apt-get install -y software-properties-common python 
  4. RUN add-apt-repository ppa:chris-lea/node.js 
  5. RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ precise universe" >> /etc/apt/sources.list 
  6. RUN apt-get update 
  7. RUN apt-get install -y nodejs 
  8. #RUN apt-get install -y nodejs=0.6.12~dfsg1-1ubuntu1 
  9. RUN mkdir /var/www 
  10. ADD app.js /var/www/app.js 
  11. CMD ["/usr/bin/node""/var/www/app.js"

有了Dockerfile,只需要docker build一條命令就可以創建一個docker鏡像。同時Docker公司提供一個叫做DockerHub的服務,可以免費托管公開鏡像。只需要使用docker push就可以直接把鏡像上傳到DockerHub。在不同的電腦上只需要docker pull就可以從DockerHub獲取***版的鏡像。DockerHub還支持自動構建,通過把DockerHub帳號跟GitHub帳號關聯起來,就可以讓DockerHub在GitHub上面的Dockerfile出現更改的時候自動重新生成鏡像。

本文開頭所說的這種一致性的維護,docker實際上已經在給我們提供答案了:我們通過構建一個docker鏡像,讓這個鏡像包含著我們項目所需要的所有的一切。這樣的話,我們開發,測試,部署等等一切任務,都可以在先用docker run來開啟一個容器,然后在容里面進行所有的工作。當我們決定修改運行環境,比如引入新的庫的時候,就在Dockerfile中進行相應的修改,重新生成鏡像,然后在不同的機器上用docker pull來更新一下就好。這種使用哲學,通過一個中心化了的倉庫,非常優雅地解決了不同機器上環境一致的問題。美中不足的是,并不是所有的程序都能在容器里運行的,也并不是所有的程序都方便在容器里運行的。如果你用到了圖形界面的程序,或者說是一些系統級別的程序,那么在容器里面使用這些程序會麻煩很多,有的甚至根本無法實現。于是自然地就會想到,如果我們能夠在每次開機的時候,直接把某個docker生成的鏡像掛載起來當根目錄來使用,就可以讓這個鏡像直接在裸機上(而不是在容器中)運行,來做我們的日常桌面系統了。

這種做法,除了在保持一致性方面帶來的便利以外,還有一些其他的好處:

  1. 整個系統保存在云端,本地的內容僅僅是云端的一份緩存而已,這樣就完全沒有必要定期對系統進行備份了。
  2. 你的系統是如何從零開始一步一步配置成你想要的樣子的,所有的一切都清晰地展現在Dockerfile里面。Dockerfile就是你***的筆記。
  3. 完全不用擔心系統長時間使用產生一些殘余的垃圾文件、或者某些系統中某些程序的數據出現損壞,因為每次開機,我們用的都是一個全新的系統。
  4. 要裝一臺新機器,并不需要從頭安裝操作系統,只要從DockerHub拉取鏡像拿來用就好,安裝系統這個過程變得極其方便。
  5. 系統更新的過程實際上就是根據Dockerfile從***的軟件倉庫重新從頭安裝生成docker鏡像的過程,不會出現某些更新遇到文件沖突或者依賴無法處理,需要人為干預才能完成的問題。

docker存儲驅動的工作原理

Docker的存儲驅動官方有介紹其工作原理,這里只是簡單概括一下。Docker使用了層的概念,docker在構建鏡像的時候,會逐行執行我們的Dockerfile中的每一行,每執行一行的時候,docker就會創建出一個新的層來存放新的內容。當我們執行docker pull或者docker push的時候,docker實際上傳跟下載的是這些層之間的增量。每當執行docker run,docker就會把這些下載下來的層組合到一起,組合成一個完整的鏡像,然后新建一個讀寫層,所有運行過程中的寫入都會被寫入到讀寫層中,而鏡像本身則是保持只讀,不會被更改。“層”這個概念具體實現起來,根據docker目錄(通常為/var/lib/docker這個目錄)所在的文件系統的不同而不同,具體的實現在docker中被稱為graph driver,docker自帶的graph driver包括aufs、 overlay、btrfs、zfs、devicemapper等。這些graph driver大多使用了寫時復制的技術,這樣在把各個層組合在一起的過程不需要重新拷貝一份數據,實際的拷貝是在寫入的時候發生的。

由于筆者使用的是btrfs,所以本文就以btrfs為例子來介紹怎么讓系統啟動到docker鏡像上去。btrfs是一個寫時復制的系統,由于docker的鏡像是由一個一個的層疊在一起組成的,docker在使用btrfs的時候,每往上疊一層,docker就會創建一個原來層的快照,然后把新層的內容寫到快照里面去。然后docker會在從鏡像創建容器的時候,給鏡像的最頂層做個快照,把這個快照當作容器讀寫層來用。

啟動到docker鏡像中去

明白了docker存儲驅動的工作原理,還需要知道Linux的啟動過程才能達成我們的目標。Linux在啟動的時候,一般會讓啟動器給內核裝載一個內存盤initramfs,然后內核完成簡單的早期初始化以后,就會解壓內存盤的內容到根目錄/,然后啟動內存盤中的init程序(一般為/init),這個init程序會進行進一步的初始化(比如說加載文件系統的驅動,對文件系統進行fsck等),這一步初始化完成了以后,這個init程序就會根據內核選項中的root、rootflags等內容掛載真正的根目錄,然后通過switch_root程序啟動真正根目錄中的init程序,這個init程序則會完成***的初始化工作,比如掛載fstab、加載圖形界面等等。很多發行版都提供制作initramfs的工具,比如archlinux的mkinitcpio,這些工具通常都是模塊化的,允許用戶自己添加hook。

讓系統啟動到docker鏡像所需要的知識已經完備了。思路也清晰了:通過給initramfs中添加hook,讓initramfs中的init在掛載root之前從docker本地緩存中的鏡像中創建出一個快照作為讀寫層,然后把這個讀寫層當作真正的root來掛載。具體操作上,在啟動管理器里面寫啟動項的內核選項的時候,root就寫/var/lib/docker所在的分區,而rootflags里面至少要有一項subvol=XXXXX,其中XXXXX是我們打算創建的讀寫層的位置。然后重中之重則是,寫一個hook,這個hook干的事情是:找到想要的docker鏡像對應的btrfs子卷,給這個子卷創建一個快照,命名為XXXXX(跟內核選項中的名字保持一致)。這樣的話,在Linux把控制權交給initramfs中的init程序以后,init程序會先去從docker緩存中的子卷創造出XXXXX快照,然后把XXXXX快照當作root來掛載以及進行接下來的操作。如果讀者跟筆者一樣使用Arch Linux的話,那么所有的這些工作筆者已經做了,讀者可以直接拿來用。

筆者的源碼位于GitHub: https://github.com/zasdfgbnm/mkinitcpio-docker-hooks ,同時讀者也可以直接從AUR中搜索mkinitcpio-docker-hooks來安裝筆者的hook。下面就來介紹一下這個hook的使用方法。

mkinitcpio-docker-hooks的使用

mkinitcpio-docker-hooks的使用流程大概分為如下幾步:

  1. 確保你的/var/lib/docker位于某個btrfs分區中
  2. 準備一個適合在裸機上啟動的docker鏡像
  3. 然后在這個鏡像中安裝并配置mkinitcpio-docker-hooks
  4. 準備內核跟initramfs
  5. 準備top layer的內容
  6. 設置啟動管理器

docker鏡像的準備

要想啟動到docker鏡像中去,首先你得有一個適合在裸機上啟動的docker鏡像。很多docker鏡像,為了減小鏡像的大小,是不會附帶只有裸機上才能用到的軟件包(比如dhcpcd)的,所以讀者可能需要在Dockerfile中手動安裝這些軟件包,對于Arch Linux來講,只需要安裝base組就可以了。由于接下來要安裝mkinitcpio-docker-hooks,這里推薦使用一個已經內置yaourt的鏡像,筆者使用的是自己的archlinux-yaourt鏡像zasdfgbnm/archlinux-yaourt。所以,Dockerfile的開頭看起來是這個樣子的:

 

  1. FROM zasdfgbnm/archlinux-yaourt 
  2. USER root 
  3. RUN pacman -Syu --noconfirm base 

作為示例,這里就不安裝base之外的其他軟件了,讀者請自己根據需要安裝其他軟件。

安裝并配置mkinitcpio-docker-hooks

mkinitcpio-docker-hooks的安裝是在docker里面而不是當前運行在裸機上的系統中進行的。之所以要把這個軟件包安裝在docker鏡像里面,很重要的原因是因為Linux內核不提供ABI的穩定性,所以內核模塊跟內核的版本必須嚴格對應,不然模塊是無法加載的。為了保持這種一致性,我們采取的措施是,在docker里面安裝mkinitcpio-docker-hooks,在docker中生成initramfs,并且在啟動的時候用鏡像里面的內核啟動,就可以確保內核、initramfs中的模塊、啟動到鏡像以后的/lib/modules三者保持一致。安裝過程在Dockerfile中的寫法如下:

  1. RUN sudo -u user yaourt -S --noconfirm mkinitcpio-docker-hooks 

安裝完了mkinitcpio-docker-hooks以后還需要配置,配置文件在/etc/docker-btrfs.json,初始內容如下:

 

  1.     "docker_image""archlinux/base"
  2.     "docker_tag""latest" 

我們需要做的就是把這兩個變量的值替換為我們想要的值,比如說這里我打算把我的docker鏡像的名字叫做“sample_image”。同時,我們還需要在/etc/mkinitcpio.conf中添加docker-btrfs這個hook。

綜上,可以在Dockerfile中使用如下命令來配置:

 

  1. RUN sed -i 's/archlinux\/base/sample_image/g' /etc/docker-btrfs.json  
  2. RUN perl -i -p -e 's/(?<=^HOOKS=\()(.*)(?=\))/$1 docker-btrfs/g' /etc/mkinitcpio.conf 

現在,我們有了一個完整的示例Dockerfile了:

 

  1. FROM zasdfgbnm/archlinux-yaourt 
  2. USER root 
  3. RUN pacman -Syu --noconfirm base 
  4. RUN sudo -u user yaourt -S --noconfirm mkinitcpio-docker-hooks 
  5. RUN sed -i 's/archlinux\/base/sample_image/g' /etc/docker-btrfs.json 
  6. RUN perl -i -p -e 's/(?<=^HOOKS=\()(.*)(?=\))/$1 docker-btrfs/g' /etc/mkinitcpio.conf 

只需要通過docker build . -t sample_image就可以構建自己的鏡像了。

準備內核跟initramfs

鏡像生成好了以后,下一步就是準備內核跟構建initramfs了。注意這一步操作盡量在你打算用來啟動docker鏡像的機器上進行,因為mkinitcpio會自動根據機器把相應的內核模塊放入initramfs中去,如果在別的機器上進行的話,那就可能會有一些驅動沒有被自動裝入initramfs中。如前所述,這一步的工作是在docker容器中進行的。首先運行容器并開啟一個shell:

  1. docker run -v $(pwd):/workspace -w /workspace -it sample_image bash 

然后在容器中執行如下命令:

 

  1. mkinitcpio -p linux 
  2. cp /boot/* . 
  3. exit 

然后就可以在當前目錄下看到準備好的initramfs-linux-fallback.img、initramfs-linux.img以及vmlinuz-linux了。

準備top layer的內容

Top layer是mkinitcpio-docker-hooks引入的新概念,它指的是某個驅動器中的某個目錄,這個目錄會在啟動的時候讀寫層創建之后,真正的root掛載之前,通過busybox的cp -a命令整個拷貝到讀寫層里面去。為什么需要top layer呢?因為我們需要在多臺機器上啟動同一個鏡像,而不同機器上的往往會根據需要配置不同的配置文件,比如/etc/fstab以及/etc/X11/xorg.conf。另外,DockerHub免費賬戶上的鏡像都是公開的,/etc/passwd、/etc/shadow等的私密性文件也不適合放在鏡像里面存儲。

準備top layer的內容,實際上就是找一個文件夾,把需要單獨配置的文件,按照從根目錄算起的相對路徑存放在這個文件夾里面。比如說如果你想給某臺機器單獨配置/etc/fstab,那么你就應該在top layer的目錄中添加etc/fstab這個文件。這里推薦的具體的操作流程是:首先通過docker run -v $(pwd):/workspace -w /workspace -it sample_image bash進入容器中的shell,然后在其中做各種配置,比如useradd ...,完了以后把新生成的配置文件拷貝到top layer的文件夾中去

設置啟動管理器

設置好了top layer以后,我們基本上可以算是萬事具備只差東風了。我們只需要簡單設置一下啟動管理器就可以啟動我們的系統了。這里以refind為例子,這里假設我們的所有東西放在一個label為“linux”的btrfs分區中,docker目錄(也就是你系統啟動以后會掛載到/var/lib/docker的目錄)存放在這個分區根目錄下的一個叫做“docker”的子卷中,而內核、initramfs以及top layer都是位于分區根目錄下的“boot_docker”文件夾中,而我們希望創建的讀寫層名字叫做“docker_rwlayer”,那么相應的refind.conf中的菜單項的代碼如下:

 

  1. menuentry archlinux-docker { 
  2.         icon EFI/refind/icons/os_arch.png 
  3.         volume linux 
  4.         loader boot_docker/vmlinuz-linux 
  5.         initrd boot_docker/initramfs-linux.img 
  6.         options "root=LABEL=linux rootflags=subvol=docker_rwlayer rw docker_path=docker toplayer=LABEL=linux toplayer_path=boot_docker" 

其中內核選項中,我們通過root來指定docker目錄所在的分區,rootflags中的subvol來指定讀寫層的位置,docker_path來指定docker目錄在root中的相對位置;通過toplayer來指定top layer目錄所在的分區,toplayerflags來指定top layer所在分區的掛載選項,toplayer_path來指定top layer的目錄在toplayer分區中的相對位置。

一切就緒,重啟并享受吧!

責任編輯:未麗燕 來源: 程序師
相關推薦

2021-04-23 13:20:13

Redis數據庫代碼

2009-04-17 16:16:53

程序人生職場

2013-09-04 13:51:02

2021-04-27 08:44:12

Linux運維Linux系統

2009-11-23 10:08:45

BlackBerryLinux調制解調器

2021-08-10 07:41:24

JavaDocker鏡像

2011-08-05 09:54:40

虛擬桌面虛擬化

2013-02-18 09:24:21

2011-12-15 11:04:16

2021-08-23 08:30:30

Docker BuildKit 架構

2021-06-17 09:50:45

Docker Buil系統架構Linux

2010-03-31 17:36:10

CentOS系統

2024-11-14 13:19:21

Docker容器開發

2014-12-15 09:16:10

DockerDaoCloud鏡像部署

2021-05-18 06:05:51

容器WebtopsLinux

2021-09-02 07:04:45

Docker鏡像語言

2020-01-02 10:34:32

Linux虛擬化Docker

2019-07-16 14:44:52

DockerMySQL操作系統

2009-12-15 16:03:38

桌面系統

2017-05-31 14:24:49

點贊
收藏

51CTO技術棧公眾號

精品久久久久久中文字幕2017| 亚洲最大av在线| 国产调教在线观看| 国产精品一区二区精品| 亚洲一区二区三区在线| 免费毛片一区二区三区久久久| 影音先锋黄色网址| 激情久久久久久| 一本一道久久a久久精品逆3p| 欧美污在线观看| 日本免费一区二区六区| 国产精品成人一区二区艾草| 国产一区二区中文字幕免费看| 欧美三级网站在线观看| 国产一区亚洲| 中文字幕精品在线| 95视频在线观看| 一二三四视频在线中文| 亚洲视频一区在线观看| 欧美中日韩免费视频| www.天堂在线| 久久99精品久久只有精品| 5278欧美一区二区三区| 欧美精品xxxxx| 成人一二三区| 亚洲欧美精品中文字幕在线| 无码人妻一区二区三区一| 999国产精品亚洲77777| 欧美午夜精品伦理| 无码粉嫩虎白一线天在线观看 | 欧美 国产 精品| 国产视频第一页在线观看| 国产成人综合在线| 91精品视频在线| 91视频在线视频| 国产亚洲精品bv在线观看| 九九热最新视频//这里只有精品| 久久午夜精品视频| 奇米狠狠一区二区三区| 日韩高清不卡av| 精品国产人妻一区二区三区| 成人性生交大片免费看中文视频| 欧美一区二区在线视频| 538任你躁在线精品免费| 欧美电影免费观看| 欧美性高潮在线| 播放灌醉水嫩大学生国内精品| 24小时免费看片在线观看| 亚洲午夜免费视频| 黄网站色视频免费观看| 性欧美ⅴideo另类hd| 亚洲精品乱码久久久久| 轻轻草成人在线| 欧美人与性动交| 青春草免费视频| 欧美三级视频| 欧美激情精品久久久久久变态| 破处女黄色一级片| 自拍视频亚洲| 欧美激情aaaa| 国产无套粉嫩白浆内谢| 日韩一区二区久久| 欧美一级在线亚洲天堂| www.色国产| 秋霞av亚洲一区二区三| 91丝袜美腿美女视频网站| 国产美女永久免费| 成人禁用看黄a在线| 国产一区二区三区奇米久涩 | 亚洲美女av黄| 国产又粗又猛又爽又黄av| 日韩成人精品一区| 欧美精品做受xxx性少妇| 欧美日韩偷拍视频| 99热精品在线| 国产精品网站视频| 亚洲av无码国产精品久久不卡| 成人18精品视频| 看高清中日韩色视频| 国产福利在线视频| 亚洲人吸女人奶水| 拔插拔插海外华人免费| 小h片在线观看| 欧美日韩欧美一区二区| 91人妻一区二区三区| 成午夜精品一区二区三区软件| 亚洲国产精品va| 91激情视频在线观看| 亚洲综合激情在线| 欧美最近摘花xxxx摘花| 蜜桃视频久久一区免费观看入口| 精品视频亚洲| 久久手机精品视频| 亚洲精品77777| 美女国产一区二区| 国产高清在线一区| 99精品欧美一区二区| 一级黄色录像大片| 韩国女主播成人在线| 精品国产一区二区三区四区vr | 日韩中文字幕av| 日本a在线观看| 美女一区二区三区| 激情小说网站亚洲综合网| 日本在线观看免费| 欧美日韩国产精品一区二区三区四区 | 在线激情小视频| 精品电影在线观看| 色偷偷中文字幕| 国产麻豆一区二区三区精品视频| 欧美人在线观看| 在线播放国产一区| www国产成人| 神马午夜伦理影院| 九色成人搞黄网站| 日韩精品极品视频| 精品国产乱码久久久久久鸭王1| 亚洲永久网站| 国产精品二区三区四区| 在线看的av网站| 色综合久久天天综合网| 特黄特色免费视频| **女人18毛片一区二区| 国产成人精品电影| 天天综合网天天综合| 一区二区三区丝袜| jizz18女人| 欧美日韩激情| 热久久免费视频精品| 日韩一区免费视频| 亚洲自拍偷拍欧美| 中文字幕 欧美 日韩| 999久久久精品国产| 国产精品日韩专区| 美州a亚洲一视本频v色道| 五月婷婷久久综合| 亚洲成a人片在线www| 久久久久久久久久久久久久久久久久| 国产精品福利网站| 搞黄视频在线观看| 日本高清无吗v一区| 中文字幕一区二区久久人妻网站| 激情久久中文字幕| 亚洲成av人影院在线观看| 日韩欧美一区二区三区四区| 欧美久久天堂| 日韩电影网在线| 日韩欧美三级视频| 99视频一区二区| 日本网站免费在线观看| 久久综合五月婷婷| 97精品在线视频| 水莓100在线视频| 欧美日韩国产综合视频在线观看中文| 国产精品久久久久久久无码| 99热在线精品观看| 美日韩精品免费| 浪潮色综合久久天堂| 在线精品91av| 国产又爽又黄免费软件| 亚洲毛片av在线| 99久久久无码国产精品性波多 | 免费激情视频在线观看| 菠萝蜜一区二区| 国产欧美日韩免费看aⅴ视频| 黄网站在线播放| 欧美本精品男人aⅴ天堂| 久久国产精品波多野结衣av| www.欧美精品一二区| 国产av无码专区亚洲精品| 国产一卡不卡| 成人日韩av在线| 狠狠躁少妇一区二区三区| 国产婷婷成人久久av免费高清| 久久国产乱子伦精品| 亚洲国产高清aⅴ视频| 日韩欧美理论片| 激情婷婷亚洲| 日韩av高清| 国产69精品久久| 国产自产高清不卡| 国产又大又长又粗又黄| 亚洲精品aaa| 欧美国产日韩中文字幕在线| 亚洲精品18p| 欧美日韩人人澡狠狠躁视频| 青青草自拍偷拍| 国产成人在线电影| 99色精品视频| 国产黄色片免费观看| 视频在线不卡免费观看| 99视频日韩| 国产成人免费9x9x人网站视频| 久久九九亚洲综合| 天天操天天干天天舔| 精品婷婷伊人一区三区三| 免费人成年激情视频在线观看| 99久久99久久精品国产片果冻| 手机看片一级片| 亚洲乱码视频| 一区二区视频在线观看| 欧美顶级毛片在线播放| 成人午夜在线影院| 神马久久资源| 欧美激情视频在线免费观看 欧美视频免费一| 午夜在线观看视频18| 欧美男男青年gay1069videost| 中日韩精品视频在线观看| 国产精品另类一区| 三级男人添奶爽爽爽视频| 极品少妇xxxx精品少妇偷拍| 99久久久无码国产精品6| 欧美三级不卡| 波多野结衣三级在线| 伊人成综合网yiren22| 99在线免费观看视频| 成人在线视频免费| 日韩美女在线播放| 亚洲性受xxx喷奶水| 久久久久九九九九| 日韩av影视大全| av一区二区高清| 精品无码久久久久久久动漫| 亚洲精品无播放器在线播放| 日韩av电影手机在线观看| 暖暖在线中文免费日本| 美女欧美视频在线观看免费 | 成年人视频免费在线观看| 精品精品欲导航| 国产精品无码免费播放| 在线精品视频一区二区三四| 日韩精品在线免费看| 亚洲一区在线观看网站| 亚洲综合网在线| 国产欧美精品一区aⅴ影院| 中日韩精品一区二区三区| 成人动漫av在线| xxxxwww一片| 国产精品免费电影| 色戒汤唯在线| 韩国福利视频一区| 蜜臀av国内免费精品久久久夜夜| 国产一区二区亚洲| 欧美在线日韩在线| 男人久久天堂| 136fldh精品导航福利| 麻豆成全视频免费观看在线看| 国语自产在线不卡| av免费不卡国产观看| 国产+人+亚洲| www.色在线| 欧美亚洲视频在线观看| 欧美在线极品| 国产成人免费91av在线| 日韩精品影片| 国产精品日日摸夜夜添夜夜av| 丰满少妇一区| 亚洲永久在线观看| 99精品国产一区二区三区2021 | 成人激情久久| 91成人理论电影| 久久1电影院| 蜜桃导航-精品导航| 日韩高清影视在线观看| 欧美精品久久久| 青青一区二区三区| 日韩最新中文字幕| 伊人久久大香线蕉综合热线| 成人中文字幕在线播放| 日韩av高清在线观看| 国产乱叫456| 成人性生交大片| xxxxx在线观看| 亚洲免费毛片网站| 五月天婷婷丁香| 色伊人久久综合中文字幕| 中文字幕第三页| 日韩精品一区二区三区在线| 五月婷婷狠狠干| 深夜精品寂寞黄网站在线观看| 三级网站视频在在线播放| 2019中文在线观看| 日韩综合av| 久久99精品久久久久子伦| 日本不卡电影| 老太脱裤子让老头玩xxxxx| 久久在线精品| 免费高清视频在线观看| 91色porny在线视频| 国产精品18在线| 亚洲国产另类av| 中文字幕乱码一区二区 | 日韩黄色大片网站| 久久人妻无码一区二区| 老司机一区二区三区| www.偷拍.com| 91首页免费视频| 91久久久久久久久久久久久久| 亚洲一区二区不卡免费| 亚洲字幕av一区二区三区四区| 精品精品国产高清一毛片一天堂| 成人免费视频| 97视频在线观看网址| 在线播放成人| 欧美在线日韩精品| 亚洲国产影院| 深爱五月综合网| 国产欧美一区二区三区网站| 豆国产97在线 | 亚洲| 欧美日韩精品免费观看视频| 水中色av综合| 午夜精品一区二区三区在线播放 | 欧美成人精品1314www| av大片在线播放| 欧美在线视频观看| 国产精品网站在线看| 黄色一级视频播放| 久久精品国产免费| 99久久久无码国产精品衣服| 五月激情综合色| 黄色av中文字幕| 欧美成人黑人xx视频免费观看| 福利一区二区| 热re99久久精品国99热蜜月 | 日本美女高潮视频| 91美女福利视频| 精品在线视频观看| 日韩区在线观看| 精品国产99久久久久久| 国产欧亚日韩视频| 欧美精品一区二区三区中文字幕| 久久精品国产精品亚洲色婷婷| 成年人网站91| 日本一区二区不卡在线| 精品国偷自产国产一区| 91精品久久| 亚洲综合中文字幕在线| 亚洲先锋影音| 午夜免费视频网站| 亚洲视频一区二区免费在线观看| 亚洲一级黄色大片| 日韩在线免费视频| 美女视频一区| 一区二区三区四区久久| 久久99精品国产麻豆不卡| 中国1级黄色片| 欧美欧美午夜aⅴ在线观看| 一本一道波多野毛片中文在线 | 蜜桃tv一区二区三区| 国产又大又硬又粗| 国产欧美一区二区三区鸳鸯浴| 超碰在线观看91| 在线播放日韩欧美| 国产日韩久久久| 91偷拍与自偷拍精品| 日本三级黄色大片| 日韩成人在线电影网| 在线天堂中文资源最新版| 欧美连裤袜在线视频| 日韩电影在线看| 一区二区三区在线播放视频| 制服丝袜亚洲色图| 青青草原av在线| 久久99精品久久久久久秒播放器| 鲁大师成人一区二区三区| xxxxx99| 91精品一区二区三区在线观看| 五月花成人网| 久久国产一区二区| 免费不卡在线视频| 91精品国产高清一区二区三蜜臀| 精品sm在线观看| 视频在线日韩| www.黄色网址.com| 99久久精品国产导航| 中文字幕精品无码亚| 欧美巨乳美女视频| 天天做夜夜做人人爱精品 | 一个色综合导航| 韩国一区二区三区视频| 日韩小视频在线播放| 国产欧美一区二区精品久导航 | 日韩国产在线播放| 国产第一亚洲| 无码 制服 丝袜 国产 另类| 国产情人综合久久777777| 精品国产无码一区二区| 欧美最顶级的aⅴ艳星| 欧美残忍xxxx极端| 蜜臀av粉嫩av懂色av| 欧美图区在线视频| 成人性生交大片免费看网站 | 成全电影播放在线观看国语| 99爱精品视频| 日本亚洲天堂网| 五月天综合在线| 久久久av亚洲男天堂| 亚洲第一福利社区| 中文字幕无码毛片免费看| 色综合天天综合|