《云计算虚拟化技术基础与实践》课件第九章 容器虚拟化技术基础_第1页
《云计算虚拟化技术基础与实践》课件第九章 容器虚拟化技术基础_第2页
《云计算虚拟化技术基础与实践》课件第九章 容器虚拟化技术基础_第3页
《云计算虚拟化技术基础与实践》课件第九章 容器虚拟化技术基础_第4页
《云计算虚拟化技术基础与实践》课件第九章 容器虚拟化技术基础_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本章重点了解容器虚拟化的基本原理。掌握Docker安装与部署过程。掌握Docker仓库搭建过程。掌握Docker镜像、Docker容器、Docker网络连接的基本原理和具体操作。容器虚拟化概述容器技术前世今生容器基本原理Docker起源及架构01容器虚拟化概述容器虚拟化提供了一种运行时环境,隔离了上层应用与下层操作系统、硬件的关联,便于更加高效的构建应用,也易于管理维护。在传统的软件行业中,开发人员的主要工作是应用程序的编码、构建、测试和发布,涉及应用程序和运行时平台这两层。而运维人员的工作则涉及从硬件、操作系统到运行时平台的安装、配置、运行监控、升级和优化等工作。在现代计算机技术中,容器技术就是将应用程序打包到每一个单独的容器之中,通过这个封装的过程,将每个应用程序进行隔离,打断应用程序之前的依赖与连接关系。一个庞大的服务系统在容器技术的支持下,可以由许多不同的应用程序所寄居的容器组合而成,这种拆解再组合的过程,让应用程序之间的耦合度降到最低。1.容器技术前世今生最早的容器技术始于1979年提出的UNIXchroot,它最初是一个UNIX操作系统的系统调用,用于将一个进程及其子进程的根目录改变到文件系统中的一个新位置,让这些进程只能访问这个新的位置,从而达到了进程隔离的目的。2000年,R&DAssociates公司为FreeBSD引入了一个类似于chroot的容器技术,名叫Jails。与chroot不同的是,它为文件系统、用户和网络等的隔离增加了进程沙盒功能。这是最早期,也是功能最多的容器技术。2008年,推出了LinuxContainer(简称为LXC),它是基于Cgroups和Linux命名空间Namespace推出了第一个最完善的Linux容器。2013年,dotcloud公司推出到现在为止最为流行和使用最广泛的容器Docker。2.容器基本原理容器本质就是宿主机上的一个进程,它的核心技术是Namespace和Cgroups。容器技术通过Namespace实现资源隔离,确保一个容器中运行的进程只会感知容器内进程的变化,不能影响容器外的其他进程,同时也不会被容器外的其他进程所影响。通过Cgroups实现资源控制,可以用于进行资源的核算和限制。通过rootfs(RootFileSystem,根文件系统,简称为rootfs)实现文件系统隔离,再加上容器引擎自身的特性来管理容器的生命周期。2.容器基本原理1.Namespace资源隔离一个完整的容器需要做到六种基本隔离,也就是Linux内核需要提供六种Namespace隔离.Namespace隔离内容Mount文件系统Network网络资源IPC信号量、消息队列和共享内存PID进程号UTS主机和域名User用户和用户组2.容器基本原理1.Namespace资源隔离NamespaceAPI的主要操作主要包括clone()、setns()以及unshare()。1)使用clone()函数在创建进程的同时创建新的Namespace2)使用setns()加入一个已经存在的Namespace3)使用unshare()在原先进程上进行Namespace隔离2.容器基本原理2.Cgroups资源隔离Cgroups用来限制、控制和分离一个进程组群的资源,如CPU、内存、I/O等。Cgroups是Linux内核提供的一种机制,这种机制可以根据需求把一系列系统任务及子任务整合到按资源划分等级的不同组内,从而为系统的资源管理提供一个统一的框架。Cgroups的主要功能:ResourceLimitation:Cgroups可以对任务使用的资源进行限制,比如设置内存使用上限以及限制文件系统的缓存等。Prioritization:Cgroups可以通过分配CPU时间片个数和磁盘I/O宽带大小来控制优先级。Accounting:Cgroups可以统计系统的资源使用量,主要目的是为了计费。Control:Cgroups可以进行挂起进程或恢复进程等操作。2.容器基本原理2.Cgroups资源隔离查看Linux内核中是否启用了Cgroups第一步,查看linux的内核版本号。第二步,查看内核版本对应的配置文件(对应的Cgroups的配置值为y,表示已经启用)。第三步,查看Cgroups是否挂载成功(挂载成功,就会在/sys/fs/cgroup目录下看到相应文件)。[root@localhost~]#uname–r[root@localhost~]#cat/boot/config-3.10.0-1160.15.2.el7.x86_64|grepCGROUP[root@localhost~]#mount-tcgroup3.Docker起源及架构2010年,几个大胡子年轻人在美国旧金山成立了一家做PaaS平台的公司,起名为dotCloud。dotCloud主要是基于PaaS平台为开发者或开发商提供相应的技术服务,具体来说,是和LXC(Linux容器虚拟技术)有关的容器技术。后来,dotCloud公司将自己的容器技术进行了简化和标准化,并命名为Docker。2013年3月,dotCloud公司的创始人之一,Docker之父,28岁的SolomonHykes正式决定将Docker项目开源。IT工程师发现了Docker的优点,然后蜂拥而至,加入Docker开源社区。Docker开源后,迅速成为GitHub上最热门的项目。开源当月,Docker0.1版本发布,此后的每一个月,Docker都会发布一个版本。到2014年6月9日,Docker1.0版本正式发布。Docker是基于容器技术的轻量级虚拟化解决方案,利用Docker,开发者可以将应用及其依赖包打包到一个容器中,进行发布。3.Docker起源及架构Docker并没有和虚拟机一样利用一个完全独立的GuestOS实现环境隔离,它利用的是目前Linux内核本身支持的容器方式实现资源和环境隔离。虚拟机技术和容器技术对比3.Docker起源及架构与虚拟机技术相比较,Docker容器技术有很多的优势:虚拟机技术和容器技术对比

虚拟机技术容器技术磁盘占用情况非常大,甚至上GB很小,甚至几十KB启动速度很慢,常常需要几分钟很快,一般只需几秒钟运行形态运行在Hypervisor上直接运行于宿主机的内核上,不同容器共享同一个Linux内核上并发性最多几十个虚拟机可以同时启动成百上千个容器性能比宿主机差接近于宿主机本地进程资源利用率低高3.Docker起源及架构Docker是C/S(客户端Client-服务器Server)架构模式。DockerClient客户端和daemon守护进程。Docker镜像是用于创建Docker容器的模板,是Docker容器启动的基础。DockerContainer容器是一个基于Docker镜像创建,包含运行某一特定程序所需要的OS、软件、配置文件和数据,可以一直运行的单元。DockerRegistry仓库主要用来保存镜像文件。Docker的基本架构3.Docker起源及架构要启动一个新的Docker应用A,它的大致工作流程:Docker工作流程Docker安装与部署Docker安装镜像加速02Docker安装与部署到目前为止,Docker已经原生支持几乎所有的Linux、Windows、MacOS三大平台和主流的云平台(AmazonEC2,GoogleCloudPlatform,RackspaceCloud和阿里云等)。Docker的安装指的是DockerEngine的安装,即Docker中核心的容器处理部分。准备工作:Docker只能安装在64位计算机上。对于Linux系统,内核版本必须大于3.10,如果小于3.10则会因为缺少Docker容器运行时所需要的功能而出错。1.Docker安装1.将yum包更新到最新。2.安装所需的软件包yum-utils、device-mapper-persistent-data和lvm2。3.设置仓库(使用阿里云的源地址)。4.安装最新版本的DockerCE,或转到下一步安装特定版本。6.启动docker,并设置为开机启动。7.运行“dockerrunhello-world”命令,验证是否正确安装DockerCE。[root@localhost~]#yumupdate[root@localhost~]#yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2[root@localhost~]#yum-config-manager\>--add-repo\>/docker-ce/linux/centos/docker-ce.repo[root@localhost~]#yuminstalldocker-ce[root@localhost~]#systemctlstartdocker[root@localhost~]#systemctlenabledocker[root@localhost~]#dockerrunhello-world2.镜像加速由于Docker服务器在国外,有时在国内无法正常拉取镜像。为了解决这个问题,可以为Docker设置国内的镜像加速器。国内Docker镜像加速的组织有很多,在本节以阿里云为例,参考阿里云的官方操作文档进行设置。[root@localhost~]#sudomkdir-p/etc/docker[root@localhost~]#sudotee/etc/docker/daemon.json<<-'EOF'>{>"registry-mirrors":["https://******."]>}EOF[root@localhost~]#sudosystemctldaemon-reload[root@localhost~]#sudosystemctlrestartdockerDocker镜像Docker镜像基础构建镜像查看镜像分发镜像搜索镜像镜像其他操作031.Docker镜像基础Docker镜像类似于虚拟机的镜像,是一个只读的Docker容器模板。它是采用联合挂载技术实现的一个层叠式的文件系统。镜像中含有启动Docker容器所需的文件系统结构和内容,是容器构建的基石。registry主要用来保存Docker镜像,包括镜像层次结构和关于镜像的元数据。repository是具有某个功能的Docker镜像的所有迭代版本构成的镜像组。manifest(描述文件)主要存在于registry中作为Docker镜像的元数据文件,在pull、push、save和load过程中作为镜像结构和基础信息的描述文件。image用来存储一组镜像相关的元数据信息。layer是一个Docker用来管理镜像层的中间概念,镜像是镜像层组成的,而单个镜像层可以被多个镜像共享。1.Docker镜像基础registry是repository的集合repository是image的集合image是由多个layer组成的一个layer也可以被多个镜像所共享Docker镜像关键概念关系图1.Docker镜像基础Docker镜像的主要特点:分层:采用分层方式构建,每一个镜像都由一系列的镜像层组成。写时复制:采用写时复制策略,多个容器间共享镜像,所有镜像层都以只读方式挂载到一个挂载点,上面附加一个可读写层。当需要修改镜像的文件时,只对最上方的读写层进行改动,不覆盖下层已有文件系统的内容。联合挂载:联合挂载可以在一个挂载点同时挂载多个文件系统,将挂载点的原目录与被挂载内容进行整合,最终可见的文件系统将会包含整合之后的各层文件和目录。1.Docker镜像基础假设某一个镜像一共有两层,第一层有三个文件夹,第二层有两个文件夹,使用联合挂载技术叠加后,从内核角度能够显式区分开两个层次,但是从用户的角度来看,只可以看到五个文件夹,感觉不到分层的存在。从用户的角度查看分层文件系统2.构建镜像镜像的构建是Docker工作流程的第一步,有了镜像才能运行容器。构建一个Docker镜像的常见方法有两种,一种是通过命令“dockercommit”构建镜像,一种是通过Dockerfile文件构建镜像。2.构建镜像1.使用dockercommit命令构建镜像举例说明:通过镜像centos:7启动一个容器,在容器中新建一个1.txt文件,内容为“Thisisatest”,用dockercommit命令提交新容器为镜像。1)下载镜像centos:7,并利用镜像来启动一个交互式容器commit_test。2)在容器中新建一个1.txt文件,内容为“Thisisatest”,然后退出容器。[root@localhost~]#dockerpullcentos:7[root@5f29ebd5c1ac/]#echo"Thisisatest">1.txt[root@5f29ebd5c1ac/]#exit2.构建镜像1.使用dockercommit命令构建镜像举例说明:通过镜像centos:7启动一个容器,在容器中新建一个1.txt文件,内容为“Thisisatest”,用dockercommit命令提交新容器为镜像。3)把容器commit_test提交为镜像commit_image1,设置镜像作者为catherine,提交修改的内容1.txt。4)使用刚创建的镜像commit_image1启动一个新容器commit_test1,并查看容器内部是否有1.txt文件。[root@localhost~]#dockercommit-a‘catherine’-m‘1.txt’commit_testcommit_image1[root@localhost~]#dockerrun-it--namecommit_test1commit_image1/bin/bash[root@9840a77224f1/]#cat1.txtThisisatest2.构建镜像2.通过Dockerfile文件构建镜像举例说明:通过镜像centos:7启动一个容器,在容器中新建一个2.txt文件,内容为“Thisisatest2”,用Dockerfile文件提交新容器为镜像。1)新建并编写Dockerfile文件。2)使用刚编写的Dockerfile文件,使用dockerbuild命令构建镜像commit_image2。3)使用刚创建的镜像commit_image2启动一个新容器commit_test2,并查看容器内的2.txt文件。[root@localhost~]#viDockerfile#FirstDockerfileFROMcentos:7MAINTAINERcatherine3********@RUNecho"Thisisatest2">2.txt[root@localhost~]#dockerbuild-tcommit_image2[root@localhost~]#dockerrun-it--namecommit_test2commit_image2/bin/bash[root@13be03635c87/]#cat2.txtThisisatest23.查看镜像在实际过程中,经常需要查看镜像相关信息。可以使用dockerimages命令查看镜像名称、标签、ID号、创建时间和大小等简单信息。列出包含中间层的所有镜像。列出镜像名为ubuntu的镜像id。用dockerinspect查看镜像hello-world详细信息。查看hello-world镜像的创建时间。[root@localhost~]#dockerimages–a[root@localhost~]#dockerimages-qubuntu[root@localhost~]#dockerinspecthello-world[root@localhost~]#dockerinspect-f'镜像创建时间是:{{.Created}}'hello-world4.分发镜像Docker技术的目的就是为了在不同机器上创建无差别的应用环境,使一个机器上的容器迁移到另一台机器上更加容易。可以采用容器迁移命令来实现,也可以采用镜像分发的方式来实现。能够进行镜像分发的命令有很多,包括dockerpull和dockerpush,dockersave和dockerload。dockerpull和dockerpush通过线上DockerHub的方式迁移。dockersave和dockerload通过线下包分发的方式进行迁移。4.分发镜像1.dockerpull命令Docker提供了非常方便的拉取指令,通过dockerpull命令可以拉取各个镜像仓库的镜像。从官方仓库DockerHub中拉取镜像ubuntu:16.04。如果想从本地私有镜像仓库中拉取镜像ubuntu:16.04,可以指定仓库地址和端口号。[root@localhost~]#dockerpullubuntu:16.04[root@localhost~]#dockerpulllocalhost:5000ubuntu:16.044.分发镜像2.dockerpush命令当用户制作了镜像后,希望将其上传到仓库中,此时可以通过dockerpush命令完成该操作。DockerHub是Docker官方默认仓库,如果读者想要把镜像发布到官方默认仓库,在使用push命令之前,需要先在DockerHub镜像仓库中注册账户并登录。将镜像commit_image1发布到DockerHub上:1)在终端使用dockerlogin命令登录DockerHub仓库。2)在推送镜像之前需要先给镜像打上标签为147258369abc/commit_image1。3)使用dockerpush命令将镜像推送到镜像仓库中。[root@localhost~]#dockerlogin[centos@localhost~]$dockertagcommit_image1147258369abc/commit_image1[root@localhost~]#dockerpush147258369abc/commit_image14.分发镜像3.dockersave命令若要将某一个镜像文件保存在本地文件系统时,可以使用dockersave命令。将镜像centos:7保存为centos7.tar文档。使用“>”符号导出镜像。[root@localhost~]#dockersave-ocentos7.tarcentos:7[root@localhost~]#llcentos7.tar[root@localhost~]#dockersavecentos:7>centos7.tar4.分发镜像4.dockerload命令使用dockerload命令可以加载导出的镜像包到本地仓库中。将使用dockersave命令生成的centos7.tar文档导入到本地仓库中。1)查看本地镜像仓库,确认没有centos:7镜像。2)使用dockerload命令将tar包导入到本地镜像仓库。3)再次查看本地镜像仓库,确认centos:7镜像包被导入成功。也可以使用“<”符号导入镜像。[root@localhost~]#dockerimages[root@localhost~]#dockerload-icentos7.tar[root@localhost~]#dockerimages[root@localhost~]#dockerload<centos7.tar5.搜索镜像常见的镜像搜索方式有两种,第一种是通过dockersearch命令行方式搜索,第二种是直接在DockerHub官方网站上直接搜索。从DockerHub查找所有镜像名包含centos,并且收藏数大于20的镜像。在DockerHub网站上直接搜索centos。[root@localhost~]#dockersearch-fstars=20centos6.镜像其他操作删除镜像一般使用命令dockerrmi删除镜像文件ubuntu:14.04。删除一个正在被使用的镜像文件ubuntu:16.04。dockerhistory可以用来查看指定镜像的创建历史。查看镜像文件centos:7的历史。[root@localhost~]#dockerhistorycentos:7[root@localhost~]#dockerrmiubuntu:14.04[root@localhost~]#dockerrmi-fubuntu:16.04Docker仓库Docker仓库简介Registry私有仓库的搭建与使用041.Docker仓库简介Docker仓库是用来保存镜像的位置,Docker提供一个注册服务器Registry来保存多个仓库Repository。Docker仓库可以很方便的进行镜像的存储、分发和更新等管理操作。一般来说,仓库有以下几种:DockerHub:当前最大的Docker镜像仓库,也是官方镜像仓库。内部私有镜像仓库:用户在内部创建的私有仓库。在本地局域网搭建,类似公共仓库。第三方镜像仓库:第三方公司设置的镜像仓库。1.Docker仓库简介在DockerHub官方镜像仓库中注册账号,并使用。DockerHub的注册界面填写DockerID,Email,Password等信息,并点击SignUp。1.Docker仓库简介在DockerHub官方镜像仓库中注册账号,并使用。登录成功后,即可进入DockerHub官网的个人页面。在创建Repository时,设置名为ubuntu。之后就可以把ubuntu相关的镜像推送到此处。2.Registry私有仓库的搭建和使用在实际应用中,除了使用DockerHub可以共享镜像仓库,还可以自己搭建私有的镜像仓库。在企业中,为了避免商业项目被暴露,一般选择部署自己的私有镜像仓库。以下以两个节点为例给出部署私有镜像仓库的步骤:环境:准备两台安装好Docker的服务器。服务器端机器:Docker私有仓库服务器,运行Registry容器;客户端机器:已经安装Docker的普通服务器,在这台服务器上下载一个测试镜像,然后上传到Registry服务器进行测试。2.Registry私有仓库的搭建和使用服务器端操作:1)在私有仓库服务器上快速创建镜像仓库。2)使用dockerps-l命令查看容器情况。3)查看刚刚创建的镜像仓库中是否有镜像文件。4)查看本服务器的IP地址。[root@localhost~]#dockerrun-d-p5000:5000--restart=always--nameregistry1registry:latest[root@localhost~]#dockerps-l[root@localhost~]#curl:5000/v2/_catalog[root@localhost~]#ifconfig2.Registry私有仓库的搭建和使用客户端操作:1)在客户端机器上下载一个nginx:latest镜像,并标记为私有仓库的版本。2)在客户端配置私有仓库的可信任设置,以便可以通过HTTP直接访问。3)将刚刚标记的镜像推送到私有仓库中。4)在服务器端查看仓库中的镜像列表。[root@localhost~]#dockerpullnginx:latest[root@localhost~]#vi/etc/docker/daemon.json{"insecure-registries":["03:5000"]//服务器的IP和端口}[root@localhost~]#systemctlrestartdocker[root@localhost~]#dockerpush03:5000/nginx:latest[root@localhost~]#curl:5000/v2/_catalog{"repositories":["nginx"]}Docker容器Docker容器基础创建与启动容器查看容器分发容器进入容器内部容器其他操作051.Docker容器基础Docker容器是基于镜像运行的一个轻量级的环境。可以把Docker容器简单理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库和SHELL环境等,但这个沙盒默认不会运行任何程序。用户需要在沙盒中运行一个进程来启动某一个容器,这个进程是该容器的唯一进程。Docker容器有以下两种运行态:前台交互式:容器运行在前台。后台守护式:容器运行在后台。2.创建与启动容器使用dockercreate命令可以新建一个容器,但容器并未启动。使用centos:7镜像创建一个容器。启动将刚刚创建的容器create1。[root@localhost~]#dockercreate--namecreate1-itcentos:7[root@localhost~]#dockerstartcreate12.创建与启动容器原来没有这个容器,需要基于一个镜像启动新的容器,此时使用dockerrun命令。使用镜像文件centos:7创建一个交互式容器,并查看容器当前目录。使用镜像文件ubuntu:16.04启动一个后台守护式容器,让其在后台一直输出hellodocker。1.启动后台守护式容器dowhile1。2.使用dockerps命令查看容器的状态。3.使用dockerlogs命令查看容器的日志信息。[root@localhost~]#dockerrun--namedowhile1-dcentos:7/bin/bash-c"whiletrue;doechohellodocker;sleep1;done;“[root@localhost~]#dockerps-l[root@localhost~]#dockerlogsdowhile1[root@localhost~]#dockerrun-itcentos:7/bin/bash3.查看容器查看容器的信息,除了可以使用dockerinspect之外,还可以用dockerps命令。列出当前所有正在运行的容器。列出最近创建的一个容器。列出最近创建的5个容器信息。[root@localhost~]#dockerps[root@localhost~]#dockerps-l[root@localhost~]#dockerps-n54.分发容器容器可以导出、导入,dockerexport和dockerimport则是容器的导出导入命令。容器导出命令容器导出是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态,可以使用dockerexport命令。将容器exec1导出为一个文件1.tar。容器导入命令容器导入是指使用dockerimport命令将文件导入到本地仓库成为镜像,启动镜像就可以恢复容器。将刚刚创建的文件1.tar导入到本地镜像仓库,名为import1。[root@localhost~]#dockerimport1.tarimport1[root@localhost~]#dockerexportexec1-o1.tar5.进入容器内部1.dockerattach命令dockerattach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作。1)以交互方式运行一个容器attach1,使用ls命令查看容器当前目录下的内容,然后用ctrl+P+Q来退出但是不结束交互式容器。2)使用ps命令查看容器的状态是否是正在运行。3)使用dockerattach加上容器的id号或名字,再次进入容器。[root@localhost~]#dockerrun--nameattach1-itcentos:7/bin/bash[root@localhost~]#dockerps–l[root@localhost~]#dockerattachattach15.进入容器内部2.dockerexec命令利用dockerexec命令也可以进入一个已经运行的容器,然后进行命令执行的动作。1)以守护式方式运行一个容器exec1。2)使用ps命令查看容器的状态,使用logs命令查看容器的日志。3)使用dockerexec加上容器的ID号或名字,以交互方式进入容器。[root@localhost~]#dockerrun--nameexec1-dcentos:7/bin/bash-c"whiletrue;doechohellodocker;sleep1;done;"[root@localhost~]#dockerps-l[root@localhost~]#dockerlogsexec1[root@localhost~]#dockerexec-itexec1/bin/bash6.容器其他操作容器停止:指停止一个正在运行的容器。停止一个正在运行的容器exec1。[root@localhost~]#dockerkillexec1[root@localhost~]#dockerstopexec1容器杀死:是指快速停止一个容器,类似于强制结束。杀死一个正在运行的容器exec1。容器删除:容器的删除是指删除一个或多个容器。用-f选项来强制删除一个正在运行的容器exec1。删除容器exec1,并删除容器挂载的数据卷。[root@localhost~]#dockerrm-fexec1[root@localhost~]#dockerrm-vexec1Docker网络Docker网络基础Docker网络模式Bridge模式下容器间互连Bridge模式下容器与外部网络连接061.Docker网络基础Docker默认网络主要是由NetworkNamespaces、VethPair、LinuxBridge和Iptables技术等来实现的。NetworkNamespaces:实现了网络隔离。VethPair:打穿了隔离环境中的网络数据传输通道。LinuxBridge:宿主机上的网桥,用于在容器之间进行数据的转发。Iptables:提供网络数据穿透等功能,也可以利用它实现网络防火墙等功能。Docker守护进程通过docker0为容器提供网络服务。docker0是Linux的虚拟网桥,是数据链路层的设备。默认情况下容器是无法与外部通信互联的,需要在创建容器时加上相应的参数实现端口映射,这就是dockerrun的-p参数。1.Docker网络基础启动一个nginx服务,将宿主机的端口8000映射到容器内部80端口。可以在宿主机浏览器上访问:8000[root@localhost~]#dockerrun-d-p8000:80--nametest1nginx:alpine2.Docker网络模式Docker主要有以下四种网络模型:1.Host:删除容器和Docker主机之间的网络隔离,并直接使用主机的网络。2.None:禁用所有网络。3.Joined:处于这个模式下的Docker容器会共享其它容器的网络环境,因此,至少这两个容器之间不存在网络隔离,而这两个容器又与宿主机以及除此之外其他的容器存在网络隔离。4.Bridge:默认网络驱动程序。当你的应用程序在需要通信的容器中运行时,通常会使用桥接网络。Docker内置bridge、host和none三个网络。2.Docker网络模式1.Host模式Host模式没有为容器创建一个隔离的网络环境,该模式下的Docker容器会和宿主机共享同一个网络Namespace。创建一个网络模式为host的容器。1)创建网络模式为Host的容器b1。2)在容器b1内部用ifconfig查看网络状况。[root@localhost~]#dockerrun--nameb1--networkhost-it--rmbusybox/#ifconfig2.Docker网络模式1.Host模式创建一个网络模式为host的容器。3)在容器内部,在/tmp目录下新建文件index.html,并写入数据。启动httpd,并查看相应端口。4)在宿主机浏览器上,查看index.html。/#echo"Thisisatest.">/tmp/index.html/#httpd-h/tmp//#netstat-nat|grep80tcp03205:5348010:443LAST_ACKtcp00:::80:::*LISTEN2.Docker网络模式2.None模式当网络模式为None模式时,表示Docker容器拥有自己的NetworkNamespace,但并未对Docker容器进行任何网络配置。创建一个网络模式为None的容器b2,并查看网络状况。[root@localhost~]#dockerrun-it--nameb2--networknone--rmbusybox/#ifconfig2.Docker网络模式3.Joined模式Joined模式指定新创建的容器和已经存在的一个容器共享一个NetworkNamespace。创建一个网络模式为Joined的容器,并查看网络状况。1)创建一个容器b3,用hostname查看主机名,ip命令查看网络情况。2)创建一个Joined模式的容器b4,与b3共享网络情况,用hostname查看主机名,ip命令查看网络情况,发现容器b4的主机名和网络状况与b3一致。[root@localhost~]#dockerrun--nameb3-it--rmbusybox/#hostname449ea8bd730b/#ipa[root@localhost~]#dockerrun--nameb4-it--networkcontainer:b3--rmbusybox/#hostname449ea8bd730b/#ipa2.Docker网络模式3.Joined模式创建一个网络模式为Joined的容器,并查看网络状况。3)在容器b3内部,在/tmp目录下新建文件index.html,并写入数据,启动httpd。4)在容器b4上访问本地接口lo,可以正常访问。5)在容器b3上新建一个目录。6)在容器b4上访问目录,不成功。/#echo"Thisisatest.">/tmp/index.html/#httpd-h/tmp//#wget-O--q/#mkdir/tmp/test/#mkdir/tmp/test2.Docker网络模式4.Bridge模式Bridge模式是Docker的默认网络模式,不写--net参数,就是Bridge模式。容器创建时,在主机上创建一对虚拟网卡vethpair设备,Docker将vethpair设备的一端放在新创建的容器中,命名为eth0(容器的网卡),另一端放在宿主机中,命名为veth***,并将这个网络设备加入到docker0网桥中。2.Docker网络模式4.Bridge模式创建一个Bridge模式容器,在宿主机上和容器内部查看网络接口情况。1)安装网桥管理工具。2)查看网桥设备docker0,此时没有相应的网络接口。3)开启一个交互式容器b5。4)进入容器内部,使用ifconfig命令查看Docker网络情况。5)用Ctrl+p+q退出容器但是保持容器的继续运行,并在宿主机中查看网络情况。[root@localhost~]#yuminstallbridge-utils[root@localhost~]#brctlshow[root@localhost~]#dockerrun-it--nameb5centos:7/bin/bash[root@0c207cf0b00e/]#yuminstallnet-too

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论