Docker镜像的获取与删除

Docker运行容器前须要本地存在对应的镜像,若是镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Dicker Hub公共注册服务器中的仓库),用户也能够经过配置,使用自定义的镜像仓库。php

获取镜像:java

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

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

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

例如:要获取一个ubuntu镜像,能够:github

这样,便会从Docker的Ubuntu仓库中下载一个最新的Ubuntu操做系统镜像,也能够下载制定标签的镜像,好比下载14.04标签的镜像:sql

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

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

在下载过程当中能够看到镜像文件通常是由若干层组成,行首是像e118faab2e16这样的各层ID,下载过程当中会获取并输出镜像的各层信息:centos

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

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

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

查看镜像信息:

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

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

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

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

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

搜寻镜像:

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

sudo docker search mysql
NAME                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                        MySQL is widely usedopensource relati...   735       [OK]      
tutum/mysql                  MySQL Server image – listens in port 3306….   122                  [OK]
orchardup/mysql                                                              37                   [OK]
centurylink/mysql            Image containing mysqlOptimized to be li...   23                   [OK]
mysql/mysqlserver           Optimized MySQL Server Docker imagesCrea...   17                   [OK]
wnameless/mysqlphpmyadmin   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 MasterSlave replication       5                    [OK]
appcontainers/mysql          CentOS 6.6 based Customizable MySQL 5.5 Co...   3                    [OK]
alreece45/phusionmysql      Simple MySQL container with autocreating ...   2                    [OK]
azukiapp/mysql               Docker image to run MySQL by Azuki – http:...   2                    [OK]
jdeathe/centossshmysql     CentOS6.6 x86_64 MySQL.                    2                    [OK]
frodenas/mysql               Docker Image for MySQL                        1                    [OK]
phpmentors/mysql             MySQL server image                              1                    [OK]
lec00q/mysql                 docker image for running 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 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命令能够删除镜像,命令格式为:

其中IMAGE但是标签或ID。

由于一个镜像能够有多个标签,若是rmi一个标签时不能找到惟一的镜像,便会删除这个标签,直到一个标签能肯定惟一镜像为止。因此,若是一个标签能够肯定这个镜像,再执行这个命令便危险了,由于将直接删除这个镜像。

若是一个镜像已经建立了容器,那么这个镜像文件默认是没法被删除的,例如刚才的ubuntu镜像以及建立了一个执行bash 的容器,能够用docker ps -a命令查看全部容器:

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

正确的作法应该是先删除依赖该镜像的全部容器:

而后再删除镜像。

 

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

相关文章
相关标签/搜索