前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker容器技术系列三:docker镜像

docker容器技术系列三:docker镜像

作者头像
小小科
发布2018-05-04 15:25:42
1.2K0
发布2018-05-04 15:25:42
举报
文章被收录于专栏:北京马哥教育北京马哥教育

本系列教程由旺旺知识库授权进行发布 前面基本概念部分我们已经介绍了docker镜像就是一个只读模板,可以从镜像启动一个容器实例。我们也发现,在启动容器的过程中,如果镜像不存在,docker会自动从默认镜像仓库(默认为官方Docker Hub)下载相应的镜像,然后再启动容器。

现在我们来探讨更多镜像的操作

1、列出本地已有的镜像

代码语言:javascript
复制
[root@localhost ~]# docker images


REPOSITORY   TAG         IMAGE ID      CREATED         VIRTUAL SIZE
centos       latest      ce20c473cd8a  2 weeks ago     172.3 MB

2、从默认镜像仓库搜索镜像

代码语言:javascript
复制
[root@localhost ~]# docker  search redis
  • *说明:没有/分隔前缀的,表示官方镜像,我们尽量选择官方镜像或者下载量较高的镜像使用。

3、下载镜像到本地

代码语言:javascript
复制
[root@localhost ~]# docker  pull redis
  • 下载过程如下图:
  • 下载过程要耐心等待,因为从国外的服务器下载,速度是很慢的,好在我们仅需下载几个基本镜像即可,后期均可通过这些基本镜像仅需修改,修改我们所需的即可。
  • 下载完成后,查看如下:
代码语言:javascript
复制
[root@localhost ~]# docker images

REPOSITORY  TAG         IMAGE ID        CREATED      VIRTUAL SIZE
redis       latest      c08dd1f8fad9    12 days ago  109.2 MB
centos      latest      ce20c473cd8a    2 weeks ago  172.3 MB
  • *注:也可以会看到新增了3个镜像,实际上这三个镜像都是对应的一个(注意看image ID),这是镜像的tag,类似软连接。下一条将讲解。

4、给镜像添加tag

  • tag的作用主要有两点:一是为镜像起一个容易理解的名字,二是可以通过docker tag来重新指定镜像的仓库,这样在push时自动提交到仓库。
  • 如上图,通过docker images命令,我们可以看到一个镜像有如下几个关键信息:
代码语言:javascript
复制
REPOSITORY :包含仓库信息,如docker.io/redis ,表示docker.io仓库的redis名称镜像。

TAG:同一个名称的镜像可能有多个版本,默认为latest版本(最新版),TAG就标明了版本

IMAGE ID :镜像唯一ID
  • 因此可以通过两个方法确定某个唯一的镜像:
代码语言:javascript
复制
1、REPOSITORY:TAG :如docker.io/centos:6.62、IMAGE ID : 如12c9d795d85a

*注意:如果直接使用“REPOSITORY”,则默认“TAG”为“latest”,如镜像redis就标识“redis:latest”
  • 镜像的名称“REPOSITORY:TAG ”可以用下面的命令重命名:
  • 将同一IMAGE_ID的所有tag,合并为一个新的
代码语言:javascript
复制
# docker tag 195eb90b5349 seanlook/ubuntu:rm_test
  • 新建一个tag,保留旧的那条记录
代码语言:javascript
复制
# docker tag Registry/Repos:Tag New_Registry/New_Repos:New_Tag

5、将容器的修改提交到镜像

  • 在上一步中,如果已经为镜像tag指定了仓库信息,这可以使用下面命令提交镜像到仓库中:
  • 如下是提交已经镜像到一个私有仓库,私有仓库的搭建参考后文
代码语言:javascript
复制
# docker push  192.168.1.200:5000/centos:6.6

6、存出或载入镜像

  • 保存镜像为tar文件:
  • 如果要导出镜像到本地文件,可以使用docker save命令。
代码语言:javascript
复制
# docker save -o redis.tar redis
  • 载入镜像:
  • 可以使用docker load从导出的本地文件中再导入到本地镜像库,例如
代码语言:javascript
复制
# docker load --input redis.tar
或
# docker load < redis.tar
  • 这将导入镜像以及其相关的元数据信息(包括标签等)。
  • *注:通过存出和载入镜像,可以在没有搭建私有仓库的情况下,快速在不同主机之间拷贝镜像。

7、删除镜像

  • 如果要移除本地的镜像,可以使用docker rmi命令。
代码语言:javascript
复制
# docker rmi redisUntagged: redis:latest
Deleted: c08dd1f8fad9ff2622a1b5d74650a8e494ee380b74030e21584fea05079c2818
Deleted: 1749db59d6f291dc5b9b76610f33a15421170b711a07e0e4a835edb43c2d52f1
Deleted: e1c16660ac6110b9defa97ec9883e85f680459a951bd3c9aa9a02a4aa81034e7
Deleted: 134e55bc9c437b5a822885b879d34dc7f0bb189406ff6bfe33889e56e75fd7ba
Deleted: 3968e93424409ba4c7ebfb73dc8ca8b20ac1c1f622ea0ce1753efe6e57f5bb5e
Deleted: 57f1a903e59a508e0690c226b8e3016a125d98c2e42f9fc03efe871b85e35052
`
  • *注意:
  • 1)在删除镜像之前要先用 docker rm 删掉依赖于这个镜像的所有容器。
  • 2)docker rm命令是移除容器。

8、镜像的原理

  • Docker 镜像是怎么实现增量的修改和维护的? 每个镜像都由很多层次构成,Docker 使用 Union FS 将这些不同的层结合到一个镜像中去。

通常 Union FS 有两个用途, 一方面可以实现不借助 LVM、RAID 将多个 disk 挂到同一个目录下,另一个更常用的就是将一个只读的分支和一个可写的分支联合在一起,Live CD 正是基于此方法可以允许在镜像不变的基础上允许用户在其上进行一些写操作。 Docker 在 AUFS 上构建的容器也是利用了类似的原理。

关于马哥linux运维

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马哥Linux运维 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 现在我们来探讨更多镜像的操作
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档