Docker技术分享

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Docker技术分享潘英基2020.05.10目录CONTENTSContainer•容器是一种基础工具•泛指任何可以用于容纳其他物品的工具,可以部分或完全封闭,被用于容纳、储存、运输物品•物品可以被放置在容器中,而容器则可以保护内容物虚拟化•主机级别虚拟化:虚拟机•内核级别虚拟化:Linux容器虚拟机AppAAppBGuestOSGuestOSBins/LibsBins/LibsHypervisorHostOSServerLinux容器AppAAppBBins/LibsBins/LibsDockerEngineHostOSServer传统虚拟机与容器对比特性容器虚拟机启动秒级分钟级磁盘使用一般为MB一般为GB性能接近原生弱于系统支持量单机支持上千个容器一般几十个Linux容器隔离能力•隔离效果:容器的隔离能力相较于宿主机来说,是比较差的•原因:所有容器属于同一个内核,在内核级别上强行设定了边界,而主机级别的虚拟化本身不属于同一个内核,属于天然的隔离平台•解决方案:通过安全加强机制进行加固隔离边界Linux容器-隔离实现之Chrootchroot,即changerootdirectory(更改root目录)。在linux系统中,系统默认的目录结构都是以`/`,即是以根(root)开始的。而在使用chroot之后,系统的目录结构将以指定的位置作为`/`位置,因此它带来的好处大致有以下3个:•增加了系统的安全性,限制了用户的权力•建立一个与原系统隔离的系统目录结构•切换系统的根目录位置,引导Linux系统启动以及急救系统等Linux容器-隔离实现之CgroupsControllerGroups•控制组指派/分配资源•把系统级的资源分成多个组,把每个组内的资源量指派/分配到特定的用户空间的进程上Linux容器-隔离实现之Namespaces•Mountnamespaces:挂载点•UTSnamespaces:主机名与域名•IPCnamespaces:信号量、消息队列和共享内存•PIDnamespaces:进程号•Networknamespaces:网络设备、网络栈、端口等•Usernamespaces:用户和组LinuXContainer(lxc)•lxc-create创建lxc容器(lxc-create-nNAME-tTEMPLATE_NAME)•lxc-start启动容器(lxc-start-nNAME-d)•lxc-stop停止容器•lxc-checkconfig检查系统环境是否满足容器使用要求•lxc-info查看容器相关的信息(lxc-info-nNAME)•lxc-console附加至指定容器的控制台(lxc-console-nNAME-tNUMBER)•lxc-destroy删除处于停机状态的容器•lxc-snapshot创建和恢复快照LinuXContainer(lxc)•作用:Linux内核容器技术的简易使用工具,简化容器技术使用的方案•使用:通过template来创建•优势:能让每个用户空间的进程直接使用宿主机的性能,中间几乎没有额外开销,提高资源利用率•劣势:a.需要定制templateb.数据难以迁移c.批量创建较难d.难以分发,难以大规模使用DockerContainer•用途:a.LinuXContainer的增强版,其本身不是容器,容器是宿主机内核中的技术b.早期的版本是LinuXContainer的二次封装发行版•实现:利用LinuXContainer作为容器管理引擎•原理:在创建容器/用户空间时不再使用template,而是使用images•优势:a.用户空间相互隔离,互不影响b.便于分发,一次编译,到处运行•劣势:每次调试时,需要先进入用户空间的边界内,给运维带来极大的不便利DockerEngineClientdockerCLIRESTAPIserverdockerdaemonDockerEngine•DockerEngineisaclient-serverapplicationwiththesemajorcomponents:Aserverwhichisatypeoflong-runningprogramcalledadaemonprocess(thedockerdcommand)ARESTAPIwhichspecifiesinterfacesthatprogramscanusetotalktothedaemonandinstructitwhattodo.Acommandlineinterface(CLI)client(thedockercommand).DockerarchitectureDockerarchitecture•TheDockerdaemonTheDockerdaemon(dockerd)listensforDockerAPIrequestsandmanagesDockerobjectssuchasimages,containers,networks,andvolumes.•TheDockerclientTheDockerclient(docker)istheprimarywaythatmanyDockerusersinteractwithDocker.ThedockercommandusestheDockerAPI.•DockerregistriesADockerregistrystoresDockerimages.DockerHubisapublicregistrythatanyonecanuse,andDockerisconfiguredtolookforimagesonDockerHubbydefault.Youcanevenrunyourownprivateregistry.Dockerobjects•WhenyouuseDocker,youarecreatingandusingimages,containers,networks,volumes,plugins,andotherobjects.•IMAGESAnimageisaread-onlytemplatewithinstructionsforcreatingaDockercontainer.Often,animageisbasedonanotherimage,withsomeadditionalcustomization.Youmightcreateyourownimagesoryoumightonlyusethosecreatedbyothersandpublishedinaregistry.•CONTAINERSAcontainerisarunnableinstanceofanimage.Youcancreate,start,stop,move,ordeleteacontainerusingtheDockerAPIorCLI.Youcanconnectacontainertooneormorenetworks,attachstoragetoit,orevencreateanewimagebasedonitscurrentstate.常用操作•dockercreate:Createanewcontainer•dockercontainer:Managecontainers•dockerimages:Listimages•dockercp:Copyfiles/foldersbetweenacontainerandthelocalfilesystem•dockerexec:Runacommandinarunningcontainer•dockerinspect:Returnlow-levelinformationonDockerobjects•dockerload:LoadanimagefromatararchiveorSTDIN•dockersave:Saveoneormoreimagestoatararchive•dokcerlogs:Fetchthelogsofacontainer•dockerpause:Pauseallprocesseswithinoneormorecontainers•dockerunpause:Unpauseallprocesseswithinoneormorecontainers•dockerps:Listcontainers•dockerpull:Pullanimageorarepositoryfromaregistry•dockerpush:Pushanimageorarepositorytoaregistry•dockerrename:Renameacontainer•dockerrestart:Restartoneormorecontainers•dockerrm:Removeoneormorecontainers•dockerrmi:Removeoneormoreimages•dockerrun:Runacommandinanewcontainer•dockerstart:Startoneormorestoppedcontainers•dockerstop:StoponeormorerunningcontainersDockereventstateAboutDockerImages•Docker镜像含有启动容器所需的文件系统及其内容,因此,其用于创建并启动docker容器采用分层构建机制,最底层为boofs,次之为rootfsbootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后被卸载以节约内存资源;rootfs:位于bootfs之上,表现为容器的根文件系统;传统模式中,系统启动时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后,将其重新挂载为读写模式;在docker中,rootfs由内核挂载为“只读”模式,而后会通过“联合挂载”技术额外挂载一个“可写”层。DockerImageLayer•位于下层的镜像称为父镜像(parentimage),最底层的称为基础镜像(baseimage);•最上层为“可读写”层,其下的均为“只读”层。Referencesparentimage分享人:潘英基分享时间:2020年5月10日

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功