使用容器的理由上线流程繁琐开发测试申请资源审批部署测试等环节资源利用率低普遍服务器利用率低,造成过多浪费扩容缩容不及时业务高峰期扩容流程繁琐,上线不及时服务器环境臃肿服务器越来越臃肿,对维护、迁移带来困难环境不一致性如开发环境和测试环境不一致,在测试的时候就因为环境问题而不能正确运行容器VS虚拟机容器容器提供一个基本的独立环境,实现容器隔离、资源限制主要解决应用层问题,应用快速部署、高效管理 虚拟机提升服务器资源利用率提供一个完全隔离的环境 实现容器的核心技术Namespace:LinuxNamespace是kernel的一个功能,它可以隔离一系列系统的资源,Namespace是Linux内核用来隔离内核资源的方式。Cgroup(ControlGroups):Cgroups是Linux内核提供的一种可以限制、记录、隔离进程组(processgroups)所使用的物理资源(如:cpu,memory,IO等等)的机制 目前只需要知道:所谓的容器技术,是基于Linux操作系统的Namespace和Cgroup机制进行实现的Namespace主要用来做资源隔离,Cgroup主要用来做资源限制容器底层就是基于Namespace和Cgroup实现容器也只是一个进程而已 关于Linux的Namespace和Cgroups后面会专门进行分享。docker是啥使用最广泛的开源容器引擎一种操作系统级的虚拟化技术依赖于Linux内核特性:Namespace(资源隔离)和Cgroups(资源限制)一个简单的应用程序打包工具docker的好处提供简单的应用程序打包工具开发人员和运维人员职责逻辑分离开发人员:开发项目、打包项目环境代码成镜像、部署到容器平台运维人员:怎么高效的去管理这些容器带来的好处:运维人员结节省人工成本、持续发布有问题更好解决多环境保持一致性:开发环境、测试环境、预发布环境、生产环境docker的应用场景应用程序打包和发布应用程序隔离持续集成部署微服务快速搭建测试环境提供PaaS产品(平台即服务)docker的组成 三大组成分别是镜像、容器、仓库,通过docker的命令可以对docker的对象进行管理、对象有:容器、镜像、网络等。在centos7上安装dockerce(社区版)安装所需的系统工具sudoyuminstallyyumutilsdevicemapperpersistentdatalvm2添加软件源信息yumconfigmanageraddrepohttps:mirrors。aliyun。comdockercelinuxcentosdockerce。reposedisdownload。docker。commirrors。aliyun。comdockerceetcyum。repos。ddockerce。repo更新并安装DockerCEyummakecachefastyumyinstalldockerce启动Docker服务systemctlstartdockerdocker镜像一个分层存储的文件、不是一个单一的文件一个软件的环境一个镜像可以创建N个容器一种标准化的交付一个不包含Linux内核而又精简的Linux操作系统 配置镜像加速器(指向国内的阿里云镜像仓库)配置catetcdockerdaemon。jsonEOF{registrymirrors:〔https:b9pmyelo。mirror。aliyuncs。com〕}EOF重启dockersystemctlrestartdocker常用命令dockerpull拉取镜像dockerpush提交镜像dockerimages(或:dockerimagels)查看镜像dockerrun启动容器dockerprune删除不再使用的docker对象dockerinspect查看容器详情信息dockerbuild使用Dockerfile创建镜像dockersave导出镜像dockerload导入镜像dockerrm删除容器dockertag修改镜像的tagdockerstop停止容器dockerstart启动容器dockerrestart重启容器dockertop查看容器中运行的进程信息dockerexec在运行的容器中执行命令dockercp在容器和主机之间进行数据拷贝dockerlogs查看容器的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志adockerstats显示容器资源的使用情况,包括:CPU、内存、网络IO等dockerport列出指定容器的端口映射dockercommit从容器创建一个新的镜像基础实战 1、拉取镜像〔roottestadocker01〕〔roottestadocker01〕dockerpullnginxUsingdefaulttag:latestlatest:Pullingfromlibrarynginxa2abf6c4d29d:Pullcompletea9edb18cadd1:Pullcomplete589b7251471a:Pullcomplete186b1aaa4aa6:Pullcompleteb4df32aa5a72:Pullcompletea0bcbecc962e:PullcompleteDigest:sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Status:Downloadednewerimagefornginx:latestdocker。iolibrarynginx:latest〔roottestadocker01〕dockerpullcentosUsingdefaulttag:latestlatest:Pullingfromlibrarycentosa1d0c7532777:PullcompleteDigest:sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177Status:Downloadednewerimageforcentos:latestdocker。iolibrarycentos:latest〔roottestadocker01〕 2、查看镜像〔roottestadocker01〕dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatest605c77e624dd10monthsago141MBcentoslatest5d0da3dc976414monthsago231MB〔roottestadocker01〕dockerimagelsREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatest605c77e624dd10monthsago141MBcentoslatest5d0da3dc976414monthsago231MB〔roottestadocker01〕 3、删除镜像〔roottestadocker01〕dockerimagermnginxUntagged:nginx:latestUntagged:nginxsha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Deleted:sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85Deleted:sha256:b625d8e29573fa369e799ca7c5df8b7a902126d2b7cbeb390af59e4b9e1210c5Deleted:sha256:7850d382fb05e393e211067c5ca0aada2111fcbe550a90fed04d1c634bd31a14Deleted:sha256:02b80ac2055edd757a996c3d554e6a8906fd3521e14d1227440afd5163a5f1c4Deleted:sha256:b92aa5824592ecb46e6d169f8e694a99150ccef01a2aabea7b9c02356cdabe7cDeleted:sha256:780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5Deleted:sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f〔roottestadocker01〕dockerimagermcentosUntagged:centos:latestUntagged:centossha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177Deleted:sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6Deleted:sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59〔roottestadocker01〕〔roottestadocker01〕dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZE〔roottestadocker01〕更简洁的删除方式dockerrmicentos 4、启动容器〔roottestadocker01〕dockerrundp8080:80nameweb01hweb01nginxae5110bcb33626780b009d8d5ca11e3e217f767974d16f4e8d249755298bc927 5、查看容器〔roottestadocker01〕dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESae5110bcb336nginxdockerentrypoint。4secondsagoUp4seconds0。0。0。0:808080tcp,:::808080tcpweb01〔roottestadocker01〕 6、停止容器〔roottestadocker01〕dockerstopweb01web01 7、查看停止后的容器〔roottestadocker01〕dockerpsaCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMESae5110bcb336nginxdockerentrypoint。5minutesagoExited(0)15secondsagoweb01〔roottestadocker01〕 8、启动容器〔roottestadocker01〕dockerstartweb01web01 9、重启容器〔roottestadocker01〕dockerrestartweb01web01 10、进入容器〔roottestadocker01〕dockerexecitweb01bashrootweb01:lsbinbootdevdockerentrypoint。ddockerentrypoint。shetchomeliblib64mediamntoptprocrootrunsbinsrvsystmpusrvarrootweb01:exit(退出容器)exit〔roottestadocker01〕 11、删除所有未被tag标记的镜像〔roottestadocker01〕dockerimagepruneWARNING!Thiswillremovealldanglingimages。Areyousureyouwanttocontinue?〔yN〕yTotalreclaimedspace:0B〔roottestadocker01〕 12、删除所有未被容器使用的镜像〔roottestadocker01〕dockerimagepruneaWARNING!Thiswillremoveallimageswithoutatleastonecontainerassociatedtothem。Areyousureyouwanttocontinue?〔yN〕yDeletedImages:untagged:centos:latestuntagged:centossha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177deleted:sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6deleted:sha256:74ddd0ec08fa43d09f32636ba91a0a3053b02cb4627c35051aff89f853606b59Totalreclaimedspace:231。3MB〔roottestadocker01〕 13、prune命令不再使用的docker对象更多例子删除所有停止运行的容器dockercontainerprune删除所有未被挂载的卷dockervolumeprune删除所有网络dockernetworkprune删除docker所有资源dockersystemprune 14、查看容器详情〔roottestadocker01〕dockerinspectweb01〔{Id:ae5110bcb33626780b009d8d5ca11e3e217f767974d16f4e8d249755298bc927,Created:20221116T09:13:46。156778931Z,Path:dockerentrypoint。sh,Args:〔nginx,g,〕,State:{Status:running,Running:true,Paused:false,。。。。。。 15、修改镜像的tag(标签)〔roottestadocker01〕dockertagnginx:latestnginx:v1〔roottestadocker01〕dockertagnginx:latestnginx:v2〔roottestadocker01〕dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatest605c77e624dd10monthsago141MBnginxv1605c77e624dd10monthsago141MBnginxv2605c77e624dd10monthsago141MBcentoslatest5d0da3dc976414monthsago231MB 16、导出(保存)镜像方式1:重定向的方式〔roottestadocker01〕dockersavenginx:v1nginxv1。tar方式2:使用o参数〔roottestadocker01〕dockersaveonginxv2。tarnginx:v2〔roottestadocker01〕lsanacondaks。cfgnginxv1。tarnginxv2。tar〔roottestadocker01〕 17、导入镜像先删除〔roottestadocker01〕dockerrminginx:v1nginx:v2Untagged:nginx:v1Untagged:nginx:v2再次查看〔roottestadocker01〕dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatest605c77e624dd10monthsago141MBcentoslatest5d0da3dc976414monthsago231MB导入方式1:重定向的方式〔roottestadocker01〕dockerloadnginxv1。tarLoadedimage:nginx:v1导入方式2:使用i参数〔roottestadocker01〕dockerloadinginxv2。tarLoadedimage:nginx:v2导入后查看〔roottestadocker01〕dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEnginxlatest605c77e624dd10monthsago141MBnginxv1605c77e624dd10monthsago141MBnginxv2605c77e624dd10monthsago141MBcentoslatest5d0da3dc976414monthsago231MB〔roottestadocker01〕 18、查看容器中运行的进程信息〔roottestadocker01〕dockertopweb01UIDPIDPPIDCSTIMETTYTIMECMDroot1830718288017:22?00:00:00nginx:1011834918307017:22?00:00:00nginx:workerprocess〔roottestadocker01〕 19、在运行的容器中执行命令不进入容器执行命令〔roottestadocker01〕dockerexecweb01catetchosts127。0。0。1localhost::1localhostip6localhostip6loopbackfe00::0ip6localnetff00::0ip6mcastprefixff02::1ip6allnodesff02::2ip6allrouters172。17。0。2web01〔roottestadocker01〕进入容器执行命令〔roottestadocker01〕dockerexecitweb01bashrootweb01:catetchosts127。0。0。1localhost::1localhostip6localhostip6loopbackfe00::0ip6localnetff00::0ip6mcastprefixff02::1ip6allnodesff02::2ip6allrouters172。17。0。2web01rootweb01: 20、容器与主机之间的数据拷贝宿主机当前目录下的123。txt文件拷贝到容器里的tmp目录下〔roottestadocker01〕touch123。txt〔roottestadocker01〕echohello123。txt〔roottestadocker01〕cat123。txthello〔roottestadocker01〕dockercp。123。txtweb01:tmp〔roottestadocker01〕dockerexecweb01lstmp123。txt将主机mydir目录拷贝到容器web01中的tmp目录下,并将将其目录重命名为mydir01〔roottestadocker01〕mv123。txtmydir〔roottestadocker01〕dockercp。mydirweb01:tmpmydir01〔roottestadocker01〕dockerexecweb01lstmp123。txtmydir01〔roottestadocker01〕将容器web01里的etcnginxnginx。conf文件拷贝的宿主机的当前目录下〔roottestadocker01〕dockercpweb01:etcnginxnginx。conf。 20、查看容器的日志dockerlogs命令的参数f:跟踪日志输出since:显示某个开始时间的所有日志t:显示时间戳tail:仅列出最新N条容器日志跟踪查看容器web01的ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a输出〔roottestadocker01〕dockerlogsfweb01dockerentrypoint。sh:dockerentrypoint。disnotempty,willattempttoperformconfigurationdockerentrypoint。sh:Lookingforshellscriptsindockerentrypoint。ddockerentrypoint。sh:Launchingdockerentrypoint。d10listenonipv6bydefault。sh10listenonipv6bydefault。sh:info:Gettingthechecksumofetcnginxconf。ddefault。conf10listenonipv6bydefault。sh:info:EnabledlistenonIPv6inetcnginxconf。ddefault。confdockerentrypoint。sh:Launchingdockerentrypoint。d20envsubstontemplates。shdockerentrypoint。sh:Launchingdockerentrypoint。d30tuneworkerprocesses。shdockerentrypoint。sh:Creadyforstartup2022111609:13:46〔notice〕11:usingtheepolleventmethod2022111609:13:46〔notice〕11:nginx1。21。52022111609:13:46〔notice〕11:builtbygcc10。2。120210110(Debian10。2。16)2022111609:13:46〔notice〕11:OS:Linux3。10。01160。76。1。el7。x8664。。。。。。查看容器web01从2022年11月16日后的最新10条ahrefhttps:www。bs178。comrizhitargetblankclassinfotextkey日志a〔roottestadocker01〕dockerlogssince20221116tail10web01dockerentrypoint。sh:Launchingdockerentrypoint。d20envsubstontemplates。shdockerentrypoint。sh:Launchingdockerentrypoint。d30tuneworkerprocesses。shdockerentrypoint。sh:Creadyforstartup2022111609:22:06〔notice〕11:usingtheepolleventmethod2022111609:22:06〔notice〕11:nginx1。21。52022111609:22:06〔notice〕11:builtbygcc10。2。120210110(Debian10。2。16)2022111609:22:06〔notice〕11:OS:Linux3。10。01160。76。1。el7。x86642022111609:22:06〔notice〕11:getrlimit(RLIMITNOFILE):1048576:10485762022111609:22:06〔notice〕11:startworkerprocesses2022111609:22:06〔notice〕11:startworkerprocess24〔roottestadocker01〕 22、显示容器资源的使用情况,包括:CPU、内存、网络IO等。help可查看到更多的选项〔roottestadocker01〕dockerstatshelpUsage:dockerstats〔OPTIONS〕〔CONTAINER。。。〕Displayalivestreamofcontainer(s)resourceusagestatisticsOptions:a,allShowallcontainers(defaultshowsjustrunning)formatstringPrettyprintimagesusingaGotemplatenostreamDisablestreamingstatsandonlypullthefirstresultnotruncDonottruncateoutput〔roottestadocker01〕查看web01容器的运行信息〔roottestadocker01〕dockerstatsweb01CONTAINERIDNAMECPUMEMUSAGELIMITMEMNETIOBLOCKIOPIDSae5110bcb336web010。001。406MiB3。682GiB0。04850B192B0B0B2CONTAINERIDNAMECPUMEMUSAGELIMITMEMNETIOBLOCKIOPIDSae5110bcb336web010。001。406MiB3。682GiB0。04850B192B0B0B2CONTAINERIDNAMECPUMEMUSAGELIMITMEMNETIOBLOCKIOPIDSae5110bcb336web010。001。406MiB3。682GiB0。04850B192B0B0B2CONTAINERIDNAMECPUMEMUSAGELIMITMEMNETIOBLOCKIOPIDSae5110bcb336web010。001。406MiB3。682GiB0。04850B192B0B0B2CONTAINERIDNAMECPUMEMUSAGELIMITMEMNETIOBLOCKIOPIDSae5110bcb336web010。001。406MiB3。682GiB0。04850B192B0B0B2C〔roottestadocker01〕以json的格式输出〔roottestadocker01〕dockerstatsweb01nostreamformat{{json。}}{BlockIO:0B0B,CPUPerc:0。00,Container:web01,ID:ae5110bcb336,MemPerc:0。04,MemUsage:1。406MiB3。682GiB,Name:web01,NetIO:850B192B,PIDs:2}〔roottestadocker01〕 23、列出指定端口的映射〔roottestadocker01〕dockerportweb0180tcp0。0。0。0:808080tcp:::8080〔roottestadocker01〕 上篇分享到此结束,搭建私有镜像仓库和制作镜像下篇继续分享,期待关注。 喜欢的盆友们关注我们:https:mp。weixin。qq。comsYpuOwZvejO9Nke8ak5dtdw