文章目录
- 一、获取镜像
- 二、查看镜像信息
- 三、搜寻镜像
- 四、删除和清理镜像
- 五、创建镜像
- 六、存出和载入镜像
- 七、上传镜像
一、获取镜像
语法格式如下:
docker [image] pull NAME[:TAG]
例如,获取一个Ubuntu 18.04系统的基础镜像就可以使用如下的命令:
$ docker pull ubuntu:18.04
从镜像的下载过程可以看出,镜像文件一般由若干层组成,23884877105a这样的串是层的唯一id(完整的id包括256比特,64个十进制字符组成)。使用docker pull
命令下载中会获取并输出镜像的各层信息。当不同的镜像包括相同的层时,本地仅存储了层的一份内容,减小了存储空间。
对于Docker镜像来说,如果不显示指定TAG,则默认会选择latest标签,这会下载仓库中最新版本的镜像。下面的例子将从Docker Hub的Ubuntu仓库下载一个最新版本的Ubuntu操作系统的镜像:
//该命令实际上下载到的就是ubuntu:latest镜像
$ docker pull ubuntu
严格来说,镜像的仓库名称中还应该添加仓库地址(注册服务器)作为前缀,只是默认使用的是官方Docker Hub服务,该前缀可以忽略。如果想下载别的registry的镜像就需要加上仓库地址,例如下面的命令会从网易蜂巢的仓库中下载镜像,而不是Docker Hub下载。
$ docker pull hub.c.163.com/public/ubuntu:18.04
下载镜像到本地之后,即可随时使用该镜像,例如利用该镜像创建一个容器,在其中运行bash应用,执行打印“Hello World”命令:
二、查看镜像信息
1. 使用images
命令列出镜像
使用如下命令列出本地主机上已有镜像的基本信息:
$ docker images
or
$ docker image ls
注意:其中镜像的ID信息十分重要,他唯一标识了镜像。在使用镜像ID的时候,一般可以使用该ID的前若干个字符组成的可区分串来替代完整的ID。
2. 使用tag
命令添加镜像标签
使用docker tag
命令为本地镜像任意添加新的标签。例如,添加一个myubuntu:latest镜像标签:
$ docker tag ubuntu:18.04 myubuntu:latest
之后,用户就可以直接使用myubuntu:latest来表示这个镜像了。而且,可以看到我们新添加标签的镜像和原始镜像的ID是一模一样的,只是别名不同,docker tag
命令添加的标签实际上起到了类似于链接的作用。
3. 使用inspect
命令查看详细信息
使用docker inspect
命令可以获取该镜像的详细信息,包括制作者、适应架构、各层的数字摘要等:
$ docker inspect ubuntu:18.04
该命令返回的是一个JSON格式的信息,如果我们只要其中一项的内容,可以使用-f
来指定,例如,获取镜像的Architecture:
$ docker inspect -f {{".Architecture"}}
4. 使用history
命令查看镜像历史
既然镜像文件由多个层组成,那么怎么知道各个层的内容具体是什么呢?这时候可以使用history
子命令,该命令将列出各层的创建信息。
例如,查看ubuntu:18.04镜像的创建过程,可以使用如下命令:
$ docker history
三、搜寻镜像
使用docker search
命令可以搜索Docker Hub官方仓库的镜像。语法为:
docker search [option] keyword
命令选项主要包括:
- -f, --filter filter:过滤输出内容;
- –format string:格式化输出内容;
- –limit int:限制输出结果个数,默认为25个;
- –no-trunc:不截断输出结果
例如,搜索官方提供的带ubuntu关键字的镜像,如下所示:
四、删除和清理镜像
1. 使用标签删除镜像
使用docker rmi
或docker rm
命令可以删除镜像,命令格式为:
docker rmi IMAGE [IMAGE...]
支持选项包括:
- -f , -force:强制删除镜像,即使有容器依赖它;
- -no-prune:不要清理未带标签的父镜像。
例如,要删除掉myubuntu:latese镜像,可以使用如下命令:
$ docker rmi myubuntu:latest
当同一个镜像拥有多个标签时,docker rmi
命令只是删除该镜像多个标签中的指定标签而已,并不影响镜像文件,因此上述操作相当于只是删除了镜像的一个标签副本而已。但当镜像只剩一个标签的时候就要小心,此时再使用docker rmi
命令会彻底删除镜像。
2. 使用镜像ID删除镜像
当使用docker rmi
命令,并且后面跟上镜像的ID(也可以是能进行区分的部分ID串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
注意:当有镜像创建的容器在运行时,镜像文件默认是无法被删除的,如果想要强行删除镜像,可以使用-f参数。通常并不推荐使用这种方法来强制删除一个存在容器依赖的镜像,正确的做法是先删除依赖该镜像的所有容器,再来删除镜像。
3. 清理镜像
使用Docker一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune
命令来进行清理。
支持选项包括:
- -a, -all:删除所有无用镜像,不光是临时镜像;
- -filter filter:只清理符合给定过滤器的镜像;
- -f, -force:强制删除镜像,而不进行提示确认。
例如,如下命令会自动清理临时的遗留镜像文件层,最后会提示释放的存储空间:
$ docker image prune -f
五、创建镜像
1. 基于已有容器创建
该方法主要是使用docker commit
命令。
2. 基于本地模板导入
$ cat ubuntu-18.04-x64_64-minimal.tar.gz | docker import
3. 基于Dockerfile创建
Dockerfile是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程。
下面给出一个Dockerfile的简单示例,基于ubuntu:18.04镜像安装Qt 5环境,构成一个新的Qt:5镜像:
FROM ubuntu:18.04
LABEL version="1.0" maintainer="docker user <docker_user@github>"
RUN apt-get update && \
apt-get install -y qt5-default
apt-get install -y qtcreator
apt-get clean && \
rm
创建镜像的过程可以使用docker build
命令,编译成功后本地将多出一个Qt:5镜像:
$ docker build -t Qt:5 .
...
Successful built xxxxxxxxx
六、存出和载入镜像
1. 存出镜像
如果要导出镜像到本地文件,可以使用docker save
命令。该命令支持-o、-output string参数,导出镜像到自动的文件中。
例如导出本地的ubuntu:18.04镜像为文件ubuntu_18.04.tar,如下所示:
docker save -o ubuntu_18.04.tar ubuntu:18.04
之后就可以通过复制ubuntu_18.04.tar文件将该镜像分享给他人。
1. 载入镜像
可以使用docker load
命令将导出的tar文件再导入到本地镜像库。支持-i、-input string选项,从指定文件中读入镜像内容。
例如,从文件ubuntu_18.04.tar导入镜像到本地镜像列表,如下所示:
docker load -i ubuntu_18.04.tar
或
docker load <
这将导入镜像及其相关的元数据信息(包括标签等)。导入成功后,可以使用docker images命令进行查看,与原镜像一致。
七、上传镜像
可以使用docker push
命令上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)。
用户在Docker Hub网站注册后可以上传自制的镜像。
例如,用户user上传本地的test:latese镜像,可以先添加新的标签user/test:latest
,然后使用docker push
上传镜像:
$ docker tag test:latest user/test:latest
$ docker push user/test:latest
The push refers to a repository [docker.io/user/test]
第一次上传时,会提示输入登录信息或进行注册,之后登录信息会记录到本地~/.docker
目录下。