Docker之镜像的使用(三)

镜像

镜像是Docker运行容器的前提。

获取镜像

从网络上下载镜像可以使用pull,比如从Docker Hub的Ubuntu仓库下载一个最新的Ubuntu操作系统的镜像。

$ sudo docker pull ubuntu

我们还可以通过指定标签来下载特定的某一个镜像

$ sudo docker pull ubuntu:18.06

也可以选择从其他注册服务器的仓库下载。不过需要在仓库名称前指定完整的仓库注册服务器地址。例如从DockerPool社区的镜像源d1.dockerpool.com下载最新的Ubuntu镜像。

$ sudo docker pull d1.dockerpool.com:5000/ubuntu

查看镜像信息

使用docker images 命令可以列出本地主机上已有的镜像。

$ sudo docker images

在列出的信息中,可以看到几个字段信息:
来源于哪个仓库,镜像的标签,镜像的id,创建时间,镜像大小
其中镜像的id信息十分重要,它唯一标识了镜像。

可以使用docker tag命令为本地镜像添加新的标签,例如添加一个新的ubuntu:latest镜像标签:

$ sudo docker tag d1.dockerpool.com:5000/ubuntu:latest ubuntu:latest

使用docker inspect命令可以获取该镜像的详细信息。

$ sudo docker inspect d4b6e71fe4d4

其中d4b6e71fe4d4是镜像的id ,这返回的是一个JSON格式的信息

搜寻镜像

使用docker search命令可以搜寻远端仓库中共享的镜像,默认搜索Docker Hub官方仓库的镜像。
例如,搜索mysql 关键字的镜像如下所示:

$ sudo docker search mysql

可以看到返回很多包含关键字的镜像,其中包括镜像名字,描述,星级(表示该镜像的收欢迎程度),是否官方创建,是否自动创建等。

删除镜像

使用镜像的标签删除镜像
使用docker rmi命令可以删除镜像,命令格式为docker rmi IMAHE,其中IMAGE可以为标签或id
例如,要删除d1.dockerpool.com:5000/ubuntu:latest镜像,可以使用如下命令:

$ sudo docker rmi d1.dockerpool.com:5000/ubuntu

使用镜像的id删除镜像
当使用docker rmi命令后面跟上镜像的id(也可以是id能进行区分的部分前缀串)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本省。
注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,例如:
先利用ubuntu 镜像创建一个简单容器,输出一句话“hello! i am here”

$ sudo docker run docker echo “hello! i am here”

使用docker ps -a命令可以看到本机上存在的所有容器,可以看到,后台存在一个退出状态的容器,是刚才基于ubuntu:latest镜像创建的。

试图删除该镜像,Docker会提示有容器正在进行,无法删除:

$ sudo docker rmi ubuntu

如果要想强行删除镜像,可以使用-f参数:

$ sudo docker rmi -f ubuntu

不推荐使用-f参数来强制删除一个存在容器依赖的镜像,因为这样往往会造成一些遗留的问题。再次使用docker images查看本地的镜像列表时,会发现一个标签为none 的临时镜像,原来被强制删除的镜像换了新的id继续存在系统中。
因此,正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。首相删除容器d4b6e71fe4d4:

$ sudo docker rm d4b

此时在使用临时的id来删除镜像。

创建镜像

创建镜像的方法有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。

基于已有镜像的容器创建
该方法主要是使用docker commit命令
首先,启动一个镜像,并在其中进行修改操作,例如创建一个test文件,之后退出:

$ huangyongpeng@huangyongpeng-Inspiron-5442:~$ sudo docker run -ti ubuntu /bin/bash
$ root@03c71a04b3ba:/# touch test
$ root@03c71a04b3ba:/# exit

记住容器id为03c71a04b3ba。
此时该容器和原来镜像相比,已经发生变化,可以使用docker commit命令来提交一个新的镜像。提交时可以使用id或名称来指定容器:

$ sudo docker commit -m “add a new file” -a “Docker Newbee” 03c71a04b3ba test

顺利的话,命令会返回新创建的镜像id信息,例如:
1b8ae51cf2243fdaea7ff96706ac9534dce74e8f71c346b4d9020da590cb16cc

基于本地模板导入
也可以直接从一个操作系统模板文件导入一个镜像。在这里,推荐使用OpenVZ提供的模板来创建。OpenVZ模板的下载地址为http://openvz.org/Download/templates/precreated。
比如,下载了一个Ubuntu-14.04的模板压缩包后,可以使用以下命令导入:

$ sudo cat ubuntu-14.04-x86_64-minimal.tar.qz |docker import - ubuntu:14.04

存在和载入镜像

可以使用docker save 和docker load 命令来存在和载入镜像。

存在镜像
如果要存出镜像到本地文件,可以使用docker save命令。例如,存出本地的ubuntu:14.04镜像为文件ubuntu_14.04.tar:

$ sudo docker save -o ubuntu_14.04.tar ubuntu:14.04

载入镜像
可以使用docker load从存出的本地文件中再导入本地镜像库,例如从文件ubuntu_14.04.tar导入镜像到本地镜像列表,如下所示:

$ sudo docker load --input ubuntu_14.04.tar

$ sudo docker load < ubuntu_14.04.tar

上传镜像
可以使用docker push命令上传镜像到仓库,默认上传到DockerHub官方仓库(需要登录)
用户在DockerHub网站注册后,即可上传自制的镜像。例如用户user上传本地的test:latest镜像,可以先添加新的标签user/test:latest,然后用docker push命令上传镜像:

$ sudo docker tag test:latest user/test:latest
$ sudo docker push user/test:latest

第一次使用时,会提示输入登录信息或者进行注册。

猜你喜欢

转载自blog.csdn.net/huang_yong_peng/article/details/82927545