当前位置: 首页 > Linux

Docker入门基础镜像使用

时间:2023-04-06 04:46:19 Linux

在运行容器时,如果使用的镜像本地不存在,docker会自动从docker镜像仓库下载。默认是从DockerHub公共镜像源下载。让我们学习一下:1.管理和使用本地Docker主机镜像2.创建镜像和列出镜像我们可以使用dockerimages来列出主机上存在的镜像。root@ubuntu:?#dockerimagesrepository标签图像创建大小Alpine最新055936D392053周前5.53MBmysql5.77faa3c53e6d63周前373MBUBUNTU15.04D1B55FD076003年3年以前131MMBUBUNTOINDORIE镜像仓库源TAG:镜像标签IMAGEID:MirroredIDCREATED:镜像创建时间SIZE:镜像大小同一个仓库源可以有多个TAG,代表这个仓库源的不同版本,比如ubuntu仓库源,有16.04,15.04为多个不同的版本,我们使用REPOSITORY:TAG来定义不同的镜像。启动对应镜像的容器如果我们想使用16.04版本的ubuntu系统镜像来运行容器,命令如下:root@ubuntu:~#dockerrun-itubuntu:16.04sh如果我们想使用15.04版本的ubuntu系统镜像,命令如下:root@ubuntu:~#dockerrun-itubuntu:15.04sh各参数解析:docker:Docker二进制执行文件。run:结合前面的docker运行一个容器。-it:实际上由两个参数组成,-i和-t,-i:允许你与容器中的标准输入(STDIN)进行交互。-t:指定新容器内的伪终端或终端。ubuntu:15.04指定要运行的图像。Docker首先检查镜像是否存在于本地主机上。如果不存在,Docker会从镜像仓库DockerHub中下载公共镜像。sh:执行命令。获取新镜像当我们在主机上使用一个不存在的镜像时,Docker会自动下载该镜像。如果我们要预先下载这个镜像,我们可以使用dockerpull命令来下载。root@ubuntu:~#dockerpullubuntu:18.0418.04:Pullingfromlibrary/ubuntu6abc03819f3e:Pullcomplete05731e63f211:Pullcomplete0bd67c50d6be:PullcompleteDigest:sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5Status:Downloadednewerimageforubuntu:18.04下载完成后,我们可以直接使用这个镜像来运行容器。查找镜像我们可以从DockerHub网站上搜索镜像,DockerHubURL为:https://hub.docker.com/我们也可以使用dockersearch命令来搜索镜像。例如,我们需要一个httpd图像作为我们的网络服务。我们可以通过dockersearch命令搜索httpd,找到适合我们的镜像。NAME:镜像仓库源名称DESCRIPTION:镜像的描述OFFICIAL:docker正式发布拉取httpd镜像了吗?我们决定使用上图中httpd正式版的镜像,使用命令dockerpull下载镜像。root@ubuntu:~#dockerpullhttpdUsingdefaulttag:latestlatest:Pullingfromlibrary/httpd743f2d6c1f65:Alreadyexistsc92eb69846a6:Pullcomplete2211b052800a:Pullcompleteaed180197314:Pullcomplete7c472a4980a7:PullcompleteDigest:sha256:a35ad614c1ffc6fe931f12dc42b682edbdcc62cf78d8edc41499dd90ef0f8003Status:Downloadednewer下载httpd:latest镜像后,我们可以使用这个镜像。创建镜像当我们从docker镜像仓库下载的镜像不能满足我们的需求时,我们可以通过以下两种方式更改镜像。1.从已经创建好的容器中更新镜像,并提交这个镜像2.使用Dockerfile命令创建一个新的镜像更新镜像在更新镜像之前,我们需要使用镜像创建一个容器。root@ubuntu:~#dockerrun-itubuntu:16.04sh在运行的容器内使用apt-getupdate命令进行更新。#apt-getupdateGet:1http://archive.ubuntu.com/ubuntuxenialInRelease[247kB]Get:2http://security.ubuntu.com/ubuntuxenial-securityInRelease[109kB]Get:3http://archive.ubuntu.com/ubuntuxenial-updatesInRelease[109kB]获取:4http://archive.ubuntu.com/ubuntuxenial-backportsInRelease[107kB]获取:5http://archive.ubuntu.com/ubuntuxenial/mainamd64包[1558kB]获取:6http://security.ubuntu.com/ubuntuxenial-security/mainamd64包[844kB]获取:7http://archive.ubuntu。com/ubuntuxenial/restrictedamd64包[14.1kB]获取:8http://archive.ubuntu.com/ubuntuxenial/universeamd64包[9827kB]获取:9http://archive.ubuntu.com/ubuntuxenial/multiverseamd64包[176kB]获取:10http://archive.ubuntu.com/ubuntuxenial-updates/mainamd64包[1237kB]获取:11http://security.ubuntu.com/ubuntuxenial-security/restrictedamd64包[12.7kB]获取:12http://security.ubuntu.com/ubuntuxenial-security/universeamd64软件包[556kB]获取:13http://archive.ubuntu.com/ubuntuxenial-updates/restrictedamd64软件包[13.1kB]获取:14http://archive.ubuntu.com/ubuntuxenial-updates/universeamd64软件包[967kB]获取:15http://archive.ubuntu.com/ubuntuxenial-updates/multiverseamd64软件包[19.1kB]获取:16http://archive.ubuntu.com/ubuntuxenial-backports/mainamd64包[7942B]获取:17http://archive.ubuntu.com/ubuntuxenial-backports/universeamd64包[8532B]获取:18http://security.ubuntu.com/ubuntuxenial-security/multiverseamd64Packages[6113B]Fetched15.8MBin8s(1933kB/s)Readingpackagelists...Done完成操作后,输入exit命令退出容器通过dockerps-a查看所有容器:root@ubuntu:~#dockerps-aCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES12847d9f5071ubuntu:16.04"sh"2minutesagoExited(0)43secondsagopeaceful_edison3cec6f5e47c0httpd"foreground"5minutesagoExited(0)5minutesagovigilant_heisenberg此时ID为12847d9f5071的容器是根据我们的需要改的容器。我们可以通过命令dockercommit提交容器的副本。root@ubuntu:~#dockercommit-m="hasupdate"-a="yeqing112"12847d9f5071yeqing112/ubuntu:v2sha256:5cce1167ee4c083ff9b87e61a58081805e76d015a12a4811bd152263aa01386m指定每个参数的描述:提交的镜像。12847d9f5071:容器ID。yeqing112/ubuntu:v2:指定要创建的目标镜像的名称。我们可以使用dockerimages命令查看我们的新镜像yeqing112/ubuntu:v2:root@ubuntu:~#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEyeqing112/ubuntuv25cce1167ee4c2minutesago144MBubuntu16.042a697363a890weeksago2从上面的信息中可以看到我们更新后的图片,文件大小明显比之前大了。建立镜像除了上面更新镜像的方法外,我们还可以使用命令dockerbuild从头开始建立一个新的镜像。为此,我们需要创建一个Dockerfile,其中包含一组指令来告诉Docker如何构建我们的镜像。root@ubuntu:~#catDockerfileFROMubuntu:16.04MAINTAINERFisher"service@urlos.com"RUNapt-getupdateEXPOSE22EXPOSE80CMD/bin/bash每个命令都会在镜像上创建一个新层,每个命令的前缀两者必须大写。第一个FROM指定要使用的镜像源。RUN命令告诉docker在镜像中执行命令。我们这里还是一样,执行一个apt-getupdate更新命令。然后,我们使用Dockerfile文件通过dockerbuild-tyeqing112/ubuntu:v3。命令构建新图像。root@ubuntu:~#root@ubuntu:/home#dockerbuild-tyeqing112/ubuntu:v3.SendingbuildcontexttoDockerdaemon422.4kBStep1/6:FROMubuntu:16.04--->2a697363a870Step2/6:MAINTAINERFisher"service@urlos.com"--->Runningin92229e7a091aRemovingintermediatecontainer92229e7a091a--->9a89f4debc7dStep3/6:RUNapt-getupdate--->Runningind709ef335784Get:1http://archive.ubuntu.com/ubuntuxenialInRelease[247kB]Get:2http://security.ubuntu.com/ubuntuxenial-securityInRelease[109kB]Get:3http://archive.ubuntu.com/ubuntuxenial-updatesInRelease[109kB]获取:4http://archive.ubuntu.com/ubuntuxenial-backportsInRelease[107kB]获取:5http://security.ubuntu.com/ubuntuxenial-security/mainamd64包[844kB]获取:6http://archive.ubuntu.com/ubuntuxenial/mainamd64包[1558kB]Get:7http://archive.ubuntu.com/ubuntuxenial/restrictedamd64包[14.1kB]Get:8http://archive.ubuntu.com/ubuntuxenial/universeamd64软件包[9827kB]Get:9http://security.ubuntu.com/ubuntuxenial-security/restrictedamd64软件包[12.7kB]Get:10http://security.ubuntu.com/ubuntuxenial-security/universeamd64包[556kB]Get:11http://archive.ubuntu.com/ubuntuxenial/multiverseamd64包[176kB]Get:12http://archive.ubuntu.com/ubuntuxenial-updates/mainamd64软件包[1237kB]Get:13http://archive.ubuntu.com/ubuntuxenial-updates/restrictedamd64软件包[13.1kB]Get:14http://archive.ubuntu.com/ubuntuxenial-updates/universeamd64软件包[967kB]Get:15http://archive.ubuntu.com/ubuntuxenial-updates/multiverseamd64软件包[19.1kB]Get:16http://archive.ubuntu.com/ubuntuxenial-backports/mainamd64包[7942B]Get:17http://archive.ubuntu.com/ubuntuxenial-backports/universeamd64包[8532B]Get:18http://security.ubuntu.com/ubuntuxenial-security/multiverseamd64包[6113B]在5秒内获取15.8MB(3051kB/s)阅读包列表。..Removingintermediatecontainerd709ef335784--->540751496556Step4/6:EXPOSE22--->Runningin9ae528bc083fRemovingintermediatecontainer9ae528bc083f--->cfccc621a52dStep5/6:EXPOSE80--->Runninginefd88e9efdmoving819eintermediate-->runninginefd88e9ef349c1中间容器->428CB5221A06STEP6/6:CMD/BIN/BASH--->在2BC08B6664F97RMOVINGINTEMIDIADECONTANEATE容器2BC08B664F97-------->9c555EA9B9EE8SUCCESSUNDENIDENED9C55AE9EED/tagnementightim当y.1cendy.12Dockerfile文件所在目录,可以指定Dockerfile的绝对路径。构建成功后,使用dockerimages查看镜像:root@ubuntu:~#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEyeqing112/ubuntuv39c55ea9b9ee89secondsago144MByeqing112/ubuntuv25cce1167ee4cute5cce1167ee4cute16.042a6970363a2周前119MB从以上信息可以看出,新镜像v3和v2的文件大小是一样的,两个镜像只是执行apt-getupdate设置镜像标签。我们可以使用dockertag命令来给镜像添加一个新的镜像。tagroot@ubuntu:/home#dockertag9c55ea9b9ee8yeqing112/ubuntu:v3-1dockertag镜像ID,这里是9c55ea9b9ee8,用户名,镜像源名(仓库名)和新标签名(tag)。使用dockerimages命令可以看到ID为9c55ea9b9ee8的镜像有一个v3-1标签。root@ubuntu:/home#dockerimagsRepository标签图像ID创建sizeYeqing112/ubuntuv39c55a9b9ee821分21分144mbyeqing112/ubuntuv3-19c5555a9B9EE8