日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

超值一篇分享,Docker:从入门到实战过程全记录

發(fā)布時(shí)間:2024/8/23 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 超值一篇分享,Docker:从入门到实战过程全记录 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 |?天元浪子

來(lái)源 | CSDN博客

和Docker相關(guān)的概念

想要真正理解Docker,就不得不從虛擬化技術(shù)的發(fā)展歷程說(shuō)起。普遍認(rèn)為虛擬化技術(shù)經(jīng)歷了物理機(jī)時(shí)代、虛擬機(jī)時(shí)代,目前已經(jīng)進(jìn)入到了容器化時(shí)代。可以說(shuō),Docker是虛擬化技術(shù)不斷發(fā)展的必然結(jié)果。

那么,什么是容器呢?容器和虛擬機(jī)有什么不同?Docker和容器又是什么關(guān)系呢?搞明白這幾個(gè)問(wèn)題,Docker的概念就清晰了。

1.1 虛擬機(jī)和容器

借助于VMWare等軟件,可以在一臺(tái)計(jì)算機(jī)上創(chuàng)建多個(gè)虛擬機(jī),每個(gè)虛擬機(jī)都擁有獨(dú)立的操作系統(tǒng),可以各自獨(dú)立的運(yùn)行程序。這種分身術(shù)雖然隔離度高(操作系統(tǒng)級(jí)),使用方便(類似物理機(jī)),但占用存儲(chǔ)資源多(GB級(jí))、啟動(dòng)速度慢(分鐘級(jí))的缺點(diǎn)也是顯而易見(jiàn)的。

相較于虛擬機(jī),容器(Container)是一種輕量型的虛擬化技術(shù),它虛擬的是最簡(jiǎn)運(yùn)行環(huán)境(類似于沙盒)而非操作系統(tǒng),啟動(dòng)速度快(秒級(jí))、占用存儲(chǔ)資源少(KB級(jí)或MB級(jí)),容器間隔離度為進(jìn)程級(jí)。在一臺(tái)計(jì)算機(jī)上可以運(yùn)行上千個(gè)容器,這是容器技術(shù)對(duì)虛擬機(jī)的碾壓式優(yōu)勢(shì)。

1.2 容器、鏡像和Docker

Docker是一個(gè)開(kāi)源的應(yīng)用容器引擎,可以創(chuàng)建容器以及基于容器運(yùn)行的程序。Docker可以讓開(kāi)發(fā)者打包他們的應(yīng)用和依賴包到一個(gè)輕量級(jí)、可移植的容器中,然后發(fā)布到任何流行的Linux機(jī)器上,也可以實(shí)現(xiàn)虛擬化。

聽(tīng)起來(lái)很簡(jiǎn)單,但是在Docker和容器之間,還隱藏著一個(gè)鏡像的概念,令初學(xué)者頗感困惑。本質(zhì)上,Docker鏡像是一個(gè)特殊的文件系統(tǒng),它提供容器運(yùn)行時(shí)所需的程序、庫(kù)、資源、配置等文件。Docker鏡像類似于一個(gè)py文件,它需要Docker的運(yùn)行時(shí)(類似于Python解釋器)運(yùn)行。鏡像被運(yùn)行時(shí),即創(chuàng)建了一個(gè)鏡像的實(shí)例,一個(gè)實(shí)例就是一個(gè)容器。

1.3 Docker 和 k8s

作為容器引擎,Docker為容器化的應(yīng)用程序提供了開(kāi)放的標(biāo)準(zhǔn),使得開(kāi)發(fā)者可以用管理應(yīng)用程序的方式來(lái)管理基礎(chǔ)架構(gòu),實(shí)現(xiàn)快速交付、測(cè)試和部署代碼。隨著容器的大量使用,又產(chǎn)生了如何協(xié)調(diào)、調(diào)度和管理容器的問(wèn)題,Docker的容器編排應(yīng)運(yùn)而生。

k8s是Google開(kāi)源的一個(gè)容器編排引擎,它支持自動(dòng)化部署、大規(guī)模可伸縮、應(yīng)用容器化管理,是一個(gè)開(kāi)源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,k8s的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效,k8s提供了應(yīng)用部署、規(guī)劃、更新、維護(hù)的一種機(jī)制。

Docker和k8sr都是以containerd(容器化標(biāo)準(zhǔn))作為運(yùn)行時(shí),因此使用Docker創(chuàng)建的鏡像完全可以在k8s中無(wú)障礙的使用。

Docker的安裝

2.1 在ubuntu中安裝

在linux系統(tǒng)中安裝Docker非常簡(jiǎn)單,官方為我們提供了一鍵安裝腳本。這個(gè)方法也適用于Debian或CentOS等發(fā)行版。

curl?-sSL?https://get.daocloud.io/docker?|?sh

安裝過(guò)程如果出現(xiàn)超時(shí),不要灰心,多試幾次,總會(huì)成功的。安裝完成后,Docker只能被root用戶使用,可以使用下面的命令取消權(quán)限限制:

sudo?gpasswd?-a?<你的用戶名>?docker

然后,重啟docker服務(wù):

sudo?service?docker?restart

最后,關(guān)閉當(dāng)前的命令行,重新打開(kāi)新的命令行就可以了。

順便提一下,如果在CentOS下安裝,可能會(huì)出現(xiàn)一堆類似于下面的錯(cuò)誤:

問(wèn)題 1: problem with installed package podman-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64- package podman-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed- package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed- package podman-3.0.1-7.module_el8.4.0+830+8027e1c4.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed- package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- cannot install the best candidate for the job- package runc-1.0.0-64.rc10.module_el8.4.0+522+66908d0c.x86_64 is filtered out by modular filtering- package runc-1.0.0-65.rc10.module_el8.4.0+819+4afbd1d6.x86_64 is filtered out by modular filtering- package runc-1.0.0-70.rc92.module_el8.4.0+786+4668b267.x86_64 is filtered out by modular filtering- package runc-1.0.0-71.rc92.module_el8.4.0+833+9763146c.x86_64 is filtered out by modular filtering問(wèn)題 2: package podman-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed- package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package docker-ce-3:20.10.7-3.el8.x86_64 requires containerd.io >= 1.4.1, but none of the providers can be installed- package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package podman-catatonit-3.0.1-6.module_el8.4.0+781+acf4c33b.x86_64 requires podman = 3.0.1-6.module_el8.4.0+781+acf4c33b, but none of the providers can be installed- problem with installed package podman-catatonit-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64- package podman-catatonit-3.0.1-7.module_el8.4.0+830+8027e1c4.x86_64 requires podman = 3.0.1-7.module_el8.4.0+830+8027e1c4, but none of the providers can be installed- package podman-3.0.1-7.module_el8.4.0+830+8027e1c4.x86_64 requires runc >= 1.0.0-57, but none of the providers can be installed- package containerd.io-1.4.3-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.3-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.3-3.2.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.3-3.2.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-68.rc92.module_el8.3.0+475+c50ce30b.x86_64- cannot install the best candidate for the job- package runc-1.0.0-64.rc10.module_el8.4.0+522+66908d0c.x86_64 is filtered out by modular filtering- package runc-1.0.0-65.rc10.module_el8.4.0+819+4afbd1d6.x86_64 is filtered out by modular filtering- package runc-1.0.0-70.rc92.module_el8.4.0+786+4668b267.x86_64 is filtered out by modular filtering- package runc-1.0.0-71.rc92.module_el8.4.0+833+9763146c.x86_64 is filtered out by modular filtering- package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.4-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package containerd.io-1.4.4-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-70.rc92.module_el8.4.0+673+eabfc99d.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 conflicts with runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package containerd.io-1.4.6-3.1.el8.x86_64 obsoletes runc provided by runc-1.0.0-73.rc93.module_el8.4.0+830+8027e1c4.x86_64- package podman-catatonit-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64 requires podman = 2.0.5-5.module_el8.3.0+512+b3b58dca, but none of the providers can be installed-?package?podman-2.0.5-5.module_el8.3.0+512+b3b58dca.x86_64?requires?runc?>=?1.0.0-57,?but?none?of?the?providers?can?be?installed

這是由于docker和Podman沖突造成的,需要先卸載Podman:

yum?erase?podman?buildah

2.2 在Win10中安裝

Docker的運(yùn)行,依賴linux的環(huán)境,官方提供了Docker Desktop for Windows,但是它需要安裝Hyper-V,Hyper-V是微軟開(kāi)發(fā)的虛擬機(jī),類似于 VMWare 或 VirtualBox,僅適用于 Windows 10。這個(gè)虛擬機(jī)一旦啟用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本將無(wú)法使用!如果你必須在電腦上使用其他虛擬機(jī)(例如開(kāi)發(fā) Android 應(yīng)用必須使用的模擬器),請(qǐng)不要使用 Hyper-V!

我的電腦是win10家庭版,不能直接安裝hyper-v,需要將下面的命令保存到cmd文件中:

pushd "%~dp0"dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txtfor /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"del hyper-v.txtDism?/online?/enable-feature?/featurename:Microsoft-Hyper-V-All?/LimitAccess?/ALL

然后在cmd文件上點(diǎn)擊右鍵,選擇使用管理員運(yùn)行。執(zhí)行完畢后會(huì)重啟,在重啟的過(guò)程中進(jìn)行安裝。

2.3 Hello world

docker服務(wù)啟動(dòng)的情況下,運(yùn)行下面的命令:

docker?run?ubuntu:20.04?/bin/echo?"Hello?world"

此命令的含義是:

  • docker run:運(yùn)行docker鏡像命令

  • ubuntu:20.04:鏡像名稱為ubuntu版本號(hào)為20.04

  • /bin/echo “Hello world”:運(yùn)行參數(shù),此鏡像的參數(shù)含義為運(yùn)行鏡像的echo命令顯示hello world

第一次運(yùn)行時(shí),因?yàn)楸镜貨](méi)有ubuntu:20.04鏡像,docker會(huì)自動(dòng)從鏡像服務(wù)器下載。下載過(guò)程可能需要多試幾次,只要成功一次,以后執(zhí)行就不再需要下載了。

docker官方還提供了一個(gè)hello-world鏡像,可以直接運(yùn)行:

docker?run?hello-world

此命令省略了鏡像版本和運(yùn)行參數(shù),docker使用latest作為版本,即最新版本。

從hello world的例子中,也可以體驗(yàn)到,docker實(shí)例的運(yùn)行是非常快的。

Docker鏡像的使用

docker官方的鏡像庫(kù)比較慢,在進(jìn)行鏡像操作之前,需要將鏡像源設(shè)置為國(guó)內(nèi)的站點(diǎn)。

新建文件/etc/docker/daemon.json,輸入如下內(nèi)容:

{"registry-mirrors" : ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com","https://cr.console.aliyun.com/"] }

然后重啟docker的服務(wù):

systemctl?restart?docker

3.1 列出本地所有鏡像

執(zhí)行命令 docker images 可以查看

$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 20.04 f643c72bc252 5 weeks ago 72.9MB hello-world?????????latest??????????????bf756fb1ae65????????12?months?ago???????13.3kB

當(dāng)前我本地只有剛才安裝的兩個(gè)鏡像。

3.2 從鏡像庫(kù)中查找鏡像

執(zhí)行命令 docker search 鏡像名稱可以從docker鏡像庫(kù)中查找鏡像。

$ docker search python NAME DESCRIPTION STARS OFFICIAL AUTOMATED python Python is an interpreted, interactive, objec… 5757 [OK] django Django is a free web application framework, … 1039 [OK] pypy PyPy is a fast, compliant alternative implem… 260 [OK] joyzoursky/python-chromedriver Python with Chromedriver, for running automa… 57 [OK] nikolaik/python-nodejs Python with Node.js 57 [OK] arm32v7/python Python is an interpreted, interactive, objec… 53 circleci/python Python is an interpreted, interactive, objec… 42 centos/python-35-centos7 Platform for building and running Python 3.5… 38 centos/python-36-centos7 Platform for building and running Python 3.6… 30 hylang Hy is a Lisp dialect that translates express… 29 [OK] arm64v8/python Python is an interpreted, interactive, objec… 24 revolutionsystems/python Optimized Python Images 18 centos/python-27-centos7 Platform for building and running Python 2.7… 17 bitnami/python Bitnami Python Docker Image 10 [OK] publicisworldwide/python-conda Basic Python environments with Conda. 6 [OK] d3fk/python_in_bottle Simple python:alpine completed by Bottle+Req… 5 [OK] dockershelf/python Repository for docker images of Python. Test… 5 [OK] clearlinux/python Python programming interpreted language with… 4 i386/python Python is an interpreted, interactive, objec… 3 ppc64le/python Python is an interpreted, interactive, objec… 2 centos/python-34-centos7 Platform for building and running Python 3.4… 2 amd64/python Python is an interpreted, interactive, objec… 1 ccitest/python CircleCI test images for Python 0 [OK] s390x/python Python is an interpreted, interactive, objec… 0 saagie/python????????????????????Repo?for?python?jobs????????????????????????????0

最好選擇官方(OFFICIAL)的鏡像,這樣的鏡像最穩(wěn)定一些。

3.3 下載新的鏡像

執(zhí)行命令docker pull 鏡像名稱:版本號(hào)即可下載新的鏡像。

$ docker pull python:3.8 3.8: Pulling from library/python 6c33745f49b4: Pull complete ef072fc32a84: Pull complete c0afb8e68e0b: Pull complete d599c07d28e6: Pull complete f2ecc74db11a: Pull complete 26856d31ce86: Pull complete 2cd68d824f12: Pull complete 7ea1535f18c3: Pull complete 2bef93d9a76e: Pull complete Digest: sha256:9079aa8582543494225d2b3a28fce526d9a6b06eb06ce2bac3eeee592fcfc49e Status: Downloaded newer image for python:3.8 docker.io/library/python:3.8

鏡像下載后,就可以使用鏡像來(lái)創(chuàng)建容器了。

Docker容器的使用

4.1 啟動(dòng)容器

執(zhí)行命令docker run即可啟動(dòng)容器,也就是創(chuàng)建某個(gè)鏡像的實(shí)例。docker run命令非常復(fù)雜,可以先執(zhí)行一個(gè)docker run --help來(lái)查看幫助:

$ docker run --helpUsage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]Run a command in a new containerOptions:--add-host list Add a custom host-to-IP mapping (host:ip)-a, --attach list Attach to STDIN, STDOUT or STDERR--blkio-weight uint16 Block IO (relative weight), between 10 and 1000, or 0 to disable (default 0)--blkio-weight-device list Block IO weight (relative device weight) (default [])--cap-add list Add Linux capabilities--cap-drop list Drop Linux capabilities--cgroup-parent string Optional parent cgroup for the container--cidfile string Write the container ID to the file--cpu-period int Limit CPU CFS (Completely Fair Scheduler) period--cpu-quota int Limit CPU CFS (Completely Fair Scheduler) quota--cpu-rt-period int Limit CPU real-time period in microseconds--cpu-rt-runtime int Limit CPU real-time runtime in microseconds-c, --cpu-shares int CPU shares (relative weight)--cpus decimal Number of CPUs--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)-d, --detach Run container in background and print container ID--detach-keys string Override the key sequence for detaching a container--device list Add a host device to the container--device-cgroup-rule list Add a rule to the cgroup allowed devices list--device-read-bps list Limit read rate (bytes per second) from a device (default [])--device-read-iops list Limit read rate (IO per second) from a device (default [])--device-write-bps list Limit write rate (bytes per second) to a device (default [])--device-write-iops list Limit write rate (IO per second) to a device (default [])--disable-content-trust Skip image verification (default true)--dns list Set custom DNS servers--dns-option list Set DNS options--dns-search list Set custom DNS search domains--domainname string Container NIS domain name--entrypoint string Overwrite the default ENTRYPOINT of the image-e, --env list Set environment variables--env-file list Read in a file of environment variables--expose list Expose a port or a range of ports--gpus gpu-request GPU devices to add to the container ('all' to pass all GPUs)--group-add list Add additional groups to join--health-cmd string Command to run to check health--health-interval duration Time between running the check (ms|s|m|h) (default 0s)--health-retries int Consecutive failures needed to report unhealthy--health-start-period duration Start period for the container to initialize before starting health-retries countdown (ms|s|m|h) (default 0s)--health-timeout duration Maximum time to allow one check to run (ms|s|m|h) (default 0s)--help Print usage-h, --hostname string Container host name--init Run an init inside the container that forwards signals and reaps processes-i, --interactive Keep STDIN open even if not attached--ip string IPv4 address (e.g., 172.30.100.104)--ip6 string IPv6 address (e.g., 2001:db8::33)--ipc string IPC mode to use--isolation string Container isolation technology--kernel-memory bytes Kernel memory limit-l, --label list Set meta data on a container--label-file list Read in a line delimited file of labels--link list Add link to another container--link-local-ip list Container IPv4/IPv6 link-local addresses--log-driver string Logging driver for the container--log-opt list Log driver options--mac-address string Container MAC address (e.g., 92:d0:c6:0a:29:33)-m, --memory bytes Memory limit--memory-reservation bytes Memory soft limit--memory-swap bytes Swap limit equal to memory plus swap: '-1' to enable unlimited swap--memory-swappiness int Tune container memory swappiness (0 to 100) (default -1)--mount mount Attach a filesystem mount to the container--name string Assign a name to the container--network network Connect a container to a network--network-alias list Add network-scoped alias for the container--no-healthcheck Disable any container-specified HEALTHCHECK--oom-kill-disable Disable OOM Killer--oom-score-adj int Tune host's OOM preferences (-1000 to 1000)--pid string PID namespace to use--pids-limit int Tune container pids limit (set -1 for unlimited)--platform string Set platform if server is multi-platform capable--privileged Give extended privileges to this container-p, --publish list Publish a container's port(s) to the host-P, --publish-all Publish all exposed ports to random ports--read-only Mount the container's root filesystem as read only--restart string Restart policy to apply when a container exits (default "no")--rm Automatically remove the container when it exits--runtime string Runtime to use for this container--security-opt list Security Options--shm-size bytes Size of /dev/shm--sig-proxy Proxy received signals to the process (default true)--stop-signal string Signal to stop a container (default "SIGTERM")--stop-timeout int Timeout (in seconds) to stop a container--storage-opt list Storage driver options for the container--sysctl map Sysctl options (default map[])--tmpfs list Mount a tmpfs directory-t, --tty Allocate a pseudo-TTY--ulimit ulimit Ulimit options (default [])-u, --user string Username or UID (format: <name|uid>[:<group|gid>])--userns string User namespace to use--uts string UTS namespace to use-v, --volume list Bind mount a volume--volume-driver string Optional volume driver for the container--volumes-from list Mount volumes from the specified container(s)-w, --workdir string Working directory inside the container

比如我們要執(zhí)行python的shell,需要添加-it參數(shù),即:docker run -it python:3.8

$ docker run -it python:3.8 Python 3.8.7 (default, Dec 22 2020, 18:46:25) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>>

4.2 將宿主機(jī)的文件掛載到容器

docker容器與宿主機(jī)是隔離的,要想讓容器內(nèi)的程序能訪問(wèn)宿主機(jī)上的文件,需要通過(guò)-v參數(shù)將宿主機(jī)的文件掛載到容器中。

比如我們?cè)谒拗鳈C(jī)上有一個(gè)hello.py,可以打印hello,想要在python容器中執(zhí)行,就需要進(jìn)行掛載。-v后還需要接兩個(gè)參數(shù),分別是宿主機(jī)的目錄和容器內(nèi)的目錄,兩者使用:分隔,路徑必須都是絕對(duì)路徑。

我的hello.py保存在主目錄的/docker_test目錄中,將這個(gè)目錄掛載到容器的/docker_test目錄,然后在容器內(nèi)執(zhí)行python /docker_test/hello.py:

$ docker run -v ~/docker_test:/docker_test python:3.8 python /docker_test/hello.py hello

4.3 容器的端口映射

我們修改一下hello.py,創(chuàng)建一個(gè)socket服務(wù)端,并監(jiān)聽(tīng)5000端口,當(dāng)有客戶端連接時(shí),打印客戶端的地址,先客戶端發(fā)送hello,然后關(guān)閉連接:

import socketip_port = ('127.0.0.1', 5000)sk = socket.socket() sk.bind(ip_port) sk.listen(5)while True:print('server waiting...')conn,addr = sk.accept()print(addr)conn.sendall(b'hello\n')conn.close()

在容器內(nèi)執(zhí)行:

docker?run?-v?~/docker_test:/docker_test?python:3.8?python?/docker_test/hello.py

接下來(lái),嘗試用telnet命令連接,結(jié)果卻是失敗的。原因是,127.0.0.1是宿主機(jī)的ip地址,5000是容器的端口,這與我們的習(xí)慣稍微有些不同。事實(shí)上,docker的容器是非常輕量的,它并沒(méi)有自己的網(wǎng)絡(luò),要想訪問(wèn)容器的端口,需要進(jìn)行端口映射,將容器的某端口映射到宿主機(jī)的端口,客戶端連接時(shí),只要與宿主機(jī)的端口進(jìn)行連接就可以了。

需要注意的是,上面的代碼創(chuàng)建的服務(wù)器,無(wú)論如何也不可能被客戶端連接,因?yàn)榇a中綁定了127.0.0.1的ip,在容器中運(yùn)行時(shí),需要綁定所有ip,即0.0.0.0。

import socketip_port = ('0.0.0.0', 5000)sk = socket.socket() sk.bind(ip_port) sk.listen(5)while True:print('server waiting...')conn,addr = sk.accept()print(addr)conn.sendall(b'hello\n')conn.close()

然后,再使用-p參數(shù),-p還需要三個(gè)參數(shù),即宿主機(jī)的ip地址、宿主機(jī)的端口、容器的端口,三者之間使用:分隔。一般的,可以將宿主機(jī)的ip地址省略,只寫(xiě)宿主機(jī)的端口:容器的端口即可。

docker?run?-v?~/docker_test:/docker_test?-it?-p?5001:5000?python:3.8?python?/docker_test/hello.py

這樣,就將容器的5000端口映射到了宿主機(jī)的5001端口,使用:

telnet?127.0.0.1?5001

即可與容器中的服務(wù)器進(jìn)行連接。

4.4 容器管理

上面的服務(wù)運(yùn)行之后,可以使用docker ps命令,查看運(yùn)行中的容器:

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ec4c86b8a163?????python:3.8??????"python?/docker_test…"???5?seconds?ago?????Up?4?seconds???0.0.0.0:5000->5000/tcp???eager_wilson

顯示的內(nèi)容有下面幾列:

  • CONTAINER ID:容器ID

  • IMAGE:鏡像名稱和版本

  • COMMAND:執(zhí)行的命令

  • CREATED:容器創(chuàng)建時(shí)間

  • STATUS:容器的狀態(tài)

  • PORTS:端口映射

  • NAMES:容器名

要想結(jié)束容器,可以使用docker kill 容器ID命令。

自制Docker鏡像

一般而言,當(dāng)我們的程序開(kāi)發(fā)完成后,會(huì)連同程序文件與運(yùn)行環(huán)境一起制作成一個(gè)新的鏡像。

要制作鏡像,需要編寫(xiě)Dockerfile。DockeFile由多個(gè)命令組成,常用的命令有:

  • FROM:基于某個(gè)鏡像來(lái)制作新的鏡像。格式為:FROM 鏡像名稱:鏡像版本。

  • COPY:從宿主機(jī)復(fù)制文件,支持?、*等通配符。格式為:COPY 源文件路徑 目標(biāo)文件路徑。

  • ADD:從宿主機(jī)添加文件,格式與COPY相同,區(qū)別在于當(dāng)文件為壓縮文件時(shí),會(huì)解壓縮到目標(biāo)路徑。

  • RUN:在創(chuàng)建新鏡像的過(guò)程中執(zhí)行的shell命令。格式為:RUN shell命令行。注意,此shell命令將在容器內(nèi)執(zhí)行。

  • CMD:在容器實(shí)例中運(yùn)行的命令,格式與RUN相同。注意,如果在docker run時(shí)指定了命令,將不會(huì)執(zhí)行CMD的內(nèi)容。

  • ENTRYPOINT:在容器實(shí)例中運(yùn)行的命令,格式與CMD相同。注意,如果在docker run時(shí)指定了命令,該命令會(huì)以命令行參數(shù)的形式傳遞到ENTRYPOINT中。

  • ENV:在容器中創(chuàng)建環(huán)境變量,格式為:ENV 變量名值。

注意,Docker鏡像中有一個(gè)層的概念,每執(zhí)行一個(gè)RUN命令,就會(huì)創(chuàng)建一個(gè)層,層過(guò)多會(huì)導(dǎo)致鏡像文件體積增大。盡量在RUN命令中使用&&連接多條shell命令,減少RUN命令的個(gè)數(shù),可以有效減小鏡像文件的體積。

5.1 自制顯示文本文件內(nèi)容鏡像

編寫(xiě)cat.py,接收一個(gè)文件名,由python讀取文件并顯示文件的內(nèi)容:

import os import sysinput = sys.argv[1]with open(input, "r") as fp:print(fp.read())

這個(gè)例子比較簡(jiǎn)單,縮寫(xiě)Dockerfile如下:

FROM python:3.8 WORKDIR /files COPY cat.py /cat.py ENTRYPOINT?["python",?"/cat.py"]

這個(gè)Dockerfile的含義是:

  • 以python:3.8為基礎(chǔ)鏡像

  • 容器啟動(dòng)命令的工作目錄為/files,在運(yùn)行鏡像時(shí),需要我們把宿主機(jī)的某目錄掛載到容器的/files目錄

  • 復(fù)制cat.py到容器的根目錄下

  • 啟動(dòng)時(shí)運(yùn)行python /cat.py命令

  • 需要說(shuō)明的是,ENTRYPOINT有兩種寫(xiě)法:

    ENTRYPOINT python /cat.py ENTRYPOINT?["python",?"/cat.py"]

    這里采用第二種寫(xiě)法,是因?yàn)槲覀円谕獠拷o容器傳遞參數(shù)。執(zhí)行命令編譯Docker鏡像:

    docker?build?-t?cat:1.0?.

    這個(gè)命令中,-t的含義是目標(biāo),即生成的鏡像名為hello,版本號(hào)為1.0,別忘了最后那個(gè).,這叫到上下文路徑,是指 docker 在構(gòu)建鏡像,有時(shí)候想要使用到本機(jī)的文件(比如復(fù)制),docker build 命令得知這個(gè)路徑后,會(huì)將路徑下的所有內(nèi)容打包。

    這樣,我們的第一個(gè)鏡像就制作完成了,使用下面的命令執(zhí)行它:

    docker?run?-it?-v?~/docker_test/cat/files:/files?cat:1.0?test.txt

    即可看到~/docker_test/cat/files/test.txt的內(nèi)容。

    5.2 自制web服務(wù)器鏡像

    我們使用tornado開(kāi)發(fā)一個(gè)網(wǎng)站,而python的官方鏡像是沒(méi)有tornado庫(kù)的,這就需要在制作鏡像時(shí)進(jìn)行安裝。

    測(cè)試的ws.py如下:

    import tornado.httpserver import tornado.ioloop import tornado.options import tornado.webfrom tornado.options import define, options define("port", default=8000, help="run on the given port", type=int)class IndexHandler(tornado.web.RequestHandler):def get(self):self.write("Hello world")if __name__ == "__main__":tornado.options.parse_command_line()app = tornado.web.Application(handlers=[(r"/", IndexHandler)])http_server = tornado.httpserver.HTTPServer(app)http_server.listen(options.port)tornado.ioloop.IOLoop.instance().start()

    編寫(xiě)Dockerfile文件如下:

    FROM python:3.8 WORKDIR /ws COPY ws.py /ws/ws.py RUN pip install tornado CMD?python?hello.py

    在此我們驗(yàn)證一下CMD與ENTRYPOINT的區(qū)別。在Dockerfile所在有目錄下執(zhí)行如下命令:

    docker?build?-t?ws:1.0?.

    執(zhí)行完成后,再使用docker images使用就可以看到生成的鏡像了,然后使用下面的命令運(yùn)行:

    docker?run?-it?-p?8000:8000?ws:1.0

    在瀏覽器中輸入宿主機(jī)的ip和8000端口,就可以看到頁(yè)面了。

    在這個(gè)例子中,我使用的運(yùn)行命令是CMD,如果在docker run中指定的其他的命令,此命令就不會(huì)被執(zhí)行,如:

    $ docker run -it -p 8000:8000 ws:1.0 python Python 3.8.7 (default, Dec 22 2020, 18:46:25) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>>

    此時(shí),容器中被執(zhí)行的是python命令,而不是我們的服務(wù)。在更多情況下,我們希望在docker run命令中為我們的服務(wù)傳參,而不是覆蓋執(zhí)行命令,那么,我們應(yīng)該使用ENTRYPOINT而不是CMD:

    FROM python:3.8 WORKDIR /ws COPY ws.py /ws/ws.py RUN pip install tornado ENTRYPOINT?python?ws.py

    上面這種寫(xiě)法,是不支持傳遞參數(shù)的,ENTRYPOINT和CMD還支持另一種寫(xiě)法:

    FROM python:3.8 WORKDIR /ws COPY ws.py /ws/ws.py RUN pip install tornado ENTRYPOINT?["python",?"ws.py"]

    使用這種寫(xiě)法,docker run命令中的參數(shù)才可以傳遞給hello.py:

    docker?run?-it?-p?8000:9000?ws:1.0?--port=9000

    這個(gè)命令中,--port=9000被作為參數(shù)傳遞到hello.py中,因此容器內(nèi)的端口就成了9000。

    在生產(chǎn)環(huán)境中運(yùn)行時(shí),不會(huì)使用-it選項(xiàng),而是使用-d選項(xiàng),讓容器在后臺(tái)運(yùn)行:

    $ docker run -d -p 8000:9000 ws:1.0 --port=9000 4a2df9b252e2aff6a8853b3a8bf46c0577545764831bb7557b836ddcd85cba70 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4a2df9b252e2???hello:1.0????"python?ws.py?--p…"???9?seconds?ago?????Up?8?seconds??????0.0.0.0:8000->9000/tcp???elegant_sammet

    這種方式下,即使當(dāng)前的控制臺(tái)被關(guān)閉,該容器也不會(huì)停止。

    5.3 自制apscheduler服務(wù)鏡像

    接下來(lái),制作一個(gè)使用apscheduler編寫(xiě)的服務(wù)鏡像,代碼如下:

    import sys import shutil from apscheduler.schedulers.blocking import BlockingScheduler from apscheduler.triggers.cron import CronTriggerdef scan_files():shutil.copytree(sys[1], sys[2])scheduler = BlockingScheduler() scheduler.add_job(scan_files,trigger=CronTrigger(minute="*"),misfire_grace_time=30 )

    Dockerfile也是信手拈來(lái):

    FROM python:3.8 WORKDIR / COPY sch.py /sch.py RUN pip install apscheduler ENTRYPOINT?["python",?"sch.py"]

    生成鏡像:

    docker?build?-t?sch:1.0?.

    應(yīng)該可以運(yùn)行了,文件復(fù)制需要兩個(gè)目錄,在運(yùn)行時(shí),可以使用兩次-v來(lái)掛載不同的目錄:

    docker?run?-d?-v?~/docker_test/sch/src:/src?-v?~/docker_test/sch/dest:/dest?sch:1.0?/src?/dest

    多階段構(gòu)建壓縮鏡像體積

    前面用到的官方python鏡像大小足足882MB,在這個(gè)基礎(chǔ)上,再安裝用到的第三方庫(kù),添加項(xiàng)目需要的圖片等資源,大小很容易就超過(guò)1個(gè)G,這么大的鏡像,網(wǎng)絡(luò)傳給客戶非常的不方便,因此,減小鏡像的體積是非常必要的工作。

    docker hub上有個(gè)一python:3.8-alpine鏡像,大小只有44.5MB。之所以小,是因?yàn)閍lpine是一個(gè)采用了busybox架構(gòu)的操作系統(tǒng),一般用于嵌入式應(yīng)用。我嘗試使用這個(gè)鏡像,發(fā)現(xiàn)安裝一般的庫(kù)還好,但如果想安裝numpy等就會(huì)困難重重,甚至網(wǎng)上都找不到解決方案。

    還是很回到基本的路線上來(lái),主流的操作系統(tǒng)鏡像,ubuntu的大小為72.9MB,centos的大小為209MB——這也算是我更喜歡使用ubuntu的一個(gè)重要原因吧!使用ubuntu作為基礎(chǔ)鏡像,安裝python后的大小為139MB,再安裝pip后的大小一下子上升到了407MB,要是再安裝點(diǎn)其他東西,很容易就趕上或超過(guò)python官方鏡像的大小了。

    看來(lái),尋常路線是很難壓縮鏡像文件體積了。幸好,還有一條曲線救國(guó)的路可走,這就是多階段構(gòu)建法。

    多階段構(gòu)建的思想其實(shí)很簡(jiǎn)單,先構(gòu)建一個(gè)大而全的鏡像,然后只把鏡像中有用的部分拿出來(lái),放在一個(gè)新的鏡像里。在我們的場(chǎng)景下,pip只在構(gòu)建鏡像的過(guò)程中需要,而對(duì)運(yùn)行我們的程序卻一點(diǎn)用處也沒(méi)有。我們只需要安裝pip,再用pip安裝第三方庫(kù),然后將第三方庫(kù)從這個(gè)鏡像中復(fù)制到一個(gè)只有python,沒(méi)有pip的鏡像中,這樣,pip占用的268MB空間就可以被節(jié)省出來(lái)了。

    1、在ubuntu鏡像的基礎(chǔ)上安裝python:

    FROM ubuntu RUN apt update \&&?apt?install?python3

    然后運(yùn)行:

    docker?build?-t?python:3.8-ubuntu?.

    這樣,就生成了python:3.8-ubuntu鏡像。

    2、在python:3.8-ubuntu的基礎(chǔ)上安裝pip:

    FROM python:3.8-ubuntu RUN?apt?install?python3

    然后運(yùn)行:

    docker?build?-t?python:3.8-ubuntu-pip?.

    這樣,就生成了python:3.8-ubuntu-pip鏡像。

    3、多階段構(gòu)建目標(biāo)鏡像:

    FROM python:3.8-ubuntu-pip RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy FROM python:3.8-ubuntu COPY?--from=0?/usr/local/lib/python3.8/dist-packages/?/usr/local/lib/python3.8/dist-packages/

    這個(gè)dockerfile需要解釋一下了,因?yàn)樗袃蓚€(gè)FROM命令。

    第一個(gè)是以python:3.8-ubuntu-pip鏡像為基礎(chǔ),安裝numpy,當(dāng)然,在實(shí)際應(yīng)用中,把所有用到的第三方庫(kù)出寫(xiě)在這里。

    第二個(gè)FROM是以FROM python:3.8-ubuntu鏡像為基礎(chǔ),將第三方庫(kù)統(tǒng)統(tǒng)復(fù)制過(guò)來(lái),COPY命令后的–from=0的意思是從第0階段進(jìn)行復(fù)制。實(shí)際應(yīng)用中再?gòu)纳舷挛闹袕?fù)制程序代碼,添加需要的ENTRYPOINT等。

    最后,再運(yùn)行:

    docker?build?-t?project:1.0?.

    這然,用于我們項(xiàng)目的鏡像就做好了。比使用官方python鏡像構(gòu)建的版本,小了大約750MB。

    導(dǎo)入鏡像到生產(chǎn)環(huán)境

    到此,我們的鏡像已經(jīng)制作好了,可是,鏡像文件在哪,如何在生產(chǎn)環(huán)境下運(yùn)行呢?

    剛才使用docker images命令時(shí),已經(jīng)看到了生成的鏡像:

    $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello 1.0 01fe19111dc7 59 minutes ago 893MB python 3.8 f5041c8ae6b1 13 days ago 884MB ubuntu 20.04 f643c72bc252 5 weeks ago 72.9MB hello-world?????????latest??????????????bf756fb1ae65????????12?months?ago???????13.3kB

    我們可以使用docker save命令將鏡像保存到指定的文件中,保存的文件是一個(gè).tar格式的壓縮文件:

    docker?save?-o?hello.tar?hello:1.0

    將hello.tar復(fù)制到生產(chǎn)環(huán)境的機(jī)器上,然后執(zhí)行導(dǎo)入命令:

    docker?load?-i?hello.tar

    就可以使用了。

    往期推薦

    如果讓你來(lái)設(shè)計(jì)網(wǎng)絡(luò)

    70% 開(kāi)發(fā)者對(duì)云原生一知半解,“云深”如何知處?

    淺述 Docker 的容器編排

    如何在 Kubernetes Pod 內(nèi)進(jìn)行網(wǎng)絡(luò)抓包

    點(diǎn)分享

    點(diǎn)收藏

    點(diǎn)點(diǎn)贊

    點(diǎn)在看

    總結(jié)

    以上是生活随笔為你收集整理的超值一篇分享,Docker:从入门到实战过程全记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    人人爽人人av | 西西4444www大胆艺术 | 欧美激情第28页 | 亚洲精品网站在线 | 久久免费视频这里只有精品 | av免费在线看网站 | 成人av影院在线观看 | 久久国产精品免费 | 国产在线小视频 | 精品久久亚洲 | 欧美日韩另类在线 | 香蕉久久国产 | 中文亚洲欧美日韩 | 色在线观看网站 | 久保带人 | 91在线播放综合 | 日本久久久影视 | 一二区av| 午夜在线观看影院 | 美腿丝袜av | 69av免费视频 | 天天精品视频 | 天天射狠狠干 | 91男人影院 | 久久久免费观看 | 色是在线视频 | 激情欧美xxxx| 国产精品久久久久久久久久直播 | 最新日韩电影 | 日韩在线免费视频观看 | 久久不卡日韩美女 | 日韩成人免费观看 | 黄色av网站在线免费观看 | 亚洲欧美在线视频免费 | 成人国产网址 | 激情伊人五月天久久综合 | 国产精品免费视频久久久 | 在线视频日韩欧美 | 手机在线观看国产精品 | 久久影院精品 | avav99| 亚洲乱码在线观看 | 天天草天天色 | 精品日韩中文字幕 | 天天操夜操视频 | 日韩一二三在线 | 在线黄色免费 | 狠狠ri| 人人看人人做人人澡 | 亚洲日本va午夜在线影院 | 日韩av一区二区在线播放 | 久青草视频在线观看 | 日韩v欧美v日本v亚洲v国产v | 亚洲理论在线观看电影 | 天天射狠狠干 | 四虎国产精品永久在线国在线 | 国产黄影院色大全免费 | 美女福利视频网 | 又黄又爽又刺激 | 日韩成人中文字幕 | 在线午夜av | av三级在线免费观看 | 婷婷色网站 | 91九色porn在线资源 | 欧美日本一二三 | 亚洲精品色视频 | 国产一区二区久久久 | 国产九色91| 久久精品直播 | 婷婷在线网站 | 亚洲国产播放 | 久久人人爽人人爽人人片av免费 | 亚洲精品在线观 | 亚洲国产精品激情在线观看 | 中文乱幕日产无线码1区 | 日韩免费不卡av | 欧美男男tv网站 | 日韩经典一区二区三区 | 1000部18岁以下禁看视频 | 99热超碰| 国产成人性色生活片 | 天天天干 | 日本资源中文字幕在线 | 久久系列| 97色se | 亚洲精品中文在线 | 成年人免费在线观看网站 | 九九免费精品视频在线观看 | www.xxxx变态.com | 月下香电影 | 久久午夜电影院 | 久草久草久草久草 | 91精品国产成 | 免费观看一区二区三区视频 | 91精品久久久久久综合乱菊 | 在线视频欧美精品 | 久久免费看a级毛毛片 | 日韩av电影手机在线观看 | 黄色av电影免费观看 | 97视频久久久| 99视频在线免费看 | 久久久一本精品99久久精品66 | 欧洲在线免费视频 | 在线观看免费av网 | 伊人久久在线观看 | 男女拍拍免费视频 | 国产成人综 | 91人人揉日日捏人人看 | 一区二区精品在线视频 | 人人玩人人添人人 | 综合网伊人 | 91视视频在线直接观看在线看网页在线看 | 天天操夜夜操夜夜操 | 久久精品看片 | 天天夜夜狠狠操 | 色噜噜日韩精品欧美一区二区 | 日韩av电影手机在线观看 | av在线观 | 91麻豆精品国产91久久久无限制版 | 欧美一级黄色网 | 精品国产视频在线 | 成人电影毛片 | 91天天操 | 中文字幕一区在线 | 天天综合狠狠精品 | 欧美精品中文 | 成人宗合网 | 亚洲国产精品资源 | 欧美一进一出抽搐大尺度视频 | 久久婷婷国产色一区二区三区 | 中文字幕人成乱码在线观看 | www.狠狠操 | 1024久久| 久久久久欧美精品999 | 国产美女久久久 | 亚洲激精日韩激精欧美精品 | 黄色一级大片在线免费看产 | 国产精品久久久久久欧美 | 在线观看网站av | 天天射,天天干 | 91看片淫黄大片一级在线观看 | www.日本色| 中国老女人日b | 婷婷色5月| 最新国产中文字幕 | 久久久久久久久久久影视 | 国产精品久久久久久久久久免费看 | 欧美日韩久久久 | 久草免费看 | 黄网站www| 天天综合色天天综合 | 国产a高清| 亚洲aⅴ乱码精品成人区 | 91精品网站 | 99精品视频在线播放免费 | 又大又硬又黄又爽视频在线观看 | 亚洲人成精品久久久久 | 探花国产在线 | 中文字幕亚洲在线观看 | 中文字幕一区二区三区四区在线视频 | 久久国产精品久久精品国产演员表 | 最近中文字幕国语免费av | 国产中的精品av小宝探花 | 天天干夜夜干 | 久久精品导航 | 天天玩天天干 | 视频直播国产精品 | 色综合久久精品 | 最近久乱中文字幕 | 亚洲精品美女视频 | 日韩成人精品 | 精品9999| 蜜臀av性久久久久蜜臀aⅴ四虎 | 精品一区 在线 | 日本在线视频一区二区三区 | 国产91精品在线播放 | 久久久久久片 | 自拍超碰在线 | 国产96在线视频 | 欧美久久久久久久久 | 成 人 免费 黄 色 视频 | 人人爽人人片 | 国产精品一区二区 91 | 国产免费大片 | 亚洲成人精品久久 | 成人a大片| 四虎5151久久欧美毛片 | 亚洲欧美乱综合图片区小说区 | h久久| 极品国产91在线网站 | 日日夜夜精品视频 | 天天操夜夜操夜夜操 | 免费在线观看毛片网站 | 99视频在线观看一区三区 | 久草在线免费看视频 | a久久久久 | 天天操夜操视频 | 色久av | 伊人天天操 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 精品欧美乱码久久久久久 | av高清不卡| 51久久成人国产精品麻豆 | 久久久影片 | 97超碰人人 | 亚洲毛片在线观看. | 中文字幕网址 | 成人手机在线视频 | 亚洲精品视频在线观看网站 | 麻豆视频在线播放 | 91在线看黄 | 国产精品久久久久久婷婷天堂 | 亚洲精品午夜aaa久久久 | 国产成人61精品免费看片 | 国产精品久久久久久久久久久免费看 | 一区二区视频在线免费观看 | 在线观看亚洲精品视频 | 五月天综合色 | 亚洲美女视频在线观看 | 久久黄网站 | 中文字幕资源站 | 日日操网 | 超碰99人人 | 91久久奴性调教 | 国产精品成人在线观看 | 久久久精品国产一区二区三区 | 91在线免费观看网站 | 国产精品久久网站 | 91精品视屏 | 婷婷色综 | 成人毛片在线视频 | 久久久久免费精品国产 | 久久婷婷影视 | 玖玖在线免费视频 | 97成人精品视频在线播放 | 正在播放一区二区 | 97电影在线观看 | 亚洲欧美经典 | 久久国产精品99久久久久久丝袜 | 91精品视频免费在线观看 | 久久精品中文字幕 | 国产美女视频 | 亚洲 欧美 变态 国产 另类 | 国产中年夫妇高潮精品视频 | 欧美亚洲免费在线一区 | 五月婷婷另类国产 | 区一区二区三在线观看 | 99久热在线精品视频观看 | 久久成人麻豆午夜电影 | 亚洲精品视频在线观看视频 | 一区在线免费观看 | 婷婷午夜激情 | 欧美日视频 | 91精品久久久久久综合乱菊 | 免费在线观看成年人视频 | 91久草视频| 日韩欧美99 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 日韩视频 一区 | 啪嗒啪嗒免费观看完整版 | 欧美成年人在线观看 | 九九欧美视频 | 99产精品成人啪免费网站 | 国产精品999久久久 久产久精国产品 | 中文字幕一区二区三区在线视频 | 久久免费一 | 91网免费看 | 狠狠操.com| 国产黄色片在线 | 国产99区| 亚洲免费av在线播放 | 久久久精品欧美 | 深夜免费福利视频 | 深夜男人影院 | 久久亚洲美女 | 国产a级片免费观看 | 欧美日韩在线精品一区二区 | 91av电影网 | 婷婷精品在线视频 | 久久精品电影院 | www在线观看视频 | 456成人精品影院 | 在线导航av | 国产美女黄网站免费 | 天天色天天综合网 | 超碰在线98 | 中文字幕中文字幕在线一区 | 久久精品直播 | 99热这里只有精品1 av中文字幕日韩 | 五月天综合在线 | 91精品爽啪蜜夜国产在线播放 | 99久久久国产精品美女 | 亚洲黄网站 | 激情图片久久 | 久久老司机精品视频 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 夜夜爽www| a色视频| 成人国产精品免费 | 欧美久久成人 | 日本资源中文字幕在线 | 亚洲欧美日韩一二三区 | 国产成人免费观看 | 综合网天天色 | 91香蕉视频黄色 | 超碰人人国产 | 伊色综合久久之综合久久 | 国产精品二区在线观看 | 在线影院av | 久久人91精品久久久久久不卡 | 欧美久久久久久久久 | www.xxxx变态.com | 9999国产| 激情综合中文娱乐网 | 天天翘av | 国产日韩欧美精品在线观看 | 国产精品视频免费观看 | 日一日操一操 | av怡红院| 日女人免费视频 | 日日爽天天 | 日韩欧美高清视频在线观看 | 91视频 - 114av| 99久久久久久 | 91在线www| 精品国产黄色片 | 欧美一区二区精品在线 | 丁香激情五月婷婷 | 久久精品电影网 | 午夜精品久久久久久中宇69 | 91视频 - 88av| 国产一级一片免费播放放 | 在线播放日韩av | 久视频在线播放 | 日韩电影中文字幕在线观看 | 日本久久久久久久久久 | 超级碰碰碰视频 | 日韩久久视频 | 999久久久久久久久久久 | 日日狠狠 | 91精品国产99久久久久久久 | 国产视频1区2区3区 久久夜视频 | 日本久热| 免费视频一二三区 | 欧美日一级片 | 99视频精品 | 国产不卡在线看 | 成年人黄色免费网站 | 成人资源网| 日韩在线观看网站 | 国产精品久久久久久久久久白浆 | 综合色站| 国产伦精品一区二区三区在线 | 成人a视频 | 精品黄色视 | 国产一区黄色 | 精品久久久久国产免费第一页 | 免费精品视频在线观看 | 久久精品毛片 | 国产成人精品a | 久久亚洲欧美日韩精品专区 | 中文字幕在线免费97 | 超碰成人网 | 97免费视频在线 | 人人爽久久涩噜噜噜网站 | 99久久久久久久久 | 天天干天天拍天天操天天拍 | 在线观看久久久久久 | www.成人久久 | 亚洲黄色小说网址 | 在线观看视频福利 | 中文字幕色播 | 日韩在线观看视频一区二区三区 | 国产在线观看av | 国产一区在线看 | 国产精品久久久久一区二区 | 免费在线观看污网站 | 丁香婷婷综合色啪 | 国产123区在线观看 国产精品麻豆91 | 欧美成人黄色片 | 99久久99久久精品国产片 | 久久久久久久国产精品影院 | 久久综合欧美 | 97超碰超碰久久福利超碰 | 狠狠色丁香婷婷综合 | 国产综合精品一区二区三区 | 久久爱综合 | 成人av在线影院 | 日韩精品一区二区三区水蜜桃 | 91丨九色丨国产丨porny精品 | 九色精品免费永久在线 | 黄色资源在线 | 免费看高清毛片 | 天天插天天干天天操 | 欧美国产日韩一区二区 | 99热精品视 | 黄色毛片一级 | 毛片网站免费在线观看 | 久久久精品国产一区二区三区 | 色噜噜日韩精品欧美一区二区 | 久久精品—区二区三区 | 亚洲电影在线看 | 人人干天天射 | 91 中文字幕 | 国产专区在线看 | 在线国产一区二区三区 | 日韩欧美大片免费观看 | 免费能看的黄色片 | 91av影视 | 亚洲国产精品电影 | 成人免费视频播放 | 国产精品久久久久久久久久久久久 | 日本中文一级片 | 中文字幕在线看视频 | 天天操偷偷干 | 日本精品视频在线观看 | 国产精品成人久久久久 | 午夜国产福利在线观看 | 亚洲情感电影大片 | 色在线亚洲 | 丝袜美腿在线 | 中文字幕999 | 在线激情影院一区 | 91免费观看国产 | 日韩av一区二区在线影视 | 女人高潮一级片 | av一级免费 | 欧美日韩免费一区二区 | 波多野结衣在线观看视频 | www.五月婷婷| 人人插人人草 | 中文字幕在线观看一区二区三区 | a视频免费| 国产精品毛片久久久久久久 | 免费三级黄色片 | 人人舔人人插 | 热久久免费国产视频 | 亚洲精品乱码久久久久久蜜桃不爽 | 综合av在线 | www.国产在线 | 欧美一区二区三区四区夜夜大片 | 在线视频亚洲 | 日韩精品一区二区在线观看视频 | av资源中文字幕 | 又黄又刺激视频 | 亚洲精品麻豆视频 | 黄色片网站av | av在线h | 久久免费在线视频 | 久色伊人 | 999亚洲国产996395 | 久久 地址 | 亚洲永久av | 青青草国产免费 | 最近中文字幕免费视频 | 久久夜色精品国产欧美乱 | 日韩在线视频免费看 | 久草在线费播放视频 | 天天干天天做 | 国内三级在线 | 国产精品原创av片国产免费 | www.国产毛片 | 国产亚洲欧美精品久久久久久 | 一级黄视频| 在线高清一区 | 国产真实在线 | 超碰在线公开 | 色在线免费 | av片中文 | 三级黄色在线观看 | av电影免费 | 久久久免费看片 | 天天做日日做天天爽视频免费 | 成年人电影免费在线观看 | 91久久久国产精品 | 亚洲天堂精品视频 | 九九九视频在线 | 国产精品成人自拍 | 综合久久精品 | 欧洲av不卡 | 日韩二区在线 | 五月婷婷色综合 | 天天操天操| 国产精品久久久毛片 | 在线日本看片免费人成视久网 | 91九色网站 | 欧美日韩精品影院 | 99久久久久国产精品免费 | 久久久国产一区二区三区 | 欧美日韩三级 | 国产又粗又硬又长又爽的视频 | 在线看一区二区 | 91大神精品视频在线观看 | 天天操综合网站 | 日韩免费看片 | 啪啪免费视频网站 | 黄色三级网站在线观看 | 日韩视频在线观看免费 | 久久久久久毛片精品免费不卡 | 97超级碰碰碰碰久久久久 | 九九热免费视频在线观看 | 伊人五月婷 | 一级大片在线观看 | 夜夜视频资源 | 97超碰资源网 | 亚洲精品美女免费 | 亚洲一区二区精品 | 久久深夜| 最近2019好看的中文字幕免费 | 国产系列 在线观看 | 久久久久 免费视频 | 成人午夜电影网站 | 欧美一二三区在线观看 | 午夜国产在线 | 中文字幕欧美日韩va免费视频 | 亚洲精品女人久久久 | 天天综合网 天天综合色 | 亚洲精品在线观看免费 | 日本xxxx裸体xxxx17 | 国产成人在线免费观看 | 中文欧美字幕免费 | 国产综合小视频 | 亚洲综合在线发布 | 亚洲理论在线 | 国产黄色片久久久 | 色永久免费视频 | 日韩精选在线观看 | 337p欧美| 九九热在线观看 | av中文字幕在线免费观看 | 狠狠色丁香婷婷综合 | 99久久综合精品五月天 | 一区二区三区在线观看免费视频 | 在线观看黄网站 | 国产精品99久久久久久人免费 | www.五月天婷婷.com | 99草在线视频 | av国产网站 | 国产黄色电影 | 国产视频一 | 国产特级毛片aaaaaa高清 | 国内精品久久久久久 | 一区在线电影 | 国产小视频国产精品 | 久久久一本精品99久久精品 | 视频在线播放国产 | 国产一区二区在线观看免费 | 青青草国产精品视频 | 精品久久中文 | 丁香狠狠 | 国产一线二线三线性视频 | 精品女同一区二区三区在线观看 | 久久免费99精品久久久久久 | 97超视频在线观看 | 四虎欧美 | 婷婷六月色 | 免费在线播放黄色 | 久久这里只有精品23 | 日日夜夜操操操操 | 草免费视频 | av字幕在线| 91精品国自产拍天天拍 | 亚洲国产美女久久久久 | 黄色视屏av | 天天曰天天射 | 字幕网av| 中文免费 | 久久精品三 | 亚洲精品www久久久久久 | 99久久婷婷| 在线免费试看 | 免费三级a | 99视频这里有精品 | 欧美动漫一区二区三区 | 亚洲色综合 | 亚洲精品天天 | 久久久这里有精品 | 欧美 日韩 国产 成人 在线 | 天天爱天天 | 黄污污网站 | 久久久久国产精品一区二区 | 国产精品99久久免费黑人 | 日韩美在线 | 在线观看av不卡 | 超碰97在线人人 | 免费三级黄色 | 国产不卡视频在线播放 | 亚洲婷久久 | 最新国产在线 | 在线亚洲成人 | 免费在线观看a v | 免费欧美| 91完整视频| av永久网址 | 国产精品久久99综合免费观看尤物 | 久久久夜色 | 日韩色在线观看 | 亚洲激情中文 | 国产一级电影在线 | 久久人人爽视频 | 午夜少妇一区二区三区 | 婷婷色伊人 | 成人在线视频你懂的 | 亚洲欧美精品在线 | 色综合久久久久综合体 | 成人av在线播放网站 | 天天曰| 免费人成在线观看网站 | 麻豆免费看片 | 日韩精品免费在线 | 精品欧美乱码久久久久久 | 亚洲欧美精品一区 | 青青看片| 波多野结衣久久精品 | 最近更新好看的中文字幕 | 男女啪啪视屏 | 99精品视频在线观看播放 | 毛片网站免费在线观看 | 国产精品一级在线 | 成人蜜桃视频 | 黄污网 | 天天干天天天 | 麻豆久久久久久久 | 色资源在线观看 | 亚洲 欧美 91 | 91精品久久久久久久99蜜桃 | 久久国内免费视频 | 国产一区二区视频在线 | 欧美福利网址 | 久久久久二区 | 91av原创| 国产高清av在线播放 | 亚洲最新精品 | 欧美在线aa | 伊人影院av | 97超碰人人干 | 久久久久久免费 | 中文字幕在线观看第一页 | jizzjizzjizz亚洲 | 日韩动漫免费观看高清完整版在线观看 | 久久国产一区二区三区 | 久久久精品免费观看 | 国产糖心vlog在线观看 | 在线97| 国产亚洲精品久久久久5区 成人h电影在线观看 | 国产精品99久久久久人中文网介绍 | 日本女人的性生活视频 | 欧美大jb | 久久久精品国产免费观看同学 | 美女网站一区 | av丝袜天堂 | 亚洲成熟女人毛片在线 | 久草网在线 | 不卡av在线 | 国产精品美女免费视频 | 久久精品国产免费看久久精品 | 日本超碰在线 | 中文字幕丰满人伦在线 | 色婷婷成人网 | 福利av影院 | 成年人国产在线观看 | 免费观看v片在线观看 | 成人黄色片在线播放 | 亚洲精选国产 | 亚洲精品乱码久久久久久蜜桃动漫 | 在线观看日韩精品视频 | 成人免费视频播放 | 亚洲欧美国产日韩在线观看 | 国产精品日韩在线播放 | 99在线国产 | 在线欧美中文字幕 | 一区二区三区在线视频111 | av一本久道久久波多野结衣 | 五月天六月色 | 国产成人黄色片 | 欧美色操| 色在线网 | 9999在线| 成人黄色国产 | 手机成人免费视频 | 国产精品不卡一区 | 亚洲精品网址在线观看 | 国产精品免费久久久久影院仙踪林 | 国产在线 一区二区三区 | 欧美日韩性视频在线 | 日韩在线观看视频中文字幕 | 九热在线 | 国产伦理久久 | 色视频国产直接看 | 国产一区二区三区四区大秀 | 免费在线黄色av | 日日夜日日干 | 日韩精品欧美视频 | 欧美韩国日本在线观看 | 国产精品久久久久久久久久久久久久 | 国产精品第十页 | 日本精品在线 | 久久国产剧场电影 | 亚洲成a人片综合在线 | 国产精品久久久久三级 | 西西www4444大胆视频 | 操操日日| 黄色片亚洲 | 国产123区在线观看 国产精品麻豆91 | 国产亚洲精品久久久久久大师 | 99在线免费视频观看 | a√天堂中文在线 | 国产亚洲精品久久久久久 | 日韩在线字幕 | 亚洲夜夜综合 | 国产中文字幕在线观看 | 久久久久激情 | 国产成人精品一区二区三区网站观看 | 欧美 日韩 国产 成人 在线 | 国产视频手机在线 | 国产在线理论片 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产一级黄色免费看 | 91亚洲精品久久久蜜桃 | 97精品超碰一区二区三区 | 国产日韩欧美自拍 | 久艹视频免费观看 | 婷婷色5月 | 在线观看精品国产 | 国产成人精品国内自产拍免费看 | 97综合网| 性色av免费看 | 日韩免费中文字幕 | 日韩av网址在线 | 天天色天天艹 | 特级aaa毛片 | 18久久久久久 | 久久只有精品 | 69欧美视频 | 91精品日韩 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 久久艹综合| 国产麻豆果冻传媒在线观看 | 三级a毛片| 久久视频| 九九热.com | 久久涩涩网站 | 亚洲毛片久久 | 亚洲国产欧美一区二区三区丁香婷 | 爱色av.com | 成全在线视频免费观看 | 久久久久久影视 | 永久免费毛片 | 国产一二三区av | 日韩精品一区二 | 成人在线视频免费观看 | 91精品啪啪 | 日韩一级网站 | 99久久爱| 日日操天天操夜夜操 | 国产亚洲一区二区在线观看 | 一区 二区 精品 | 99国产在线视频 | 国产一区二区在线播放视频 | 亚洲欧美日韩精品久久久 | 99热在线国产 | 国产视频在线观看免费 | 天天操天天爱天天干 | 日本中文字幕在线播放 | 在线免费视频一区 | 99久久久久久久 | 亚洲电影久久久 | 香蕉在线观看视频 | 黄av免费| 日韩免费观看一区二区 | 婷婷综合影院 | 免费日韩一区二区三区 | 成人高清在线观看 | 国产成人一区二区精品非洲 | 日本超碰在线 | 欧美韩日在线 | 国产亚洲精品综合一区91 | 日韩一区在线免费观看 | 国产一区二区三区四区在线 | 久久精品毛片 | 日夜夜精品视频 | 国产精品video爽爽爽爽 | 久久爽久久爽久久av东京爽 | 午夜精品视频免费在线观看 | 99视频精品 | 99视频在线观看一区三区 | 国产精品观看在线亚洲人成网 | 四虎亚洲精品 | av资源免费在线观看 | 国产麻豆视频 | 福利网址在线观看 | 午夜黄色大片 | 国产一区二区久久精品 | 久av电影 | 91丨porny丨九色 | 97天堂 | 久久久久9999亚洲精品 | 在线播放国产一区二区三区 | 国产亚洲人成网站在线观看 | 国内免费久久久久久久久久久 | 成人国产精品入口 | 午夜影院一级片 | 99视频这里只有 | 欧美日韩国产精品爽爽 | 天天曰天天曰 | 九九久久久久久久久激情 | 久久久久久久久久久久av | 久久99电影 | 日韩免费观看一区二区 | 狠狠地操| 成人在线观看免费 | 在线观看中文字幕第一页 | 三上悠亚一区二区在线观看 | 天天干.com | 日韩激情中文字幕 | 久久美女免费视频 | 亚洲激情视频在线 | 91欧美视频网站 | 中文字幕视频免费观看 | 日韩在线视频网站 | 日韩 在线 | 国产免费一区二区三区最新6 | 婷婷色吧 | 天天操天天爱天天爽 | 日韩在线观看视频网站 | 狠狠色狠狠色综合系列 | 亚洲视频在线视频 | 99国产精品久久久久久久久久 | 欧美伦理一区 | 亚洲黄色小说网 | 久久国产精品免费视频 | 五月天激情视频在线观看 | 中文不卡视频 | 91精品播放 | 成人精品视频 | 99久久国产免费看 | 国际精品久久 | 久久国产精品免费一区 | 99精品视频免费全部在线 | 久久国产精品一区二区三区 | 91在线资源 | 亚洲国产视频网站 | 精品夜夜嗨av一区二区三区 | 日韩最新在线视频 | 国产高清亚洲 | 99在线观看视频 | 免费视频久久久 | 国产九九热 | 亚洲激情校园春色 | 深夜福利视频在线观看 | 天天综合亚洲 | 亚洲国产一区在线观看 | 亚洲毛片久久 | 日韩在线字幕 | 久久这里有精品 | 婷婷网在线 | 精品国产一区二区三区蜜臀 | 亚洲乱码在线观看 | av成人免费在线看 | 亚洲午夜av电影 | 亚洲精品高清一区二区三区四区 | 黄色大片av | 日韩精品视频在线免费观看 | 久久人操 | 黄免费在线观看 | 天天插天天狠天天透 | 国产最新在线视频 | 色偷偷网站视频 | 国产98色在线 | 日韩 | 午夜av在线免费 | 日韩有码在线观看视频 | 在线观看免费一级片 | 久久天天躁狠狠躁夜夜不卡公司 | 久久久香蕉视频 | 国产精品一区二区吃奶在线观看 | 国产精品美女久久久免费 | 国产亚洲va综合人人澡精品 | 麻豆视频在线免费看 | 亚洲影院国产 | 日韩高清在线一区二区三区 | 久久国产精品视频 | 亚洲自拍自偷 | 亚洲精品中文字幕视频 | 91精品国产一区二区在线观看 | 中文字幕区 | 国产精品va | 国产精品精品久久久 | 免费日韩电影 | 久久久99久久 | 91爱爱电影 | 91亚洲夫妻 | 91av视频观看 | 久久www免费人成看片高清 | 久久精品女人毛片国产 | 免费观看国产精品视频 | 亚洲欧美国产精品18p | 日韩精品 在线视频 | 亚洲视频在线看 | 开心色激情网 | 娇妻呻吟一区二区三区 | 麻豆免费在线播放 | 欧美与欧洲交xxxx免费观看 | 99综合影院在线 | 日本精品中文字幕在线观看 | 成人av资源站 | 日韩精品无| 色婷婷激情四射 | 日韩av看片 | 亚洲人人精品 | 麻豆免费观看视频 | 午夜免费久久看 | 国产精品欧美 | 四虎成人免费影院 | 免费黄色a级毛片 | 精品高清美女精品国产区 | 超碰99在线 | 国产伦精品一区二区三区四区视频 | 五月综合色婷婷 | 国产拍揄自揄精品视频麻豆 | 国产视频在线播放 | 久久免费激情视频 | 久久99热这里只有精品国产 | 亚洲狠狠干 | 午夜少妇| 中文字幕 国产 一区 | 国产视频97 | 日韩在线视频网站 | 中文字幕精品一区 | 精品一区二区电影 | 中文字幕观看视频 | 国内精品久久久久久久久久久 | 91精品国自产在线观看 | 午夜美女网站 | 欧美日本中文字幕 | 4hu视频| 狠狠88综合久久久久综合网 | 日韩精品短视频 | 国产成人精品区 | 成人av资源在线 | 狠狠躁日日躁狂躁夜夜躁av | 天天天操天天天干 | 人人爽人人澡人人添人人人人 | www黄在线 | 中文字幕 在线看 | 国产高清视频在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 欧美日韩一区二区三区免费视频 | 成人理论在线观看 | 久久久久久久久久亚洲精品 | 视频在线精品 | 久草免费在线 | 久久久久久综合网天天 | 99色在线播放 | 久久久国产精品一区二区三区 | 欧美激情综合色综合啪啪五月 | 久久草视频| 久久男人视频 | 中文字幕888 | 色综合天天视频在线观看 | 免费黄色激情视频 | 亚洲一区 影院 | av免费网 | 亚洲成a人片在线www | 97视频在线观看网址 | 婷婷福利影院 | 久久成人在线视频 | 99视频在线精品 | 免费在线成人av电影 | 日韩中文字幕在线不卡 | 在线观看精品黄av片免费 | 99久久婷婷国产精品综合 | 狠狠的日日| 久草免费在线视频 | 欧美色图88 | 国产一卡久久电影永久 | 午夜体验区 | 99久久精品一区二区成人 | 亚洲成av人片 | 国产亚洲综合在线 | 六月丁香激情综合色啪小说 | 日韩电影在线视频 | 久久久久久久久久久久久影院 | 日韩av成人在线观看 | 四虎4hu永久免费 | 欧美午夜理伦三级在线观看 | 天天操伊人 | 久久久免费精品 | 婷婷色av | 午夜国产福利在线 | 亚洲精品在线观看网站 | 久久久综合香蕉尹人综合网 | 正在播放 国产精品 | 91传媒视频在线观看 | 国产精品短视频 | 亚洲深夜影院 | 久久一精品 | 久操视频在线免费看 | 又长又大又黑又粗欧美 |