简介

Docker运行容器钱需要本地存在相应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载,默认使用DockerHub公共注册服务器的仓库,用户也可以通过配置,使用自定义的镜像仓库。

获取镜像

docker pull命令可以从网络上下载镜像 格式为 docker pull name [:tag]
对于docker镜像来说,如果不显式的指定tag,默认选择latest标签,即下载仓库中最新版本的镜像。
sudo docker pull ubuntu (默认最新版本)
sudo docker pull ubuntu: 14.04 (指定tag)
XJ2%(IVZH1SC5TSQQQ76RT4.png
也可以选择其他注册服务器的仓库下载,需要在仓库名称前指定完整的仓库注册服务器地址
sudo docker pull dl.dockerpool.com:5000/ubuntu
下载镜像到本地后,就可以随时使用镜像了,比如利用镜像创建一个容器,在其中运行bash应用:
sudo docker run -t -i ubuntu /bin/bash
![(HY5F]R~5]VY`RNWLXKWFY.png

查看镜像信息

使用docker images命令可以列出本地主机上已有镜像。
sudo docker image
77_29M%ENSG9}IWW2_V8]HB.png
可显示信息:

  • 来自哪个仓库,如ununtu
  • 镜像的标签信息,如14.04
  • 镜像的唯一ID号
  • 创建时间
  • 镜像大小

其中镜像的ID信息十分重要,他唯一标识了镜像。
使用docker inspect命令可以获取该镜像的详细信息
docker inspect 5506de (假设5506de是镜像Id)
9P{F~QZJU(L~}XDDIVWYQGL.png
docker inspect命令返回的是一个JSON格式的消息,如果我们只要其中一项内容时,可以使用-f参数来指定,例如,获取镜像的Architecture信息:
sudo docker inspect -f { ( “.Architecture”]} 550
L41K$6KUFP`43V5QXOUG5UT.png
ps:在指定镜像ID的时候,通常使用该ID的前若干个字符组成的可区分字串来替代完整的ID。

搜索镜像

docker search 可以搜索远端仓库中共享的镜像
语法:docker search TERM,支持的参数包括:

  • —automated=false 仅显示自动创建的镜像
  • —no-trunc=false 输出信息不截断显示
  • -s,—stars=0 指定仅显示评价为指定星级以上的镜像。

例如搜索mysql的镜像: sudo docker search mysql
![9W6FWKS@BUNG%XFPZ2PPXO.png
返回了很多包含mysql关键字的镜像,包括镜像名,描述、星级(表示受欢迎程度)、是否官方创建、是否自动创建等。

删除镜像

使用docker rmi命令可以删除镜像,命令格式: docker rmi Image 【id/tag】

使用标签删除

docker rmi ubuntu:latest
当一个镜像拥有多个标签时,只是删除了该镜像多个标签的指定标签而已,并不影响镜像文件。
当只剩一个标签,会彻底删除该镜像。

使用Id删除

docker rmi 2314344fg
当docker rmi命令后面跟上镜像id,会先尝试删除所有标签,再删除镜像本身。
当有该镜像创建的容器存在时,镜像文件是无法被删除的。
使用docker ps -a可以看到本机所有存在的容器。
如果想强行删除该镜像,可以使用-f参数,但不推荐使用,往往会造成一些遗留问题。正确的做法是先删除依赖该镜像的所有容器(docker rm 容器id),再来删除镜像(docker rmi -f 镜像id)。

创建镜像

创建镜像的方法有三种:

  • 基于已有镜像的容器创建
  • 基于本地模板导入
  • 基于Dockerfile创建

    基于已有镜像的容器创建

    主要是使用docker commit命令
    格式:docker commit 【options】container 【repository【:tag】】
    主要选项包括
    -a ,—author=“” 作者
    -m,—message=“”描述
    -p,—pause=true 提交时暂停容器运行
    例子: 演示如何使用该命令创建一个新镜像。首先,启动一个镜像,并在其中进行修改操作,例如创建一个test文件,之后退出:
    1. $ sudo docker run -ti ubuntu :14.04/bin/bash
    2. root@a925cb40b3f0:/#touch test
    3. root@a925cb40b3f0:/# exit
    记住容器的ID为a925cb40b3f0。
    此时该容器跟原ubuntu:14.04镜像相比,已经发生了改变,可以使用docker commit命令来提交为一个新的镜像。提交时可以使用D或名称来指定容器:
    1. $ sudo docker commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test
    2. 9e9c814023bcffc3e67e892a235afe61b02f66a947d2747f724bd317dda02f27
    顺利的话,命令会返回新创建的镜像的ID信息,例如:
    9e9c814023bcffc3e67e892a235afe61b02f66a947d2747f724bd317dda0227此时查看本地镜像列表,即可看到新创建的镜像:
    C~WV98Y9C996RQDQ_}%(}PC.png

    基于本地模板导入

    也可以直接从一个操作系统模板文件导人一个镜像。在这里,推荐使用OpenVZ提供的模板来创建。OPENVZ模板的下载地址为 http:llopenvz.org/Download/templates/precreated。
    比如,下载了一个ubuntu-14.04的模板压缩包后,可以使用以下命令导入:
    $ sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
    然后查看新导入的镜像,已经在本地存在了:

D9Y`6$KOI_6}]$4HRX0%Y4X.png

基于Dockerfile创建

存出和载入镜像

docker save和docker load

存出镜像

docker save 存出镜像到本地文件中
例如:存出本地的ubuntu:14.04镜像为文件ubuntu_14.04.tar
%E4GQO0ZPTOM6U7EF79``V8.png

载入镜像

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

$sudo docker load < ubuntu_14.04.tar
这将导人镜像以及其相关的元数据信息(包括标签等),可以使用docker images命令进行查看。

上传镜像

docker push 上传到镜像仓库 默认上传到dockerhub官方仓库,需要登录,命令格式:
语法:docker push name【:tag】
例:上传本地的test:latest镜像,可以先添加新的标签user/test:latest,然后再上传
![BO~Z4L(PAY_ATP9K5%P2Q9.png