Docker镜像的获取与删除

摘要:
Docker运行容器之前,相应的映像必须存在于本地。如果镜像在本地不存在,Docker会尝试先从默认的镜像仓库下载。用户还可以通过配置使用定制的图像仓库。您可以使用docker pull命令从网络下载图像。此命令的格式为:dockerpullNAME[:TAG]对于Docker图像,如果未在显示中指定TAG,则默认情况下将选择最新的标记,即将下载仓库中图像的最新版本。

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,下载过程中会获取并输出镜像的各层信息:

 latestPulling from ubuntu
e118faab2e16Downloading
7e2c5c55ef2cDownload complete
e04c66a223c4Download complete
fa81ed084842Download complete

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

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

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

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

查看镜像信息:

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

sudo docker images
REPOSITORY          TAG                 IMAGE ID              CREATED             VIRTUAL SIZE
  ubuntu                  latest              fa81ed084842        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 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命令可以删除镜像,命令格式为:

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 (022minutes ago                       hopeful_rosalind

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

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

sudo docker rm 636151e7941b

然后再删除镜像。

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

免责声明:文章转载自《Docker镜像的获取与删除》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jmeter服务器监控插件下载配置转:Android进阶:模拟闹钟 学习Alarm与Notification下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Docker中使用Nginx反向代理配置说明

本文主要讲述在Docker中怎么配置Nginx 一、Docker中安装Nginx请参考:https://www.cnblogs.com/whereGo/p/13523597.html。 二、配置Nginx: 1、进入Nginx容器  docker exec -it nginx bash #进入nginx容器  2、容器里面需要安装Vim apt-...

Ubuntu Server版安装小记

之前一直是用Ubuntu的桌面版装docker,桌面版本身用起来比较方便,但开销较大,如果建立多个虚拟机就比较费劲了。今天试了一下server版的Ubuntu,发现还是比较方便的,相比桌面版,有如下好处: 占用空间小,只占用3G左右 占用内存小,甚至512MB内存也能较好的启动 这里记录下安装过程:   1. 下载 目前Ubuntu最小的版本是19.1...

docker笔记

suse环境采用二进制文件安装docker后,执行systemctl start docker提示docker.service不存在。 解决办法,/usr/lib/systemd/system目录下增加docker.service文件,内容如下: [Unit] Description=Docker Application Container Engine...

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

问题:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? docker解决docker与守护进程间的通讯问题cannot connect :cannot connect to the Docker daemon a...

记一次docker容器中运行springboot程序日志打印的中文变成问号

问题现象: 在虚拟机中 java -jar app.jar 程序正常启动,中文日志显示无误,在docker容器内中文全部显示为问号,但在容器内echo可以正常输出中文,遂排除字体因素。 百度说改/etc/locale.conf 和 ~/.bashrc,都没用。 解决方案: 做 docker 容器的时候加上一句ENV LANG C.UTF-8,问题搞定。 参...

(十九)VMware Harbor 详细介绍

一 . 简介 Harbor是VMware公司开源的企业级DockerRegistry项目,项目地址为https://github.com/vmware/harbor。其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access...