《Docker进阶与实战》——3.2节使用Docker image
本节书摘来自华章社区《Docker进阶与实战》一书中的第3章,第3.2节使用Docker image,作者华为Docker实践小组,更多章节内容可以访问云栖社区“华章社区”公众号查看
3.2 使用Docker image
Docker内嵌了一系列命令制作、管理、上传和下载镜像。可以调用REST API给Docker daemon发送相关命令,也可以使用client端提供的CLI命令完成操作。本书的第7章会详细阐述Docker REST API的细节,本节则主要根据功能对涉及image的命令进行说明。下面就从Docker image的生命周期角度说明Docker image的相关使用方法。
3.2.1 列出本机的镜像
下面的命令可以列出本地存储中镜像,也可以查看这些镜像的基本信息。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
ubuntu 14.04.2 2103b00b3fdf 5 months ago 188.3 MB
ubuntu latest 2103b00b3fdf 5 months ago 188.3 MB
ubuntu trusty 2103b00b3fdf 5 months ago 188.3 MB
ubuntu trusty-20150228.11 2103b00b3fdf 5 months ago 188.3 MB
ubuntu 14.04 2d24f826cb16 5 months ago 188.3 MB
busybox buildroot-2014.02 4986bf8c1536 7 months ago 2.43 MB
busybox latest 4986bf8c1536 7 months ago 2.43 MB
此外,通过--help参数还可以查询docker images的详细用法,如下:
$ docker images --helpUsage: docker images [OPTIONS] [REPOSITORY]List images-a, --all=false Show all images (default hides intermediate images)--digests=false Show digests-f, --filter=[] Filter output based on conditions provided--help=false Print usage--no-trunc=false Don't truncate output-q, --quiet=false Only show numeric IDs
其中,--filter用于过滤docker images的结果,过滤器采用key=value的这种形式。目前支持的过滤器为dangling和label。 --filter "dangling=true"会显示所有“悬挂”镜像。“悬挂”镜像没有对应的名称和tag,并且其最上层不会被任何镜像所依赖。docker commit在一些情况下会产生这种“悬挂”镜像。下面第一条命令产生了一个“悬挂”镜像,第二条命令则根据其特点过滤出该镜像了。图3-2中的d08407d841f3就是这种镜像。
$ docker commit 0d6cbf57f660
$ docker images --filter "dangling=true"
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> d08407d841f3 3 hours ago 2.43 MB
在上面的命令中,--no-trunc参数可以列出完整长度的Image ID。若添加参数-q则会只输出Image ID,该参数在管道命令中很有用处。一般来说悬挂镜像并不总是我们所需要的,并且会浪费磁盘空间。可以使用如下管道命令删除所有的“悬挂”镜像。
$ docker images --filter "dangling=true" -q | xargs docker rmi
Deleted: 8a39aa048fe3f2e319651b206073b2a2e437dcf85c15fedb6f437cfe86105145
这里的--digests比较特别,这个参数是伴随着新版本的Docker Registry V2(即Distribution)产生的,在本书接下来的第4章会详细说明。
按照Docker官方路标和最近的动作,Docker只会保留最核心的image相关命令和功能,因此那些非核心功能就会被删除。比如--tree和--dot已经从Docker 1.7中删掉。官方推荐使用dockerviz工具分析Docker image。执行以下命令,可以图形化地展示Docker image的层次关系。
dockviz images -d | dot -Tpng -o images.png
执行结果如图3-2所示,可以看到,同一个仓库中的镜像并不一定要有特别的关系,比如ubuntu: 14.04和ubuntu:14.04.2之间就没有共享任何层。
3.2.2 Build:创建一个镜像
创建镜像是一个很常用的功能,既可以从无到有地创建镜像,也可以以现有的镜像为基础进行增量开发,还可以把容器保存为镜像。下面就详细介绍这些方法。
1.直接下载镜像
我们可以从镜像仓库下载一个镜像,比如,以下为下载busybox镜像的示例。
$ docker pull busybox
Using default tag: latest
Pulling repository docker.io/library/busybox
8c2e06607696: Download complete
cf2616975b4a: Download complete
6ce2e90b0bc7: Download complete
Status: Downloaded newer image for busybox:latest
具体使用镜像仓库的方法,本书会在后续章节详细描述,这里暂不做说明。
2.导入镜像
还可以导入一个镜像,对此,Docker提供了两个可用的命令docker import和docker load。docker load一般只用于导入由docker save导出的镜像,导入后的镜像跟原镜像完全一样,包括拥有相同的镜像ID和分层等内容。下面的第一行命令可以导出busybox为busybox.tar,第二条命令则是导入该镜像:
$ docker save -o busybox.tar busybox
$ docker load -i busybox.tar
不同于docker load,docker import不能用于导入标准的Docker镜像,而是用于导入包含根文件系统的归档,并将之变成Docker镜像。
3.制作新的镜像
前面说过,docker import用于导入包含根文件系统的归档,并将之变成Docker镜像。因此,docker import常用来制作Docker基础镜像,如Ubuntu等镜像。与此相对,docker export则是把一个镜像导出为根文件系统的归档。
提
示 读者可以使用Debian提供的Debootstrap制作Debian或Ubuntu的Base image,可以在Docker官网找到教程。
Docker提供的docker commit命令可以增量地生成一个镜像,该命令可把容器保存为一个镜像,还能注明作者信息和镜像名称,这与git commit类似。当镜像名称为空时,就会形成“悬挂”镜像。当然,使用这种方式每新增加一层都需要数个步骤(比如,启动容器、修改、保存修改等),所以效率是比较低的,因此这种方式适合正式制作镜像前的尝试。当最终确定制作的步骤后,可以使用docker build 命令,通过Dockerfile文件生成镜像。
3.2.3 Ship:传输一个镜像
镜像传输是连接开发和部署的桥梁。可以使用Docker镜像仓库做中转传输,还可以使用docker export/docker save生成的tar包来实现,或者使用Docker镜像的模板文件Dockerfile做间接传输。目前托管在Github等网站上的项目,已经越来越多地包含有Dockerfile文件;同时Docker官方镜像仓库使用了github.com的webhook功能,若代码被修改就会触发流程自动重新制作镜像。
3.2.4 Run:以image为模板启动一个容器
启动容器时,可以使用docker run命令,该命令在相关章节会详细描述,本节不做深入说明。
图3-3总结了上文提到的Docker镜像生命周期管理的相关命令。现阶段Docker镜像相关的命令存在一些问题,包括:
命令间逻辑不一致,比如列出容器使用的是docker ps,列出镜像使用的是docker images。
混用命令导致命令语义不清晰,比如查看容器和镜像详细信息的命令都是 docker inspect。
所以基于这些考虑,Docker项目的路标中提到会把相关命令归类,并使用二级命令来管理。因此读者可以着重学习命令的用法和其实现的功能,不用过分关心命令的形式。
《Docker进阶与实战》——3.2节使用Docker image相关推荐
- 《Docker进阶与实战》——3.3节Docker image的组织结构
<Docker进阶与实战>--3.3节Docker image的组织结构 华章计算机 2017-05-02 1191浏览量 简介: 本节书摘来自华章社区<Docker进阶与实战> ...
- 《 Docker 进阶与实战 》 读书笔记
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 以下内容全文出自书目:< Docker 进阶与实战 > 1. Docker 定义:一个开 ...
- Docker进阶学习实战:Swarm集群弹性创建服务
docker-compose up 单机是启动一个项目. 集群就可以用到swarm 会有对应的docker-service 这里就要用到docker service 命令. [root@iZ0jl6r ...
- docker 安装mysql 实战文档_在docker上安装运行mysql实例
ps:实验环境是:CentOS Linux release 7.3 64位 1.获取mysql镜像 从docker hub的仓库中拉取mysql镜像 docker pull mysql 查看镜像 d ...
- docker portainer_「实战篇」开源项目docker化运维部署-Portainer管理集群部署(十)...
之前都是通过命令的方式,管理docker的,其实docker还是有图形界面的.使用图形界面如何管理docker,其实业界很多公司都对docker进行了图形化的封装.之前在初级和中级的时候也有界面mar ...
- 「实战篇」开源项目docker化运维部署-后端java部署(七)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「实战篇」开源项目docker化运维部署-后端java部署(七) 本节主要说说后端的部署需要注意的点,本身renren-fas ...
- OpenCV入门到进阶:实战三大典型项目(更新至12) IT自学视频教程
OpenCV入门到进阶:实战三大典型项目(更新至12) IT自学视频教程 vip视频教程人脸识别.自动驾驶.物体检测--想进军未来高科技行业,OpenCV是基石.本课程带你系统掌握计算机视觉核心知识体 ...
- 电商项目实战第四节: CSS3+HTML5+JS 设计案例【考拉海购网站】之【轮播图特效】
上一节:电商项目实战第三节: CSS3+HTML5+JS 设计案例[考拉海购网站]之[分类导航栏] 文章目录 [考拉海购网站]之[轮播图特效] 第一步,根据页面布局写相应的html标签 index.h ...
- MongoDB+集成SpringBoot+索引+并发优化 - 基于《MongoDB进阶与实战:唐卓章》
文章目录 MongoDB - 基于<MongoDB进阶与实战:唐卓章> 一.首次安装 服务安装 配置文件修改 可视化工具 Docker部署 二.基本使用 2.1 概念解析 2.2 Mong ...
最新文章
- 经典面试题:ES如何做到亿级数据查询毫秒级返回?
- Linux/Unix shell 监控Oracle告警日志(monitor alter log file)
- Juniper SRX340防火墙恢复出厂设置
- 【项目】uniapp前端接收后端springboot数据并渲染到界面+使用swiper和uView
- 基础-快速排序(基本)
- PHP 入门 - 5.数组
- PTA -- A1046 Shortest Distance
- Python MySQL入门连接
- RuntimeError: ./xxx.pth is a zip archive (did you mean to use torch.jit.load()?)
- Python图形用户界面和游戏开发
- ocx找不到指定模块
- 运营MM又来求我发软文了......
- KT148A语音芯片ic的硬件设计注意事项
- 一键解锁,宿舍管理隐藏技能
- Google Maps基站定位
- varargin、varargout、nargin和nargout的使用方法
- 懒猴子CG数据模型配置2分钟教程
- ATM取款机小程序——Java
- matlab基础与应用——常用命令整理
- 已解决:U盘插在自己电脑上读不出来,但在别人电脑上可以显示。
热门文章
- linux中sed的基本用法,linux sed用法
- python学习详解_深入解析Python小白学习【操作列表】
- 【CV实战】年轻人的第一个GAN项目应该是什么样的(Pytorch框架)?
- 【直播】今晚(7月1日)京东直播,如何学会深度学习模型设计和优化
- 【学习求职必备】百度AI和它的7大AI黑科技
- 戛古 Kakku, Kekku-掸邦 shan state
- 【转】使用TCP协议连续传输大量数据时,是否会丢包,应如何避免?
- 回顾2011年最热门的开源PHP项目
- 单例模式的几种实现方式
- 【转】分布式一致性算法:Raft 算法(Raft 论文翻译)