一、知识要点
镜像基本操作
镜像实现原理
二、镜像操作
镜像的操作可分为:
拉取镜像:拉取远程仓库的镜像到本地
重命名镜像:使用docker tag 命令重命名镜像
查看镜像:使用docker image ls 或者 docker images命令查看本地已经存在的镜像
删除镜像:删除无用镜像
构建镜像:使用docker build命令基于Dockerfile构建镜像(推荐);使用docker commit命令基于已经运行的容器提交为镜像
三、拉取镜像
命令格式:
docker pull [Registry]/[Repository]/[Image]:[Tag]
参数说明:
Registry:为注册服务器,默认从docker.io拉取镜像,若有私有镜像仓库,可以把Registry替换为自己的注册服务器
Repository:镜像仓库,通常把一组相关联的镜像归为一个镜像仓库,library为默认镜像仓库
image : 镜像名称
tag : 镜像标签,若不指定,默认为latest
[root@localhost ~]# docker pull busybox Using default tag: latest latest: Pulling from library/busybox ea97eb0eb3ec: Pull complete Digest: sha256:bde48e1751173b709090c2539fdf12d6ba64e88ec7a4301591227ce925f3c678 Status: Downloaded newer image for busybox:latest docker.io/library/busybox:latest
busybox是一个集成了数百个linux命令(如curl、grep、mount、telnet)的精简工具箱
执行docker pull busybox命令,先从本地搜索,如果搜索不到busybox镜像则从Docker Hub下载镜像(atest: Pulling from library/busybox:从默认镜像仓库下载)
四、查看镜像
命令:docker images 或者 docker image ls
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 219ee5171f80 7 hours ago 1.23MB redis 5 f60d84d4d72c 4 months ago 98.3MB mysql 5.7 718a6da099d8 4 months ago 448MB hello-world latest bf756fb1ae65 11 months ago 13.3kB nginx 1.10 0346349a1a64 3 years ago 182MB [root@localhost ~]#
五、重命名镜像
命令格式:
docker tag [SOURCE_IMAGE][:TAG] [TARGET_IMAGE][:TAG]
[root@localhost ~]# docker tag busybox:latest busybox:tag [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 219ee5171f80 8 hours ago 1.23MB busybox tag 219ee5171f80 8 hours ago 1.23MB
TAG:多了一个tag,IMAGE ID是完全一样的,实际上它们指向了同一个镜像文件,只是别名不同。
六、删除镜像
命令:docker rmi 或者docker image rm
[root@localhost ~]# docker rmi busybox:tag Untagged: busybox:tag [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 219ee5171f80 8 hours ago 1.23MB
七、构建镜像
使用docker commit命令从运行中的容器提交为镜像
使用docker build命令从Dockerfile构建镜像
使用Dockerfile构建镜像具有以下特性:
Dockerfile的每一行命令都会生成一个独立的镜像层,并且拥有唯一的ID
Dockerfile的命令是完全透明的,可以查看到如何一步步构建的
Dockerfile的纯文本的,方便与代码一起存放在代码仓库并做版本管理
Dockerfile常用的指令:
八、镜像实现原理
Docker镜像是由一系列镜像层(layer)组成的,每一层代表了镜像构建过程中的一次提交。
bash复制代码FROM busybox COPY test /tmp/test RUN mkdir /tmp/testdir
说明:
第一行:基于busybox创建一个镜像层
第二行:拷贝本机test文件到镜像内
第三行:在/tmp文件夹下创建一个目录testdir
镜像是由一系列的镜像层(layer )组成,每一层代表了镜像构建过程中的一次提交,当我们需要修改镜像内的某个文件时,只需要在当前镜像层的基础上新建一个镜像层,并且只存放修改过的文件内容。分层结构使得镜像间共享镜像层变得非常简单和方便。
Docker镜像是静态的分层管理的文件组合,镜像底层的实现依赖于联合文件系统(UnionFS),充分掌握镜像的原理,可以帮助我们在生产实践中构建出最优的镜像,同时也可以帮助我们更好地理解容器和镜像的关系。