3.docker镜像管理基础
一、docker镜像相关
1、About Docker Image
Docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器。
采用分层构建机制,最底层为bootfs,其之为rootfs.
- bootfs:用于系统引导的文件系统,包括BootLoader和Kernel,容器启动完成后会被卸载以节约内存资源;
- rootfs:位于bootfs之上,表现为docker容器的根文件系统。
- 传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后重新挂载为读写模式;
- Docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载”技术额外挂载一个“可写”层。

2、Docker Image Layer
- 位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image)
- 最上层为“可读写”层,其下的均为“只读”层。
容器启动时,必须按照层次加载,首先挂载bootfs,系统启动之后,从内存中删除bootfs,挂载rootfs,其次依次挂载上面的image层,每个应用都是一个层,这下面的所有层都是只读的。而后,在最上层挂载一个可写层。(对于一个容器来说,它的写操作都只能在这个可写层来实现)。他们是叠加在一起挂载的,所以称之为联合挂载。当一个容器销毁时(执行docker container rm操作)它的可写层也将被删除掉。

3、docker文件系统
- docker镜像的分层构建,联合挂载依赖于专有文件系统的支撑才能实现,在早期用到的专有文件系统是aufs(advanced multi-layered unification filesystem):高级多层统一文件系统,aufs是最早被docker用来实现联合挂载的linux文件系统,它是UnionFS的重新实现,2006年由junjiro Okajima开发。由于centos内核对aufs不支持,所以早期使用docker只能使用Ubuntu操作系统。
- aufs的竞争产品是overlayfs,从3.18版本开始被合并到linux内核
- 除了aufs,docker还支持btrfs,devicemapper和vfs等
- 在Ubuntu系统下,docker默认使用aufs;而早期在centos7中,用的是devicemapper,现在最新版本的docker centos用的是overlayfs第二个版本 - overlay2(overlay2是一种抽象的二级文件系统,需要借助于本地文件系统xfs)。
二、Docker Registry
1、Registry分类
Sponsor Registry:第三方的Registry,供客户和Docker社区使用
Mirror Registry:第三方的Registry,只让客户使用。比如docker cn加速,阿里云的docker加速器;
Vendor Registry:由发布Docker镜像的供应商提供的registry,比如红帽,只提供给买了服务了客户使用;
Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry,自己搭建的,只能自己内部使用
由于第三方registry的镜像大部分都不符合我们的使用要求,所以我们都要自建registry。
2、Repository
Repository:
由某特定的docker镜像的所有迭代版本组成的镜像仓库;
一个Registry中可以存在多个Repository
Repository可分为“顶层仓库”和“用户仓库”
用户仓库名称格式为“用户名/仓库名”
每个仓库可以包含多个Tag,每个Tag对应一个镜像。
Index:
维护用户账户,镜像的校验以及公共命名空间的信息
相当于为Registry提供了一个完成用户认证等功能的检索接口
三、image的相关操作
1、镜像的拉取
docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
docker pull nginx:1.14 #没有指仓库地址默认从docker hub上下载nginx1.14版本到本地
docker pull quay.io/coreos/flannel:v0.10.0-amd64 #从quay上拉取镜像,coreos是namespace,flannel是仓库名,v0.10.0-amd64是tag
其中registry、port、namespace可省略
registry:是一个仓库的web地址,如果不使用默认的docker hub仓库,需要指明仓库地址。
port:是仓库web地址的端口号,默认使用443。’
namespace:代表是哪个用户的仓库,如果镜像是顶级仓库,namespace就是可省略的;namespace可能是organization,user(login name),role这三类。
name:仓库的名字,和tag一起标识了一个唯一的镜像。
tag:镜像的标签,没有就是latest。
2、镜像的制作 – 基于容器
镜像的生成途径:Dockerfile、基于容器制作、Docker Hub automated build
[root@oracle ~]# docker container run --name busybox -it busybox:latest /bin/sh
/ # mkdir /data/html/ -p
/ # echo "<h1>busybox http index html</h1>" >> /data/html/index.html
/ #
[root@oracle ~]# docker container commit -p busybox
[root@oracle ~]# docker container commit -p busybox magedu.com/httpd:v0.-

[root@oracle ~]# docker tag e729820ed9ff magedu.com/httpd:v0.-

[root@oracle ~]# docker tag magedu.com/httpd:v0.- magedu.com/httpd:latest

[root@oracle ~]# docker image rm magedu.com/httpd:latest

Tips:当一个镜像存在多个标签时,删除该镜像时,只是删除该镜像对该标签的引用,不会真正的删除镜像。
修改容器启动执行的命令并制作镜像
[root@oracle ~]# docker run --name httpd1 -it magedu.com/httpd:v0.-
[root@oracle ~]# docker commit -p -a "cmxu <xcm_1740@163.com>" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' httpd1 cmxu/httpd:v0.-

[root@oracle ~]# docker run --name myhttpd -d cmxu/httpd:v0.-
[root@oracle ~]# docker inspect 7608c2c4ca3d16 | grep IPAddress
[root@oracle ~]# curl 172.17.0.6

推送镜像到镜像仓库:
[root@oracle ~]# docker login --help
[root@oracle ~]# docker image push –help
[root@oracle ~]# docker logout
# 例,使用阿里云作为镜像仓库。 https://cr.console.aliyun.com/cn-hangzhou/instances/repositories
[root@oracle ~]# docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
[root@oracle ~]# docker tag 5c08e422f2cd registry.cn-hangzhou.aliyuncs.com/cmxu/httpd:v0.-
[root@oracle ~]# docker image push registry.cn-hangzhou.aliyuncs.com/cmxu/httpd:v0.-

3、镜像的导入导出
[root@oracle ~]# docker save –help
[root@oracle ~]# docker load --help
eg:
[root@oracle ~]# docker save -o images.gz cmxu/httpd:v0.- magedu.com/httpd:v0.- #在当前目录生成images.gz文件
[root@oracle ~]# docker load -i images.gz
3.docker镜像管理基础的更多相关文章
- Docker镜像管理基础篇
Docker镜像管理基础篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Docker Images Docker镜像还有启动容器所需要的文件系统及其内容,因此,其用于创建并启 ...
- Docker 学习3 Docker镜像管理基础
一.docker 常用操作及原理 1.docker 常用操作 2.docker 机制 1.docker client端是通过http或者https与server端通信的.个 2.docker 镜像可以 ...
- Docker镜像管理基础与基于容器的镜像制作示例
一.Docker镜像 Docker镜像是启动Docker容器的一个非常重要的组件.Docker各组件之间的关系如图: Docker镜像含有启动容器所需要的文件系统及其内容,因此Docker镜像用于创建 ...
- 3、Docker镜像管理基础
Docker image # docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis -alpine 23d561d12e92 d ...
- docker镜像管理基础
[root@node01 ~]# docker pull quay.io/coreos/flannel:v0.10.0-amd64 v0.10.0-amd64: Pulling from coreos ...
- 2、docker镜像管理
Docker镜像管理 镜像是Docker容器的基础,想运行一个Docker容器就需要有镜像.我们上面已经学会了使用search搜索镜像.那么这个镜像是怎么创建的呢? 创建镜像 镜像的创建有以下几种方法 ...
- Docker学习第一天(Docker入门&&Docker镜像管理)
简介 今天小区的超市买零食老板给我说再过几天可能就卖完了我有点诧异,老板又说厂家不生产了emmm 今天总算开始docker了! 1.Docker? 1.什么是Docker Docker 是一个开源的应 ...
- Devops(四):Docker 镜像管理
参考 <Docker中上传镜像到docker hub中> <Docker 镜像管理> <通过容器提交镜像(docker commit)以及推送镜像(docker push ...
- 三、docker镜像管理
一.docker镜像管理 1.1.镜像搜索-search 从docker镜像仓库模糊搜索镜像 用法: docker search 镜像关键字 [root@zutuanxue ~]# docker se ...
随机推荐
- JWT原理和使用
jwt JSON Web Tokens,是一种开发的行业标准RFC 7519,用于安全的表示双方之间的声明.目前,jwt广泛的用在系统的用户认证方面,特别是前后端分离项目. 1.jwt认证流程 在项目 ...
- 03.大型数据库应用技术课堂测试3(java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V)
本次问题主要出在了之前没有安装hive,结构导致大部分时间花在了安装上面,主要一直报错,网上找不到相关教程.
- java.io.FileNotFoundException: /usr/local/hadoop/logs/fairscheduler-statedump.log(权限不够)解决方案
问题描述:Linux虚拟机内使用hadoop 解决方案: $ su 密码:****** # chown hadoop 文件名 进入超级管理员,为hadoop用户分配该文件的权限. 完美解决:
- ERROR 1045 (28000): Access denied for user 'xxx'@'localhost' (using password: YES)
# Bug描述 今天周末,在家里学点新技术,虽然公司分配的任务没有完成(滑稽滑稽) 我先创建了一个mysql数据库,用root用户创建一个新用户,毕竟项目中使用root是非常危险的,尤其是我这样的实 ...
- Sql 把Xml字符串转换成一张表
分享一个Sql技巧,把xml字符串转换成一个表格 DECLARE @IdHandel INT EXEC sp_xml_preparedocument @IdHandel OUTPUT, @Bar_Ip ...
- 《React+Redux前端开发实战》笔记1:不涉及React项目构建的Hello World案例
本小节实现一个不涉及项目构建的Hello World. [React的第一个Hello World网页] 源码地址:https://jsfiddle.net/allan91/2h1sf0ky/8/ & ...
- C#方法名前的方括号
1.序列化:[Serializable]public void 方法名(){...} 2.WebServices方法:[WebMethod]public void 方法名(){...} 3.Ajax( ...
- MySQL数据库的连接池问题
3. sqlalchemy设置连接池数量上限设置 SQLALCHEMY_POOL_SIZE = 100 SQLALCHEMY_MAX_OVERFLOW = 0 # 超出连接池数量的连接后,最多可以连接 ...
- mysql数据库负载均衡高可用之主从、主主备份,实时同步
一:MySQL Replication 什么是MySQL Replication Replication可以实现将数据从一台数据库服务器(master)复制到一或多台数据库服务器(slave) 默认情 ...
- SpringBoot配置属性之Server参数
server配置server.address指定server绑定的地址 server.compression.enabled是否开启压缩,默认为false. server.compression.ex ...