发布时间:2026-07-21阅读(0)
承接上篇的Docker简介,实际上,镜像(image)其实就是容器(container)的模板,容器都是通过镜像创建的,所以镜像中包含启动容器所需要的所有文件系统结构和内容简单来讲,镜像是一个特殊的文件系统,它提供了容器运行时所需的程序、软件库、资源、配置等静态数据即镜像是只读的,其不包含任何动态数据,镜像在被构建后,其内容也不会再被改变,接下来我们就来聊聊关于docker 基础镜像比较?以下内容大家不妨参考一二希望能帮到您!

docker 基础镜像比较
承接上篇的Docker简介,实际上,镜像(image)其实就是容器(container)的模板,容器都是通过镜像创建的,所以镜像中包含启动容器所需要的所有文件系统结构和内容。简单来讲,镜像是一个特殊的文件系统,它提供了容器运行时所需的程序、软件库、资源、配置等静态数据。即镜像是只读的,其不包含任何动态数据,镜像在被构建后,其内容也不会再被改变。
关于docker镜像的操作常用的主要包括:拉取、查询、重命名、删除、构建,下面我们将对这些操作逐一进行讲解。
(1)拉取镜像
docker拉取镜像的方法格式如下:
docker pull [Registry]/[Repository]/[Image]:[Tag]
例如,我们需要获取一个 busybox 镜像,可以执行以下命令:
$ docker pull busyboxUsing default tag: latestlatest: Pulling from library/busybox61c5ed1cbdf8: Pull complete8lacjeddcbf59: Pull completeDigest: sha256:4f47c01fa91355af2865ac10fef5bf6ec9c7f42ad2321377c21e844427972977Status: Downloaded newer image for busybox:latestdocker.io/library/busybox:latest
这里我们可以注意到几个问题:首先就是我们pull直接使用的是 【docker pull Image】这样的格式,没有添加Registry、Repository和Tag。那么也就是说本次拉取我们是从默认服务器【http://docker.io】和默认仓库【library】拉取的。而且,在没有指定tag标签的情况下会默认使用latest【Using default tag: latest】
*注意,特别不建议在生产环境使用默认的 latest 镜像标签,因为获取这样的镜像会跟踪随着最新版本的变化而变化,比如今天刚刚拉取的镜像版本是1.0的,突然版本更新到2.0 了,此时服务器上的该镜像也会自动更新为2.0,然而在生产环境中稳定低错误才是关键,所以不推荐使用默认标签 latest
其次我们可以看到镜像是“多层存储结构“,所以下载其实是一层层下载而并不是单一的文件。在下载过程中,每一层都会有一个12位的索引 ID 做标识,形如【61c5ed1cbdf8:Pull complete】。下载完成后,最终会有一个 sha256 的识别号 Digest 俗称摘要来确保下载的一致性。
(2)查看镜像
Docker 镜像查看使用docker images或者docker image ls命令。
使用docker images命令列出本地所有的镜像。
$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 4bb46517cac3 9 days ago 133MBnginx 1.15 53f3fd8007f7 15 months ago 109MBbusybox latest 018c9d7b792b 3 weeks ago 1.22MB
如果我们想要查询指定的镜像,可以使用docker image ls命令来查询。
$ docker image ls busyboxREPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 018c9d7b792b 3 weeks ago 1.22MB
当然你也可以使用docker images命令列出所有镜像,然后使用grep命令进行过滤:
$ docker images |grep busyboxbusybox latest 018c9d7b792b 3 weeks ago 1.22MB
在上面拉取镜像时我们提到过,我们拉取镜像时没有指定服务器和仓库。所以我们注意到我们的镜像名就是简单的【busybox】。而如果我们拉取的时候指定了服务器和仓库的话,那么我们通过【docker images】看到的结果就不一样了:
$ docker pull registry.hepantec.com/private_repo/busybox:1.2.2
$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 4bb46517cac3 9 days ago 133MBnginx 1.15 53f3fd8007f7 15 months ago 109MBregistry.hepantec.com/private_repo/busybox 1.2.2 018c9d7b792b 3 weeks ago 1.22MB
(3)镜像重命名
有时候会因为任务需要特定的镜像做统一管理,就可以用 docker tag 命令为本地任意镜像添加新的标签,即所谓的镜像重命名。
$ docker tag busybox:latest mybusybox:latest
所以镜像重命名可以实现:自定义镜像名称或者推送镜像到其他镜像仓库。docker tag的命令格式为【docker tag SOURCE_IMAGE TARGET_IMAGE】。值得注意的是打了新的TAG虽然会多了一条记录,但是从IMAGE ID 可以得知他们是同一个镜像。
执行完docker tag命令后,使用查询镜像命令查看镜像列表。可以看到,镜像列表中多了一个mybusybox的镜像。busybox和mybusybox这两个镜像的 IMAGE ID 是完全一样的。实际上它们指向了同一个镜像文件,只是别名不同而已。
docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 018c9d7b792b 3 weeks ago 1.22MBmybusybox latest 018c9d7b792b 3 weeks ago 1.22MB
而形如【registry.hepantec.com/private_repo/busybox】这样的image实际上也是可以通过打tag的方法然后直接推送到其他仓库的,示例如下:
$ docker tag registry.test.com/myrepo/busybox:1.2 registry.online.com/myrepo/busybox:1.0$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEregistry.test.com/myrepo/busybox:1.2 latest 018c9d7b792b 3 weeks ago 1.22MBregistry.online.com/myrepo/busybox:1.0 latest 018c9d7b792b 3 weeks ago 1.22MB$ docker push registry.online.com/myrepo/busybox:1.0
我们可以使用docker rmi或者docker image rm命令删除镜像。
例:删除mybusybox镜像
$ docker rmi mybusybox$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEbusybox latest 018c9d7b792b 3 weeks ago 1.22MB
此处需要注意的是,如果这个image已经构建了容器,会删除失败。此时需要先将容器移除镜像才能删除成功。关于容器的具体使用方法将在下一篇文章中详解。
(5)构建镜像构建镜像主要有两种方式:
Docker commit命令
首先介绍下如何从运行中的容器提交为镜像。我依旧使用 busybox 镜像举例,使用以下命令创建一个名为 busybox 的容器并进入 busybox 容器。
# 创建容器$ docker run -itd busybox# 通过docker ps可以看到刚刚创建的容器,然后进入容器$ docker exec -it 容器id /binn/bash
执行完上面的命令后,当前窗口会启动一个 busybox 容器并且进入容器中。在容器中,执行以下命令创建一个文件并写入内容:
touch hello.txt && echo "I love Docker. " > hello.txt
此时在容器的根目录下,已经创建了一个 hello.txt 文件,并写入了 "I love Docker. "。下面,我们新打开另一个命令行窗口,运行以下命令提交镜像:
$ docker commit busybox busybox:hellosha256:cbc6406aaef080d1dd3087d4ea1e6c6c9915ee0ee0f5dd9e0a90b03e2215e81c
然后使用上面讲到的docker image ls命令查看镜像:
$ docker image ls busyboxREPOSITORY TAG IMAGE ID CREATED SIZEbusybox hello cbc6406aaef0l 2 minutes ago 1.22MBbusybox latest 018c9d7b792b 4 weeks ago 1.22MB
此时我们可以看到主机上新生成了 busybox:hello 这个镜像。
Docker build命令
最常用的镜像构建方式:Dockerfile。Dockerfile 是一个包含了用户所有构建命令的文本。通过docker build命令可以从 Dockerfile 生成镜像。
使用 Dockerfile 构建镜像具有以下特性:
先学习下 Dockerfile 常用的指令。
Dockerfile 指令 指令简介
先分析下如下Dockerfile文件中的含义:
FROM centos:7COPY nginx.repo /etc/yum.repos.d/nginx.repoRUN yum install -y nginxEXPOSE 80ENV HOST=mynginxCMD ["nginx","-g","daemon off;"]
上面这个 Dockerfile 的例子基本涵盖了常用的镜像构建指令。目录中配置好Dockerfile之后,就可以进行镜像构建了。命令形如:
$ docker build -t IMAGE_NAME ./image_dir
上面命令就是基于image_dir目录进行镜像构建的方法,Dockerfile文件就在image_dir这个目录中,如果不在就会构建失败。
限于篇幅原因关于docker镜像的探讨本篇就先到这里,后续将继续更新,敬请期待……
Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图