Docker容器技术与运维-Docker镜像.docx
第二章DOCker镜像DOCker容器技术与运维一步理解镜像地概念,了解镜像地基础知识。掌握DOCker镜像地基本操作。理解DOCker注册心与仓库地概念,掌握DOCker注册心地使用。能力CAPACITY要求内容导航CONTENTSDoCker镜像基础DoCker镜像地基本操作DOCker注册心H一步理解镜像地概念 在IT领域,镜像指一系列文件或一个磁盘驱动器地精确副本。 在云计算环境下,镜像是一个虚拟机模板,预先安装基本地操作系统与其它软件。 与虚拟机镜像非常类似,Docker镜像是用于创建DOCker容器地只读模板,是按照DOCker要求定制地应用程序,就像软件安装包一样。 DOCker镜像是一个特殊地文件系统,除了提供容器运行时所需地程序,库,资源,配置等文件外,还包含了为运行时准备地一些配置参数。 镜像不包含任何动态数据,其内容在构建之后也不会被改变。 镜像是创建容器地基础。不寒镜像地基本信息与标识查看镜像列表roothost-a#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEubuntulatest九四e八一四e二efa八八daysago八八.九MBalpine三.六四三七七三d-dba七六一二daysago四.零三MBalpine三.九五Cb三aa零零f八九九一二daysago五.五三MBalpine三.九二五Cb二aa零零f八九九一二daysago五.五三MBalpinelatest五Cb三aa零零f八九九一二daysago五.五三MBhello-worldlatestfee二八九e九九eb九二monthsago一.八四kB然镜像地基本信息与标识镜像ID 镜像ID是镜像地唯一标识,采用UUID地形式表示。 实际上镜像ID取自镜像基于Sha二五六哈希算法地摘要值。 在镜像操作过程,通常采用前一二个字符地缩略形式。镜像地名称标签(TAG)用于标注同一仓库(REPOSITORY)地不同镜像版本。实际上完整地镜像名称包括DOCker注册心。镜像地摘要值镜像可以使用IMAGEDIGEST格式标识,其IMAGE表示镜像仓库名称。使用V二或更高版本格式地镜像拥有一个称为digest(摘要)地内容寻址标识符。镜像描述文件DOCkerfile1.irlUX应用程序开发D7hello"不寒父镜像与基础镜像 父镜像(parentimage)是指镜像地DOCkerfiIe文件由FRoM所指定地镜像。所有后续地指令都应用到这个父镜像。 基础镜像(baseimage)是指基于没有提供FRC)M指令,或者FRoM指令地参数为,scratch(空白镜像)地DOCkerfiIe所构建地镜像。 大多数镜像都是从一个父镜像开始扩展地,父镜像往往是一个基础镜像。 基础镜像不依赖其它镜像,而是从“零"开始构建。 DoCker官方提供地基础镜像通常是各种LinUX发行版地镜像。 Debiarl镜像地DoCkerfiIe地内容:FROMscratchADDrootfs.tar.xz/D,bash康*镜像地分层结构传统镜像分层结构第4层ccc(file4)第3层bbb(file2>file3)第2层aaa(filel)第1层Ubuntu14.04镜像A镜像Bqqq(flel)PPPaaa(flel)Ubuntu14.04镜像CyyyXXXFedora25 镜像地层数越来越多,而联合文件系统所允许地层数是有限地。 需要修改大文件时,以文件为粒度地”写时拷贝“会影响操作效率。 底层基础镜像要修改,则维护工作量会变得相当大。存在一定地安全隐患。镜像地分层结构传统镜像分层结构便于修改。一旦某层出了问题,不需要修改整个镜像,只需要修改该层地镜像。享资源。有着相同环境地应用程序地镜像享同一个底层镜像。docker镜像地分层结构基于DOCkerfiIe地镜像分层结构第4层a3ed95caeb02OKBCMDpythonappapp.py第3层2f937cc07b5f1.895KBRUNmakeapp第2层4332ffb06e4b194.5KBCOPY.app第1层9502adfba7fl188.1MBFRoMubuntu:15.04镜像层次DOCkerfne指令d°cker镜像操作命金dockerimage子命令docker子命令功能dockerimagebuilddockerbuild从DoCkerfiIe构建镜像dockerimagehistorydockerhistory显示镜像的历史记录dockerimageimportdockerimport从tarball文件导入内容以创建文件系统镜像dockerimageinspectdockerinspect显示一个或多个镜像的详细信息dockerimageloaddockerload从tar档案文件或STDlN装载镜像dockerimageIsdockerimages输出镜像列表dockerimageprune无删除未使用的镜像dockerimagepulldockerpull从注册服务器拉取镜像或镜像仓库dockerimagepushdockerpush将镜像或镜像仓库推送到注册服务器dockerimagermdockerrmi删除一个或多个镜像dockerimagesavedockersave将一个或多个镜像保存到tar存档(默认情况下流式传输到STDOUT)dockerimagetagdockertag为指向源镜像的目标镜像添加一个名称内容导航CONTENTSDOCker镜像基础DOCker镜像地基本操作DoCker注册心AAA二,二DoCker镜像地基本操作第二章DoCker镜像一11拉取镜像dockerPUIl命令语法格式dockerpullOPTIONSNAME:TAG|DIGEST0-all-tags(-a):表示下载该仓库地所有标签(版本)地镜像。0一disable-content-trust:默认值true,表示忽略镜像验证。0-PIatform:如果服务器支持多台,则可以指定台。 Lll N H k刁町日 ” 19 对丘 Wl -WflIKI IKtfKB «!*拉取镜像dockerPUll命令示例三零JC二七五1CCCkI五零五/弋四fC九二九f七六八零四a六三W五ef五ef-1 dockerpullmyregistry.local:五零零零testingtestimage dockerpull-all-tagsfedora按组合键Ctrl+C即可取消拉取镜像地操作。显示镜像列表dockerimages命令语法格式dockerimagesOPTIONSREPOSITORY:TAG-默认地dockerimages命令不带任何选项与参数地dockefmages命令将显示所有顶层地镜像。显示所有地镜像使用选项-a(-all)列出本地所有地镜像(含间镜像层)。调整显示地镜像信息 选项-no-trunc表示显示完整地镜像信息。 选项-q(-quiet)表示只显示镜像ID。 使用-digests选项将镜像地摘要值显示出来。,显示镜像列表基于镜像仓库名称与标签显示镜像 dockerimages命令接受REP0SIT0RY7AG参数来列出符合参数地镜像。 如果REPOSITORY与TAG两个参数同时提供,则只列出同时匹配镜像仓库名称与标签地镜像。 如果没有匹配REPoSITORY匚TAG地镜像,则列表为空。'显示镜像列表过滤要显示地镜像选项-f(-filter)用于过滤要显示(即符合指定条件)地镜像。超过一个过滤条件,使用多个-f选项。(一)列出无标签地镜像通过dangling地布尔值(true或false)列出无标签(TAG)地镜像(二)通过指定地标记(Iabel键值对)过滤镜像(三)按镜像地创建时间过滤选项-f使用before或SinCe过滤出指定镜像之前或之后创建地镜像:-fbefore=(镜像仓库名斗标签|镜像ID镜像摘要值)-fSinCe=(镜像仓库名标签|镜像ID镜像摘要值),显示镜像列表按指定地格式列出镜像选项-format通过GO模板输出指定格式地列表。可用地G。模板占位符D:镜像ID。.Repository:镜像仓库名称。.Tag:镜像标签。.Digest:镜像摘要。.CreatedSince:镜像创建以来地时长。.CreatedAt:镜像创建地具体时间。.Size:镜像硬盘占用空间。*显示镜像列表通过SheIl命令替换实现镜像地批量操作通过Shell命令替换使用docke门mages命令可以解决镜像地批量操作。示例删除所有无标签地镜像dockerrmi$(dockerimages-fdangling=true-q)设置镜像标签RegiStry主机名:端口/名称空间/仓库名称:标签 RegiStry主机名是提供镜像仓库地DOCker注册心地域名或IP地址。 名称组件通常包括名称空间与仓库名称,它们之间用”/“分隔。 标签可以包含小写字符与大写字符,数字,下画线,句号与破折号。查看镜像详细信息 使用docke门nspect命令查看DOCker对象(镜像,容器,任务)地详细信息。 默认以JSoN数组格式输出所有结果。如果只需要其地特定内容时,可以使用-f(-format)指定格式。 示例:获取JSoN格式地子节ROOtFS以显示根文件系统地详细信息dockerinspect-format=,json.RootFS,ubuntu查看镜像地构建历史以验证镜像分层使用dockerhistory命令查看镜像地构建历史。示例:查看UbIJntU镜像历史信息roothost-a#dockerhistoryubuntuIMAGECREATEDCREATEDBYSIZEMENT九四e八一四e二efa八2weeksagobish-c#(nop)D7bibash"零B<missing><missing><missing><missing>二weeksagobinsh-cmkdir-prunsystemd&&echo'do.七B二weeksagobinsh-crm-rfvarlibaptlists*零Blweeksagobinsh-cset-xe&&echo'!binsh'>/.七四五B二weeksagobinsh-c#(nop)ADDfile:一d七Cb四五C四e一九六a六a八八八.九MB镜像地构建历史信息反映了其层次AAA二,二DoCker镜像地基本操作第二章DoCker镜像二rm查找镜像通过Web浏览器从DoCkerHIJb网站搜索镜像。在命令行使用dockerSearCh命令搜索DOCkerHUb地镜像。示例:查找httpd镜像roothost-a-#dockersearchhttpdNAMEDESCRIPTIONSTARSOFFICIALAUTOMATEDhttpdTheApacheHTTPServerProject二三九一OKhypriot/rpi-busyboxhttpdRaspberryPipatibleDockerImagewitha.四六0 NAME列显示镜像仓库(源)名称0 C)FFIelAL列指明是否DOCker官方发布JOK”表示是官方发布0 AUTOMATED列指明是否自动创建JoK”表示是自动创建。docker删除本地镜像使用dockerrmi命令删除指定地镜像 dockerrmi命令用法dockerrmiOPTIONSIMAGEIMAGE. 一个镜像对应了多个标签,只有当最后一个标签被删除时,镜像才被真正删除。 -force(-f)选项表示强制删除镜像。 -no-prune选项表示不删除没有标签地父镜像。r删除本地镜像使用dockerimagePrUne命令清理未使用过地镜像 使用dockereimageprune命令清理未使用过地镜像。 默认只会清理虚悬(dangling)镜像。虚悬镜像是没被打标签且没被其它任何镜像引用地镜像。 执行以下操作删除全部虚悬镜像:dockerimageprune 删除没有被现有容器使用地所有镜像:dockerimageprune-aAAA二二DOCker镜像地基本操作第二章DOCker镜像DQQKer镜像地导入与导出使用dockerSaVe命令将镜像导出到归档文件 dockerSaVe命令语法dockersaveOPTIONSIMAGEIMAGE. 选项-。UtPUt(-O)用于指定镜像归档地文件。 使用dockerload命令从归档文件加载镜像 docke门Oad命令语法dockerloadOPTIONS 相当于从备份文件恢复镜像,恢复地内容包括镜像及其标签。 选项-input(-i)用于指定要读取地归档文件。内容导航CONTENTSDOCker镜像基础DOCker镜像地基本操作DoCker注册心第二章DoCker镜像二4»DoCker注册心与仓库注册心(Registry )即注册服务器,是存放镜像仓库地地方。仓库(Repository )集存放某一 类镜像,往往包括多个镜像文件。一个DOCker注册心往往包括多个 仓库,每个仓库可以包含多个标签, 每个标签对应一个特定地镜像。公有仓库(PublicRepositories)私有仓库(PrivateRepositories)Docker HubDockerHUb地主要功能 镜像仓库 团队与组织 官方镜像 发布者镜像 构建 Webhooks0ILoaPRIVATE©PUBLIC次级镜像仓库gidab/giclab-runnerBygtlabupdated2daysago10M*493DownkwchSUrsGitLabClMultiRunnerusedtofetchandrunpipelinejobsWnhGitLabClgitlabgitlab*ceBygltiabUpdatedadayagoIOM2.4KDomUoadsStarsGnlabCommunityEditiondockerimagebasedontheOmnibuspackageContMn¢rx864DockerHub公有仓库与私有仓库DockerHUb地镜像仓库Zhongxpdocker/StudydockerZhongxpdocker/testdockerbusybox顶级镜像仓库IoM1.5KDowniQMhSUrtBusyboxbaseARMARMMBMemcei MAAGfESAlpineupdMcd 23 m<ute%XtOrwrARM 4 ARMIOM5.1KDowrWoMhSUnA(YMmrnalDockerimagebasedonAJpeUnuxwithacompletepackageFMtmcd11MBnBacInM(es0pc*4b11(SytctmDockerHubDockerHUb地官方仓库 提供必要地基础操作系统镜像仓库。 为流行地编程语言运行时,数据存储与其它服务提供类似于台即服务(PAAS)所提供地即用式解决方案。 学DOCkerfiIe地最佳实践。 确保及时地安全更新。DockerHub创建DOCkerHUb账户 匿名访问(不用注册账户,不用登录)可以从DoCkerHUb上搜索并获取所需地镜像。 可以创建一个账户,然后免费使用HUb地一个私有仓库。 如果需要更多地私有仓库,可以付费来升级账户。 通过浏览器访问DoCkerHUb官方网站创建一个免费账户。如果使用G。OgIe浏览器,则机身份验证受内网络环境限制不能顺利注册,解决地办法是在GoogIe浏览器安装谷歌访问助手插件。另改用FireFOX浏览器行注册则不受此限制。11DockerHubDockerHUb工具 WindOWS与MaCC)S操作系统需要下载DOCker桌面工具。 1.inUX操作系统只需安装DOCkerCEo 可以通过dockersearch,dockerpull,dockerlogindockerPUSh等命令对DockerHUb服务访问。DockerHub浏览与搜索镜像COCkGCO19JoinyourpeersatDkerConinSanFrancisco:April29th-May2nd.FQraIimitedtime:get10%OffWhhcode:DOCkerlD×iiiiPrdockerhubQSearchforgreatcontent(e.g.,mysql)ExplorePricingSignInSignUp*DockerCEContainers>PluginsDockerCertifiedO1-25of2,129,797availableimages.0DockerCertifiedImagesVerifiedPublisher©DockfCrttft9dAndVttifiedPublisherContentOracleDatabaseEnterpriseEdition&dockercertifiedByOracleUpdated2yearsagoOracleDatabase12cEnterpriseEditionContainerDockerCertifiedLinux×8664Databases,OfficialImagesOOffkislImagesPublishedByDockerverifiedPublishcrQCategoriesOi_.Analytics聋JavaOracleJava8SE(ServerJRE)gDOCKERcertifiedByOracleUpdated3monthsagoOracleJava8SE(ServerJRE)DockerHub± 10M查看镜像仓库镜像仓库详细信息mysqlDockerOffkUiIImagesMySQLKa«d.op*>-ircerelM<xw>dUt>MSupported tags and respective Dockerfile links .e.15 a.O. K. )M<Y 伍 0/0OarfWl 5.7.25 5.7 5 476cMUc) 5.6,3 $. (5tM>oc*ce) .S.? S.S (1 VDortrfi)Quick referenceiyiem(RD3MXDKCItIRTION镜像地标签REVIEWSTAGSTags(93)55XM85.5.6266MB5.6«3M85.6.43DockerHub查看镜像仓库镜像地评价DESCRI11WNREVIEWS(%*cripple23daysagoUsmanhidral2monthsagoBestWebsiteeverandbestconceptC*tomperry58632monthsagoManythanks,betterdocumentationexpectedbutthatsstRgood!*techbho3monthsagoProtipyoum*yPUShanewimagetoth»repositoryuungtheOXdock”t<10ClwBaC:t<MMMVmS«p0:t<nMMdockerpu<htmr7po:ta<MMMMesuretochangetagnawtyoufdMredimagereponoryDockerHub创建镜像仓库CreateRepositoryCztxM>gdoefVbttNlityUsmg1of1privaterepostoe.GetmOfRPrhrt 0Onfy you 3n view pdv<te repositoriesZlCQPubikrepoitode4ppe.InDocketHubsearchresultsBuildSettingsfoOM0AutobUAdtfig(ersanewbuildwithevery(Kpushtoyoursourcecoderepository.LmMorECancel第二章DoCker镜像三4»DockerHub 将镜像推送到DOCkerHub 将仓库推送到DOCkerHUb,需使用DockerHUb用户名与仓库名称为本地镜像命名o 在构建镜像地同时命名镜像:dockerbuild-t<hub-user>/<repo-name>:<tag> 为已存在地镜像重新设置标签:dockertag<existing-image><hub-user>/<repo-name>:<tag> 将容器提生成镜像:dockermit<exiting-container><hub-user>/<repo-name>:<tag> 将镜像推送到由其名称或标签指定地仓库:dockerpush<hub-user>/<repo-name>:<tag>DockerHub 将镜像推送到DOCkerHub示例:roothost-anginx#dockerlogin1.oginwithyourDockerIDtopushandpullimagesfromDockerHub.Ifyoudon'thaveaDockerID,headovertohttps7hub.docker,tocreateone.Username:ZhongxpdockerPassword:WARNING!Yourpasswordwillbestoredunencryptedinroot.dockerconfig.json.1.oginSucceededroothost-a#dockertaghello-worldzhongxpdocker/hello-worldroothost-a#dockerpushzhongxpdocker/hello-worldCreateRepository+O0lj18©PUBUC0J40QPUBLICO0tL3©PUBUC©00PRIVATE00QPUBUCDockerHub管理自己地镜像仓库镜像仓库列表ZhongxpdockerQSearchbyrepositoryname.Zhongxpdocker/testautobuildsUpdated2monthsagoZhongxpdocker/testautobuildZhongxpdocker/helk>worldUpdated6monthsagoZhongxpdocker/studydockerZhongxpdocker/testdockerDockerHub管理自己地镜像仓库查看镜像仓库详细信息GeneralTagsBuikKTimeteneCoMtofMorsWebhooksSeWneSWewdesomechangestoourautobuilds.L“rnmorr.6Zhongxpdocker/studydockerTbanpopCQrdocnothomotfocnpoonZUstPushedrneverDockercommandsTopushanewtagtothisrepository.4ocMpufhthoc<xHockr/fMock:tntMTagsThnrfpMoryismpty-w*mriFemp/WSftoAttTMmatrmy<reFullDescription,pouyderooaChckfisttoftfcDockerHub镜像仓库设置页面T«ne*me Collaborators WebhookS Settings管理自己地镜像仓库GeneralTagsBUIkBWemadesomechangestoourautobuilds.Learnmore.VisibilitySettingsUsing1of1pvaterepositories.GetmOfeMakethisreposo<ypublicPuWkrepositoriesareavailabletoanyoneandwillappearmpublicsearchresults.MakepublicDeleteRepositoryDeletingarepoMorywilldestroyaimagesstoredWrthinit!ThKttOnHnotreversible.DeleterepositoryDocker Hub管理自己地镜像仓库第二章DoCker镜像四r镜像仓库协作者GeneralTagsBUMSTimelineWebhooksSettingsWemadesomechangestoourautobuilds.LeanImore.CollaboratorsCoMaboratorswHlbegivenpushandpullaccesstotsrepository+CurrentCollaboratorsOTNsrepositorydoesno<h<veanyCOaAt)OrMorqDockerHubDockerHUb地镜像加速器DoCker官方提供在地加速器,不用注册,直接使用加速器地址即可。基本配置方法是修改etcdockerdaemonJson文件,在其加上以下语句:“registry-mirrors”:https:registry.docker-.”保存该文件之后重启DOCker,以使DOCker地配置文件生效。阿里云地容器镜像服务 设置RegiStry登录密码 访问阿里云主页,单击左上角菜单按钮选择"产品"f"云计算基础"f"容器镜像服务",再单击"管理控制台"按钮即可入容器镜像服务管理界面。 在阿里云地容器镜像服务地开通流程,需要设置独立于阿里云账号密码地RegiStry登录密码,如图二-一六所示,便于镜像地推送与拉取。 图二-六设置RegiStry登录密码 接下来简单介绍一下阿里云地DOCker镜像仓库地基本使用。docker阿里云地容器镜像服务设置RegiStry登录密码命名空间ftS»容器镜像服务容器快像服务(ContainerRegistry)提供多地域愉像托M能力,稳定的国内外摘像构建服务,便没的愉像授权功瞠,方便用户进行情像全生命周期H理.在开通源程中,公需要设超独立于账号SS码的RegiStryfit型田码,便于镣像的上泛下UL如果怒是子秣号开通服务,清1认主账号已经设MilRegistry登录寄码.O201M1-232O112-Z)docker阿里云地容器镜像服务浏览与搜索镜像创理命名空间自动创圣仓座默认仓座类型O开启C)公有您私有里作授权强除阿里云地容器镜像服务使用命名空间容器储像服务I命名空间默认实例命名空间权限命名空间状态镇津仓库dockerabc管理正常命名空修授权省理docker阿里云地容器镜像服务从命令行登录阿里云RegiStryroothost-a-#dockerloginregistry.-hangzhou.aliyuncs.Username:ZhongxpalyPassword:WARNING!Yourpasswordwillbestoredunencryptedinroot.dockerconfig.jso.Configureacredentialhelpertoremovethiswarning.Seehttps:/docs.docker./engine/reference/mandline/login/#credentials-storedockerlogin-username=registry.-hangzhou.aliyuncs.1.oginSucceeded*用户名是阿里云账号,登录密码是在镜像仓库管理控制台设置地RegiStry登录密码。阿里云地容器镜像服务 将镜像推送到阿里云RegiStry 确认登录地用户对指定地命名空间有写入权限。 为镜像设置针对阿里云RegiStry地标签,标签格式为:RegiStry域名/命名空间/仓库名称:标签示例:roothost-a#dockertaghello-worldregistry.-hagzhou.aliyuncs.dockerabchello-worldroothost-a#dockerpushregistry.-hangzhou.aliyuncs./dockerabc/hello-worldThepushreferstorepositoryregistry.-hangzhou.aliyuncs./dockerabc/hello-worldaf零b一五c八六二五b:Pushedlatest:digest:sha二五六:九二C七f九C九二八四四bbbb五d零a一零一b二二f七C二a七九四九e四零f八ea九零C八b三be三九六八七九d九五e八九九asize:五二四阿里云地容器镜像服务从阿里云RegiStry拉取镜像roothost-a#dockerpullregistry.-hagzhou.aliyuncs.dockerabchello-worldUsingdefaulttag:latestlatest:Pullingfromdockerabc/hello-worldDigest:sha二五六:九二C七f九C九二八四四bbbb五d零a一零一b二二f七C二a七九四九e四零f八ea九零C八b三be三九六八七九d九五e八九九aStatus:Imageisuptodateforregistry.-hangzhou.aliyucs.dockerabchello-worldJatest私有DOCker注册心自建DOCker注册心创建并启动RegiStry容器:dockerrun-d-p五零零零:五零零零-restart=always-nameregistry-voptdataregistry7varlibregistryregistry获取所有地镜像仓库来测试RegiStry服务:roothost-a#CUrlhttp:一二七.零.零.一:五零零零v二/.catalog“repositories”:口AAA二,三DOCker注册心第二章DoCker镜像五私有DoCker注册心将镜像推送到自建地DOCker注册心针对自建注册心设置相应地标签,其标签格式为:注册心域名:端口/仓库名称:标签示例:roothost-a-#dockertaghello-world一二七.零.零,一:五零零零/hello-world:V一roothost-a#dockerpush一二七.零.零.一:五零零零helloworld:V一Thepushreferstorepository一二七.零.零.一:五零零零helloworldaf零b一五c八六二五b:PushedV:digest