Docker镜像 镜像仓库(Repository)用于存放镜像,每个仓库都有唯一的地址,和网址类似。镜像仓库托管在某个Registry,Registry和GitHub类似。Docker提供了一个官方的Registry,官方Registry里的镜像仓库地址可以省去前面的域名前缀,其它Registry里的镜像仓库地址必须要指定域名前缀,以保证唯一性。 镜像仓库地址后面可以跟一个TAG。比如一个镜像名称ubuntu:14。04,冒号前面的ubuntu是镜像仓库地址(由于是官方Registry里的,可以省略域名前缀),后面的14。04是TAG,TAG通常设置为镜像的版本号。 Docker镜像是分层存储的,每一个镜像都由多层组成。镜像之间会共享一些相同的层,从而减小镜像占用的存储空间。查看docker镜像〔rootVM017centos〕dockerimagelsREPOSITORYTAGIMAGEIDCREATEDSIZEflaskapp0。11aa01015fcfd3daysago188MBpython3。7slim84de2ffd919d10daysago179MBweblatest15f1f39a08482weeksago76。2MB 也可以查看指定的镜像:〔rootVM017centos〕dockerimagelsubuntuREPOSITORYTAGIMAGEIDCREATEDSIZEubuntulatestccc6e87d482b7weeksago64。2MBubuntu14。046e4f1fe62ff12monthsago197MB 查看镜像的详细信息〔rootVM017centos〕dockerimageinspectubuntu〔{Id:sha256:ccc6e87d482b79dd1645affd958479139486e47191dfe7a997c862d89cd8b4c0,RepoTags:〔ubuntu:latest〕。。。。。。从仓库中拉取镜像dockerpull〔OPTIONS〕NAME〔:TAGDIGEST〕 比较常用的配置参数为a,代表下载仓库中所有TAG的镜像,默认只下载latestTAG的镜像。 如果要下载ubuntu:14。04镜像,可使用如下命令:〔rootVM017centosdocker〕dockerimagepullubuntu:14。0414。04:Pullingfromlibraryubuntu2e6e20c8e2e6:Pullcomplete30bb187ac3fc:Pullcompleteb7a5bcc4a58a:PullcompleteDigest:sha256:ffc76f71dd8be8c9e222d420dc96901a07b61616689a44c7b3ef6a10b7213de4Status:Downloadednewerimageforubuntu:14。04docker。iolibraryubuntu:14。04〔rootVM017centosdocker〕dockerimagelsubuntuREPOSITORYTAGIMAGEIDCREATEDSIZEubuntu14。046e4f1fe62ff12monthsago197MB构建镜像commit 对于我们pull的新镜像ubuntu:14。04来说,如果我们需要对其进行更新,可以创建一个容器,在容器中进行修改,然后将修改提交到一个新的镜像中。 提交修改使用如下命令:dockercontainercommit〔OPTIONS〕CONTAINER〔REPOSITORY〔:TAG〕〕 该命令从一个修改过的容器创建一个新的镜像。例如,我们运行一个容器,然后在其中创建一个文件,最后使用commit命令:〔rootVM017centosimage〕dockercontainerrunitnamehellodocker2busyboxbinshtouchtest1test2〔rootVM017centosimage〕dockercontainercommithellodocker2busybox:testsha256:1e30e8ed656966581812d4d23b5196edcc45d38affc20454cafa46d41f45a0e0〔rootVM017centosimage〕dockerimagelsbusyboxREPOSITORYTAGIMAGEIDCREATEDSIZEbusyboxtest1e30e8ed656910secondsago1。22MBbusyboxlatest6d5fcfe5ff172monthsago1。22MB 通过上述操作我们创建了一个新的镜像,但是本方法不推荐在生产环境使用,因为这种方式的可维护性很差。推荐的创建镜像的方法是使用Dockerfile,修改镜像可通过修改Dockerfile,然后使用新的Dockerfile来构建新的镜像。build docker可以从一个Dockerfile文件中读取指令来构建镜像。Dockerfile是一个包含用户构建镜像所需命令的文本文件。在创建好该文件后,我们可以使用如下命令来构建镜像:dockerimagebuild〔OPTIONS〕PATHURL 构建镜像的第一件事是将Dockerfile文件所在目录下的所有内容发送给Docker守护进程。所以最好创建一个新的目录,在其中保存Dockerfile,并在其中添加构建镜像所需的其它文件。 对于一个Dockerfile文件内容来说,基本语法格式如下所示:CommentINSTRUCTIONarguments 使用号作为注释,指令(INSTRUCTION)不区分大小写,但是为了可读性,一般将其大写。Dockerfile中的指令一般包含下面几个部分:基础镜像:以哪个镜像为基础进行制作,使用FROM指令来指定基础镜像,一个Dockerfile必须以FROM指令启动。维护者信息:可以指定该Dockerfile编写人的姓名及邮箱,使用MAINTAINER指令。镜像操作命令:对基础镜像进行修改的命令,比如安装新的软件,进行配置等,常见的是RUN命令。容器启动命令:基于该镜像的容器启动时需要执行的命令,常见的是CMD命令或ENTRYPOINT 下面是一个最基本的Dockerfile:指定基础镜像FROMubuntu:14。04维护者信息MAINTAINERhellodockerhellodockersoundhearer。com镜像操作命令RUNaptgetyqqupdateaptgetinstallyqqapache2容器启动命令CMD〔usrsbinapache2ctl,D,FOREGROUND〕 通过阅读上述内容中我们熟悉的一些linux指令,可以很容易的知道该Dockerfile将创建一个apache镜像。 其中FROM指定基础镜像。RUN命令默认使用binsh,并使用root权限执行。CMD命令也是默认在binsh中执行,但是只能有一条CMD指令,如果有多条则只有最后一条会被执行。 下面我们创建一个空目录,在其中编辑Dockerfile文件,然后基于此文件构建一个新的镜像:首先创建目录并切换目录mkdirhomehellodockertest1cdhomehellodockertest1编辑Dockerfile文件,默认文件名为Dockerfile,也可以使用其它值,使用其它值需要在构建时通过f参数指定,这里我们使用默认值。并在其中添加上述示例的内容vimDockerfile使用build命令,t参数指定新的镜像dockerimagebuildthellodocker:2。0。 在构建完成后,我们可以使用该镜像启动一个容器来运行apache服务,运行如下命令:使用p参数将本机的8000端口映射到容器中的80端口上。dockercontainerrundp8000:80namehellodocker3hellodocker:2。0 此时,容器启动成功后,并且配置了端口映射,我们就可以通过本机的8000端口访问容器hellodocker3中的apache服务了。我们打开浏览器,输入localhost:8000删除 删除ubuntu:latest镜像可以使用如下命令:删除镜像dockerimagermubuntu 删除所有的镜像dockerrmi(dockerimagesq)