导读 作为Docker三大核心概念之一,Docker镜像(Docker Image)是一个面向Docker引擎的只读模板,包含文件系统。实际上每个Docker镜像包含一个独立的运行环境,如一个镜像包含centos操作系统环境,我们称之为一个centos镜像。

Docker运行一个容器实例之前,可以以一个镜像为基础环境,如以一个包含centos操作系统的Docker镜像为模板。建立容器之前,Docker会检查本地是否存在对应的镜像,如果镜像不存在本地,Docker会尝试从默认的镜像仓库(Repository,通常默认为Docker Hub公共注册服务器中的仓库,用户可以根据具体环境和需求配置自定义镜像仓库)。

下面将介绍关于镜像的相关操作及命令。

查看镜像信息
查看本地镜像列表

docker images命令可以查看本地主机已有的镜像列表,具体查询属性包括来源仓库,标签,ID,创建时间和镜像大小等。

查看镜像具体的信息

dpcler inspect ID可以获取镜像 的详细信息,执行后得到一个JSON格式的消息,如果仅仅需要查询镜像的某一项信息,可以使用-f参数来指定。例如,获取镜像的Author信息:

$sudo docker inspect -f {{".Author"}} [IMAGE_ID]
给镜像添加一个自定义标签

docker tag可以给镜像指定自定义(一般情况下用于语义化)的标签,实际上就是给某个镜像添加一个“快捷方式”。

搜寻镜像

docker search命令可以搜索远程镜像仓库内公共共享和私有的镜像,默认为Docker Hub官方镜像仓库,用法为docker search TERM.

通过搜索命令可以查询到镜像的名字、描述、star数量、是否官方创建、是否自动创建等信息。

获取镜像

docker pull命令可以从网络上下载镜像到本地。命令格式为docker pull NAME[:TAG](如果不显式地指定TAG,默认会选择lastest标签)。

当然,如果需要从非默认的镜像仓库下载镜像,也可以通过docker pull URL进行镜像的下载。当然,前提这个URL指向的是有效的远程镜像。

删除镜像

docker rmi命令用于删除本地的镜像,用法为docker rmi IMAGE[IMAGES...],其中IMAGE可以为标签或镜像ID。前面我们提及到标签事实上是“快捷方式”,因此通过标签删除镜像时,会先删除这个“快捷方式”,当某个镜像只剩下一个标签时,通过删除该标签才会把镜像从本地移除掉。

如果你的镜像还有正在运行中的容器实例的话,通过docker rmi是无法移除掉的,当然,你可以通过-f参数强制删除某个镜像,但这往往是不安全的。正确的做法是通过docker rm CONTAINER移除对应的容器,再通过docker rmi进行镜像的删除。

创建镜像

一般情况下,我们可以通过三种途径进行Docker镜像的创建:基于已有镜像的容器的创建,本地模板导入、Dockerfile创建。

基于已有镜像的容器创建镜像

该方法主要依赖于docker commit命令,用法为docker commit [OPTIONS] [RESPOSITORY[:TAG]],主要选项包括:

参数 option 说明
-a –author=”” 作者信息
-m –message=”” 提交信息
-p –pause=true 提交时暂停容器运行

通过docker ps命令获取需要创建镜像的容器ID,通过执行:

$sudo docker commit -m "[MESSAGE]" -a "[AUTHOR]" [CONTAINER_ID] [IMAGE_NAME]
本地模板导入镜像

docker import可以从一个 打包好的镜像文件创建镜像,一般情况下表现为.tar.gz压缩包。例如,导入一个ubuntu操作系统的镜像到本地:

$sudo cat ubuntu-15.04-x86_64.tar.gz | docker import - ubuntu:15.04
Dockerfile创建镜像

Dockerfile是一个文本格式的配置文件,实际表现为命令集合,用户通过自定义批处理命令来快速创建自定义镜像。Dockerfile通常包含四部分:基础镜像信息,维护者信息,镜像操作指令和容器启动时指令。 编辑完Dockerfile文件后,通过docker build命令创建镜像,例如:

$sudo docker build -t [TAG_NAME] [DOCKERFILE_PATH]
存出和载入镜像
存出镜像:docker save
$sudo docker save -o ubuntu-15.04-x86_64.tar ubuntu:15.04
载入镜像:docker load
$sudo docker load --input ubuntu-15.04-x86_64.tar
# 或者
$sudo docker load < ubuntu-15.04-x86_64.tar
上传镜像

docker push命令可以将镜像上传到远程仓库(默认为DockerHub官方仓库,需要注册账号)。用法为:docker push NAME[:TAG],强烈建议添加好语义化的标签名后上传。

小结

镜像是开启Docker容器的前提,掌握镜像的概念以及对应的查看、获取、搜索、删除、创建、导入导出、上传等操作对于Docker的入门学习有莫大的帮助。我们还可以借助Docker Hub等镜像仓库还提供的更全面的镜像服务进行学习和使用,例如web查询系统 (http://index.docker.io/) 等,同时我们也可以将日常使用的高质量的镜像资源分享到开源社区共同学习。

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:https://www.linuxprobe.com/

Docker大行其道—镜像的更多相关文章

  1. Docker:镜像操作和容器操作

    镜像操作 列出镜像: $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hello-world latest 0a6b ...

  2. Docker的镜像

    镜像是容器的运行基础,容器是镜像运行后台的形态 镜像的概念 镜像是一个包含程序运行必要依赖环境和代码的只读文件,它采用分层的文件系统,将每一次改变以读写层的形式增加到原来的只读文件上 镜像的系统结构 ...

  3. Docker - Docker国内镜像的配置及使用

    Docker国内镜像 DaoCloud - Docker加速器 阿里云 - 开发者平台 微镜像 - 希云cSphere 镜像广场 - 时速云 灵雀云 网易蜂巢 阿里云的Docker加速器 阿里云 - ...

  4. Docker image 镜像介绍

    操作镜像 使用 docker 命令行操作 docker 镜像 获取镜像 使用「docker pull +镜像名称」从网络上下载image镜像 core@localhost ~ $ docker pul ...

  5. Docker - 定制镜像

    Dockerfile Docker Hub拥有大量高质的官方镜像:可直接使用的服务类镜像.语言应用镜像.基础操作系统镜像等,满足绝大部分需求. 此外,可以通过定制镜像的方式来满足实际使用中的特定需求. ...

  6. 从零开始构建docker基础镜像

    段子 今年基本已经结束了,我问了很多朋友今年挣钱了没?大多朋友都有挣,而且挣得五花八门:有挣个屁的,有挣个锤子的,有挣个毛的,更有甚者挣个妹的,奢侈之极!最恐怖的是挣个鬼的!有的还可以,挣个球,下午我 ...

  7. Docker 基础 : 镜像

    目录 获取镜像 查看镜像信息 搜索镜像 删除镜像 创建镜像 导出和导入镜像 上传镜像 总结 镜像是 Docker 的三大核心概念之一.Docker 运行容器前需要本地存在对应的镜像,如果本地没有对应的 ...

  8. 微服务架构 - 搭建docker本地镜像仓库并提供权限校验及UI界面

    搭建docker本地镜像仓库并提供权限校验及UI界面 docker本地镜像仓库的作用跟maven私服差不多,特别是公司级或者是小组级开发好的docker仓库可以上传到本地镜像仓库中,需要用时,直接从本 ...

  9. 使用Nexus3构建Docker私有镜像仓库

    一.安装Nexus3 Nexus3是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并 ...

随机推荐

  1. 使用Sunny-grok实现内网转发

    Sunny-grok 申请地址:http://www.ngrok.cc ngrok.cfg配置: server_addr: "server.ngrok.cc:4443" auth_ ...

  2. cc.RepeatForever和cc.Spawn冲突

    正确 var tmpShip3 = cc.Sprite.createWithSpriteFrameName("w1_1.png"); tmpShip3.setPosition(,) ...

  3. C_functions

    1.C常用函数分为如下几大类!! 1,字符测试函数. 2,字符串操作 3,内存管理函数 4,日期与时间函数 5,数学函数 6,文件操作函数 7,进程管理函数 8,文件权限控制 9,信号处理 10,接口 ...

  4. 第三百二十六天 how can I 坚持

    今天元宵节啊,晚上去蓝色港湾看了看灯光节,快冻死了,人倒是挺多. 其他没啥了. 还有晚上吃了几个元宵. 好像冻感冒了,有点头晕. 睡觉.

  5. 第二百零二天 how can I 坚持

    最近增肥好明显,胃口好没办法,只要肚子起不来就行了.加油. 其实挺幸福,想吃啥吃啥. 鱼会不会被冻死,买了加热棒不想用,该咋办呢. 股市又跌没了一千多,还是不够睿智,不够淡定. 人活这一辈子,到底最想 ...

  6. SKAction

    [SKAction] 1.Every action is an opaque object that describes a change you want to make to the scene. ...

  7. c#动态加载dll文件

    1.在写一个记录日志到文件中的类库(生成dll文件copy到一个目录中去,然后在主函数的appconfig中去配置. using System; using System.Collections.Ge ...

  8. UVa 297 - Quadtrees

    题目:利用四叉树处理图片,给你两张黑白图片的四叉树,问两张图片叠加后黑色的面积. 分析:搜索.数据结构.把图片分成1024块1*1的小正方形,建立一位数组记录对应小正方形的颜色. 利用递归根据字符串, ...

  9. hdu 5407

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5407 题意:给定一个数n,求LCM(C(n,0),C(n,1),C(n,2)...,C(n,n)) 根 ...

  10. installshield 注册dll

    function OnFirstUIAfter() STRING szTitle, szMsg1, szMsg2, szOpt1, szOpt2; NUMBER bOpt1, bOpt2; begin ...