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

获取镜像:

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

可以使用docker pull命令从网络上下载镜像。该命令的格式为:

docker pull NAME[:TAG]

对于Docker镜像来说,如果不显示地制定TAG,则默认会选择latest标签,即下载仓库中的最新版本的镜像。

例如:要获取一个ubuntu镜像,可以:

 sudo docker pull ubuntu

这样,便会从Docker的Ubuntu仓库中下载一个最新的Ubuntu操作系统镜像,也可以下载制定标签的镜像,比如下载14.04标签的镜像:

 sudo docker pull ubuntu:14.04

上面的命令都相当于sudo docker pull registry.hub.docker.com/ubuntu:latest命令,即从默认的注册服务器registry.hub.docker.com中的ubuntu仓库下载标记为lastest的镜像。

当然,也可以选择其他注册服务器的仓库下载,此时只需要在仓库前制定完整仓库注册服务器地址,例如从DockerPool社区的镜像源下载最新ubuntu:

 sudo docker pull dl.dockerpool.com:5000/ubuntu

在下载过程中可以看到镜像文件一般是由若干层组成,行首是像e118faab2e16这样的各层ID,下载过程中会获取并输出镜像的各层信息:

 latest: Pulling from ubuntu

e118faab2e16: Downloading
7e2c5c55ef2c: Download complete
e04c66a223c4: Download complete
fa81ed084842: Download complete

层(Layer)其实是AUFS(Advanced Union File System,一种联合文件系统)中的重要概念,是实现增量保存与更新的基础。

在本地有了这个镜像之后便可以使用,生成容器了,比如在这个ubuntu镜像上生成一个容器,在其中运行bash应用:

sudo docker run –t –i ubuntu /bin/bash
root@636151e7941b:/#

这就是相当于用ubuntu这个镜像创建了一个容器,并且你已经在这个容器里面了,在这里,你完全可以和使用普通的ubuntu系统一样(可以认识为这个镜像生成的虚拟机,不过所有同类容器只占有自身数据的大小,而镜像部分共用),包括各种命令,甚至安装软件。

查看镜像信息:

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

sudo docker images
REPOSITORY          TAG                 IMAGE ID              CREATED             VIRTUAL SIZE
  ubuntu                  latest              fa81ed084842        3 days ago              188.3 MB

在列出的信息中分别是来自那个仓库,比如ubuntu仓库,镜像标签,镜像ID(唯一),创建时间,镜像大小。

为了管理方便,还可以使用docker tag命令为本地镜像添加新的标签,比如添加:

sudo docker tag pull dl.dockerpool.com:5000/ubuntu:lastest ubuntu:lastest

然后就会多出一个标签为ubuntu:latest的新镜像。

使用docker inspect [镜像ID]可以获取该镜像的详细信息:

sudo docker inspect fa81ed084842
[{
    “Architecture”: “amd64”,
    “Author”: “”,
    “Comment”: “”,
    “Config”: {
        “AttachStderr”: false,
        “AttachStdin”: false,
        “AttachStdout”: false,
        “Cmd”: [
            “/bin/bash”
        ],
        “CpuShares”: 0,
        “Cpuset”: “”,
        “Domainname”: “”,
        “Entrypoint”: null,
        “Env”: null,
        “ExposedPorts”: null,
        “Hostname”: “706cb4504c90”,
        “Image”: “e04c66a223c45a6247237510c40117cef92acb0a4355f1ba90580ef6274b490d”,
        “Labels”: {},
        “MacAddress”: “”,
        “Memory”: 0,
        “MemorySwap”: 0,
        “NetworkDisabled”: false,
        “OnBuild”: null,
        “OpenStdin”: false,
        “PortSpecs”: null,
        “StdinOnce”: false,
        “Tty”: false,
        “User”: “”,
        “Volumes”: null,
        “WorkingDir”: “”
    },
    “Container”: “ba8570386ba189dc1af092e141415fbf522e38915b991d6ac5d682c51f42c13f”,
    “ContainerConfig”: {
        “AttachStderr”: false,
        “AttachStdin”: false,
        “AttachStdout”: false,
        “Cmd”: [
            “/bin/sh”,
            “-c”,
            “#(nop) CMD [\”/bin/bash\”]”
        ],
        “CpuShares”: 0,
        “Cpuset”: “”,
        “Domainname”: “”,
        “Entrypoint”: null,
        “Env”: null,
        “ExposedPorts”: null,
        “Hostname”: “706cb4504c90”,
        “Image”: “e04c66a223c45a6247237510c40117cef92acb0a4355f1ba90580ef6274b490d”,
        “Labels”: {},
        “MacAddress”: “”,
        “Memory”: 0,
        “MemorySwap”: 0,
        “NetworkDisabled”: false,
        “OnBuild”: null,
        “OpenStdin”: false,
        “PortSpecs”: null,
        “StdinOnce”: false,
        “Tty”: false,
        “User”: “”,
        “Volumes”: null,
        “WorkingDir”: “”
    },
    “Created”: “2015-06-01T00:00:32.983571589Z”,
    “DockerVersion”: “1.6.0”,
    “Id”: “fa81ed084842076d1b39b56d084d99ec0011cd4a5ade1056be359486a8b213e4”,
    “Os”: “linux”,
    “Parent”: “e04c66a223c45a6247237510c40117cef92acb0a4355f1ba90580ef6274b490d”,
    “Size”: 0,
    “VirtualSize”: 188281989
}
]

搜寻镜像:

可以使用docker search命令搜寻镜像,比如搜寻带mysql关键字的镜像如下所示:

sudo docker search mysql
NAME                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                        MySQL is a widely used, open–source relati...   735       [OK]      
tutum/mysql                  MySQL Server image – listens in port 3306….   122                  [OK]
orchardup/mysql                                                              37                   [OK]
centurylink/mysql            Image containing mysql. Optimized to be li...   23                   [OK]
mysql/mysql–server           Optimized MySQL Server Docker images. Crea...   17                   [OK]
wnameless/mysql–phpmyadmin   MySQL + phpMyAdmin https://index.docker.io...   15                   [OK]
google/mysql                 MySQL server for Google Compute Engine          13                   [OK]
sameersbn/mysql                                                              11                   [OK]
ioggstream/mysql             MySQL Image with Master–Slave replication       5                    [OK]
appcontainers/mysql          CentOS 6.6 based Customizable MySQL 5.5 Co...   3                    [OK]
alreece45/phusion–mysql      Simple MySQL container with auto–creating ...   2                    [OK]
azukiapp/mysql               Docker image to run MySQL by Azuki – http:...   2                    [OK]
jdeathe/centos–ssh–mysql     CentOS–6 6.6 x86_64 / MySQL.                    2                    [OK]
frodenas/mysql               A Docker Image for MySQL                        1                    [OK]
phpmentors/mysql             MySQL server image                              1                    [OK]
lec00q/mysql                 A docker image for running a mysql server ...   0                    [OK]
jmoati/mysql                                                                 0                    [OK]
marvambass/mysql             MySQL Server based on Ubuntu 14.04              0                    [OK]
learninglayers/mysql                                                         0                    [OK]
cloyne/mysql                                                                 0                    [OK]
thomaswelton/mysql                                                           0                    [OK]
ahmet2mir/mysql              This is a Debian based image with MySQL se...   0                    [OK]
miko2u/mysql                 MySQL with groonga and ipv6                     0                    [OK]
horx/mysql                   Mysql server                                    0                    [OK]
ingoclaro/mysql                                                              0                    [OK]

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

删除镜像:

使用docker rmi命令可以删除镜像,命令格式为:

docker rmi IMAGE[IMAGE...]

其中IMAGE可是标签或ID。

因为一个镜像可以有多个标签,如果rmi一个标签时不能找到唯一的镜像,便会删除这个标签,直到一个标签能确定唯一镜像为止。所以,如果一个标签可以确定这个镜像,再执行这个命令便危险了,因为将直接删除这个镜像。

如果一个镜像已经创建了容器,那么这个镜像文件默认是无法被删除的,例如刚才的ubuntu镜像以及创建了一个执行bash 的容器,可以用docker ps -a命令查看所有容器:

sudo docker ps –a
CONTAINER ID        IMAGE               COMMAND             CREATED            STATUS                      PORTS               NAMES
636151e7941b        ubuntu:latest       “/bin/bash”         28 minutes ago      Exited (0) 22minutes ago                       hopeful_rosalind

会发现后台存在一个处于Exited退出状态的容器,那么是无法删除ubuntu镜像的。如果想要强行删除,可以加-f参数,但这样往往遗留一些问题。比如删除之后,docker images中会存在一个名为none 的临时镜像。

正确的做法应该是先删除依赖该镜像的所有容器:

sudo docker rm 636151e7941b

然后再删除镜像。

PS:通过测试只要镜像id相同,不管镜像标签及其来源如何,都可以认为它们就是同一镜像文件,就像java中变量和对象变量一样,标签就是变量,所有id相同的标签都引用同一个镜像,按标签删除镜像把这里体现的淋漓尽致,只要还有一个标签引用这个镜像id,这个镜像就不会被删除。

Docker镜像的获取与删除的更多相关文章

  1. docker 源码分析 四(基于1.8.2版本),Docker镜像的获取和存储

    前段时间一直忙些其他事情,docker源码分析的事情耽搁了,今天接着写,上一章了解了docker client 和 docker daemon(会启动一个http server)是C/S的结构,cli ...

  2. Docker 镜像&仓库 获取及推送镜像

    docker查看.删除镜像 docker镜像存储位置: /var/lib/docker 查看docker信息也可以查看保存位置 docker info 1.列出镜像 docker images -aa ...

  3. 一个docker镜像中的目录删除不了问题

    在一个容器中,删除一个目录,失败: bash-4.2# pwd /home/zxcdn/ottcache/tomcat bash-4.2# uname -a Linux 3516b6c97679 -. ...

  4. Docker镜像的获取和推送

    查找镜像 查找镜像的方法有主要有两种,一种是在Docker Hub官方网站查找,网址为https://hub.docker.com/ 另一种方法是在命令行界面中通过docker serach < ...

  5. Docker镜像操作命令

    一.使用Docker镜像 1. 获取镜像 可以使用docker pull命令直接从Docker Hub镜像源来下载镜像.该命令的格式为docker pull NAME[:TAG].其中,NAME是镜像 ...

  6. docker镜像基本操作一

    获取镜像 首先说明一下如何从Docker hub中获取高质量的镜像,从Docker镜像库获取镜像的命令是docker pull .其命令格式为: docker pull [选项] [Docker Re ...

  7. docker镜像使用和总结

    一.Docker镜像是什么? 操作系统分为内核和用户空间.在Linux中,内核启动后会挂载 root 文件系统为其提供用户空间支持. docker镜像就相当于一个 root文件系统.比如:官方镜像ub ...

  8. 二、docker 镜像容器常用操作(让我们用docker 溜得飞起)

    前言 上篇讲了我们如何安装docker,现在该我们一展拳脚的时候了.接下来让我们一起学习一下docker常见的操作,让我们能够会使用 docker. 基本概念 在讲使用之前,还是先将一下docker ...

  9. Docker 镜像的操作

    1. 从docker 镜像仓库获取镜像 docker pull  [镜像名] 从 docker hub 中查看版本 获取 特定版本  docker pull centos 7.6.1801 2.    ...

随机推荐

  1. Javascript刷新页面大全

    非模态刷新父页面:window.opener.location.reload(); 模态刷新父页面:window.dialogArguments.location.reload(); 先来看一个简单的 ...

  2. Function Scope

    JavaScript’s function scope means that all variables declared within a function are visi-ble through ...

  3. PHP == 和 ===

    == 只判断两边的值是否相等,例如: 5555 == "5555" ,为真 === 判断两边的值和类型是否相当,5555 === "5555"  False,因 ...

  4. SDUT 2610 Boring Counting(离散化+主席树区间内的区间求和)

    Boring Counting Time Limit: 3000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descriptio ...

  5. POJ 1703 Find them, Catch them(种类并查集)

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41463   Accepted: ...

  6. SqlServer表数据与excel中数据的互相复制

    一.SqlServer表数据复制到excel 1.新建查询,用sql语句把表数据读出来 2.然后,选择数据,右键,复制(也可以点击连同标题复制),复制到记事本中(不然会乱码) 3.然后再把记事本的内容 ...

  7. [听课笔记]Professor Michael Cusumano's New Book:" Strategy Rules: Five Timeless Lessons from Bill Gates, Andy Grove, and Steve Jobs"

    1. Look Forward, Reason Back Extrapolate, interpret, then tie vision to concrete actions2. Make Big ...

  8. UITableview xib里面 cell 按钮的回调

    //  MoreBtnCell.m#import <UIKit/UIKit.h> @interface MoreBtnCell : UITableViewCell @property (w ...

  9. ecshop数据库操作函数

    ecshop数据库操作函数 分类: ecshop和dede2013-09-23 14:02 1716人阅读 评论(0) 收藏 举报 本章我们将结合eschop二次开发一些常见的开发例子.来谈谈ecsh ...

  10. 免费api大全(更新中)

    免费api大全(更新中) API大全  http://www.apidq.com/    (这个碉堡了) 天气接口 气象局接口 完整数据:http://m.weather.com.cn/data/10 ...