Docker基础-镜像操作

1、搜寻镜像

  docker search [TERM] 可以搜索远程仓库中共享的镜像,默认搜索官方仓库的镜像。

  docker search参数:

--automated=true|false   :仅显示自动创建的镜像,默认为false
--no-trunc=true|false    :输出信息不截取显示,默认为false
-s , --stars=X          :指定只显示评价为指定星级以上的镜像,默认为0,即输出所有镜像。
-f, --filter filter       Filter output based on conditions provided
--format string           Pretty-print search using a Go template
--help                    Print usage
--limit int               Max number of search results (default 25)
--no-trunc                Don't truncate output

2、获取镜像

  docker pull NAME[:TAG]

  NAME是镜像仓库的名字,用来区分镜像,TAG是镜像的标签,一般用来表示镜像的版本。

  举例:

docker pull centos:latest

  docker pull拉取的镜像是从默认的注册服务器Docker Hub Registry仓库拉取的,如果是从别的镜像服务器拉取的话,需要在仓库名称前指定完整的仓库地址。
  例如:docker pull hub.c.163.com/public/ubuntu:14.04

3、查看镜像信息

1.docker images列出镜像

  docker images命令可以列出本地主机上已有的镜像基本信息。

[root@linux-node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               20c44cd7596f        10 days ago         123MB
ubuntu              latest              20c44cd7596f        10 days ago         123MB
ubuntu              14.04               d6ed29ffda6b        10 days ago         221MB
centos              latest              d123f4e55e12        3 weeks ago         197MB
[root@linux-node1 ~]#

2.docker tag NAME[:TAG] MYNAME[:MYTAG] 给镜像添加自己的标签

[root@linux-node1 ~]# docker tag ubuntu:latest myubuntu:latest
[root@linux-node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myubuntu            latest              20c44cd7596f        10 days ago         123MB
ubuntu              16.04               20c44cd7596f        10 days ago         123MB
ubuntu              latest              20c44cd7596f        10 days ago         123MB
ubuntu              14.04               d6ed29ffda6b        10 days ago         221MB
centos              latest              d123f4e55e12        3 weeks ago         197MB
[root@linux-node1 ~]# 

3.docker inspect NAME:TAG 命令查看镜像详细信息

  docker inspect 命令可以获取该镜像的详细信息,包括制作者、适应架构和各层的数字摘要等。
  docker inspect ubuntu:latest

4.docker history NAME:TAG 命令查看镜像历史

  docker history命令可以查看该镜像各层的创建信息,查看镜像的创建过程。
  docker history ubuntu:latest

[root@linux-node1 ~]# docker history ubuntu:latest
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
20c44cd7596f        10 days ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B                  
<missing>           10 days ago         /bin/sh -c mkdir -p /run/systemd && echo '...   7B                  
<missing>           10 days ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\...   2.76kB              
<missing>           10 days ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B                  
<missing>           10 days ago         /bin/sh -c set -xe   && echo '#!/bin/sh' >...   745B                
<missing>           10 days ago         /bin/sh -c #(nop) ADD file:280a445783f309c...   123MB               
[root@linux-node1 ~]#

4、删除镜像

1.使用标签删除镜像

  docker rmi命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为本地镜像的标签或者ID。

[root@linux-node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myubuntu            latest              20c44cd7596f        10 days ago         123MB
ubuntu              16.04               20c44cd7596f        10 days ago         123MB
ubuntu              latest              20c44cd7596f        10 days ago         123MB
ubuntu              14.04               d6ed29ffda6b        10 days ago         221MB
centos              latest              d123f4e55e12        3 weeks ago         197MB
[root@linux-node1 ~]# docker rmi myubuntu:latest 
Untagged: myubuntu:latest
[root@linux-node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              16.04               20c44cd7596f        10 days ago         123MB
ubuntu              latest              20c44cd7596f        10 days ago         123MB
ubuntu              14.04               d6ed29ffda6b        10 days ago         221MB
centos              latest              d123f4e55e12        3 weeks ago         197MB
[root@linux-node1 ~]#

2.使用镜像ID删除镜像

  使用docker rmi命令,并且在后面跟上镜像的ID(也可以是能进行区分的部分ID的前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。
  当该镜像创建的容器存在时,该镜像无法被删除,必须要先停止并删除容器,才可以进行删除镜像的操作。

3.强制删除镜像

  docker rmi -f 命令可以强制删除镜像文件,但是在生产中不建议使用。参数-f用来强制删除一个存在容器依赖的镜像。
  建议先停止该镜像创建的容器之后删除容器,最后在删除镜像。

5、创建镜像

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

1.基于已有镜像的容器创建

  docker commit命令可以实现基于已有镜像的容器创建镜像,命令格式为docker commit [options] CONTAINER p [REPOSITORY[:TAG]]。
      主要参数如下:

-a,--author=""    作者信息
-c,--change=[]    提交的时候执行Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBUILD|VOLUME|WORKDIR等。
-m,--missage=""   提交消息
-p,--pause=true   提交时暂停容器运行。

  举例如下:

[root@linux-node1 ~]# docker run -it ubuntu:14.04 /bin/bash
root@97cb55d1750b:/# touch test
root@97cb55d1750b:/# echo "123456" > test 
root@97cb55d1750b:/# cat test 
123456
root@97cb55d1750b:/# exit

  该容器的ID为:97cb55d1750b
  此时,这个容器已经在原来镜像的基础上发生了变化,可以用docker commit来提交一个新的镜像

[root@linux-node1 ~]# docker commit -m "add a file named test" -a "StaryJie" 97cb55d1750b test:0.1
sha256:d751da3f994342576516f5d7d2b56df62172299eddd940fbbc368d03508f58e2
[root@linux-node1 ~]# 
[root@linux-node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                0.1                 d751da3f9943        24 seconds ago      221MB
ubuntu              16.04               20c44cd7596f        10 days ago         123MB
ubuntu              latest              20c44cd7596f        10 days ago         123MB
ubuntu              14.04               d6ed29ffda6b        10 days ago         221MB
centos              latest              d123f4e55e12        3 weeks ago         197MB
[root@linux-node1 ~]# 

2.基于本地模板导入镜像

  利用docker import命令可以基于本地模板导入镜像,命令格式为:docker import [options] file|url| -[REPOSITORY[:TAG]]

[root@linux-node1 ~]# cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
sha256:4c8b886ac4ef6a93d5324e7d7eb33b80cc89939ebb49b147a123e5d2ca5ef2aa
[root@linux-node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               4c8b886ac4ef        5 seconds ago       230MB
test                0.1                 d751da3f9943        9 minutes ago       221MB
ubuntu              16.04               20c44cd7596f        10 days ago         123MB
ubuntu              latest              20c44cd7596f        10 days ago         123MB
centos              latest              d123f4e55e12        3 weeks ago         197MB
[root@linux-node1 ~]#

3.基于Dockerfile创建镜像

  请参考《使用Dockerfile创建镜像》

 

6、存出和载入镜像

1.存出镜像

  docker save命令可以导出镜像到本地文件,如下:

[root@linux-node1 ~]# docker save -o ubuntu-14.04-x86_64-minimal.tar.gz ubuntu:14.04
[root@linux-node1 ~]# ll
total 224808
-rw-------. 1 root root      1071 Jan 19  2017 anaconda-ks.cfg
-rw-------  1 root root 230199296 Nov 28 14:40 ubuntu-14.04-x86_64-minimal.tar.gz

2.载入镜像

  利用docker load将导出的tar镜像导入到本地仓库

[root@linux-node1 ~]# docker load --input ubuntu-14.04-x86_64-minimal.tar.gz
Loaded image: ubuntu:14.04
[root@linux-node1 ~]#

7、上传镜像

  使用docker push命令上传镜像到仓库,默认上传到Docker Hub官方仓库(需要登录)。命令格式为:docker push NAME:[TAG] | [REPOSITORY_HOST[:REPOSITORY_PORT]/]NAME[:TAG]
  上传镜像到Docker Hub之前需要通过docker tag命令将镜像命名为 username/ubuntu:14.04这种格式,username为你本人在Docker Hub注册之后的用户名。
  docker push staryjie/ubuntu:14.04

posted @ 2017-11-29 13:14  StaryJie  阅读(735)  评论(1编辑  收藏  举报