Docker镜像的获取与删除
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 ubuntue118faab2e16: Downloading7e2c5c55ef2c: Download completee04c66a223c4: Download completefa81ed084842: Download complete
层(Layer)其实是AUFS(Advanced Union File System,一种联合文件系统)中的重要概念,是实现增量保存与更新的基础。
在本地有了这个镜像之后便可以使用,生成容器了,比如在这个ubuntu镜像上生成一个容器,在其中运行bash应用:
sudo docker run –t –i ubuntu /bin/bashroot@636151e7941b:/#
这就是相当于用ubuntu这个镜像创建了一个容器,并且你已经在这个容器里面了,在这里,你完全可以和使用普通的ubuntu系统一样(可以认识为这个镜像生成的虚拟机,不过所有同类容器只占有自身数据的大小,而镜像部分共用),包括各种命令,甚至安装软件。
查看镜像信息:
使用docker images命令可以列出本地主机上已有的镜像:
sudo docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEubuntu 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 mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql 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 –aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES636151e7941b 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镜像的获取与删除的更多相关文章
- docker 源码分析 四(基于1.8.2版本),Docker镜像的获取和存储
前段时间一直忙些其他事情,docker源码分析的事情耽搁了,今天接着写,上一章了解了docker client 和 docker daemon(会启动一个http server)是C/S的结构,cli ...
- Docker 镜像&仓库 获取及推送镜像
docker查看.删除镜像 docker镜像存储位置: /var/lib/docker 查看docker信息也可以查看保存位置 docker info 1.列出镜像 docker images -aa ...
- 一个docker镜像中的目录删除不了问题
在一个容器中,删除一个目录,失败: bash-4.2# pwd /home/zxcdn/ottcache/tomcat bash-4.2# uname -a Linux 3516b6c97679 -. ...
- Docker镜像的获取和推送
查找镜像 查找镜像的方法有主要有两种,一种是在Docker Hub官方网站查找,网址为https://hub.docker.com/ 另一种方法是在命令行界面中通过docker serach < ...
- Docker镜像操作命令
一.使用Docker镜像 1. 获取镜像 可以使用docker pull命令直接从Docker Hub镜像源来下载镜像.该命令的格式为docker pull NAME[:TAG].其中,NAME是镜像 ...
- docker镜像基本操作一
获取镜像 首先说明一下如何从Docker hub中获取高质量的镜像,从Docker镜像库获取镜像的命令是docker pull .其命令格式为: docker pull [选项] [Docker Re ...
- docker镜像使用和总结
一.Docker镜像是什么? 操作系统分为内核和用户空间.在Linux中,内核启动后会挂载 root 文件系统为其提供用户空间支持. docker镜像就相当于一个 root文件系统.比如:官方镜像ub ...
- 二、docker 镜像容器常用操作(让我们用docker 溜得飞起)
前言 上篇讲了我们如何安装docker,现在该我们一展拳脚的时候了.接下来让我们一起学习一下docker常见的操作,让我们能够会使用 docker. 基本概念 在讲使用之前,还是先将一下docker ...
- Docker 镜像的操作
1. 从docker 镜像仓库获取镜像 docker pull [镜像名] 从 docker hub 中查看版本 获取 特定版本 docker pull centos 7.6.1801 2. ...
随机推荐
- meta标签的用法
meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和 ...
- [ZT] 酒店大洗脑:最全各大国际酒店集团族谱图
原文地址: http://www.licai.com/yuedu/201411-62884.html 如果你对各大耳熟能详的国际酒店管理集团还有什么问题,相信今天和你分享的各大酒店集团家族系谱图和最全 ...
- [转]asp.net mvc 从数据库中读取图片
本文转自:http://www.cnblogs.com/mayt/archive/2010/05/20/1740358.html 首先是创建一个类,继承于ActionResult,记住要引用Syste ...
- 【贴图】网友 snoopy 用《iHMI43 液晶模块》做的界面给大家看看
请大家欣赏! iHMI43 4.3寸液晶模块购买地址: http://item.taobao.com/item.htm?id=20508376359
- ul li横向排列及圆点处理
如何用CSS制作横向菜单 让ul li横向排列及圆点处理 第一步:建立一个无序列表 我们先建立一个无序列表,来建立菜单的结构.代码是:<ul> <li><a href ...
- VC++6.0 显示行号
通过VC6LineNumberAddin能够解决这个问题,方法如下. 一.下载该文件. 网上很多免费的. 二.使用方法: [1]:打开VC++6.0,点击菜单“工具(Tools) ...
- A VNC server is already running as :1
root@host:~# rm -f /tmp/.X1-lock root@host:~# rm -f /tmp/.X11-unix/X1 root@host:~# vncserver -geomet ...
- css修改,类似elememt.style样式修改
使用!important 语法优先权. .yui-b { margin-left:0px ! important; }
- 20145235李涛 《Java程序设计》第3周学习总结
类与对象 定义类 类是对象的“设计图”,对象是类的实际类型.另外,定义时用class,建实例用new. 通过书上的代码才有所理解: class Clothes { String color; char ...
- ubuntu中一些配置文件含义
/var/log/apache2/mod_jk.log apache2 mod_jk错误日志错误 /conf/server.xml ...