Docker镜像含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器。
采用分层构建机制,最底层为bootfs,其之为rootfs.
容器启动时,必须按照层次加载,首先挂载bootfs,系统启动之后,从内存中删除bootfs,挂载rootfs,其次依次挂载上面的image层,每个应用都是一个层,这下面的所有层都是只读的。而后,在最上层挂载一个可写层。(对于一个容器来说,它的写操作都只能在这个可写层来实现)。他们是叠加在一起挂载的,所以称之为联合挂载。当一个容器销毁时(执行docker container rm操作)它的可写层也将被删除掉。
Sponsor Registry:第三方的Registry,供客户和Docker社区使用
Mirror Registry:第三方的Registry,只让客户使用。比如docker cn加速,阿里云的docker加速器;
Vendor Registry:由发布Docker镜像的供应商提供的registry,比如红帽,只提供给买了服务了客户使用;
Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry,自己搭建的,只能自己内部使用
由于第三方registry的镜像大部分都不符合我们的使用要求,所以我们都要自建registry。
Repository:
由某特定的docker镜像的所有迭代版本组成的镜像仓库;
一个Registry中可以存在多个Repository
Repository可分为“顶层仓库”和“用户仓库”
用户仓库名称格式为“用户名/仓库名”
每个仓库可以包含多个Tag,每个Tag对应一个镜像。
Index:
维护用户账户,镜像的校验以及公共命名空间的信息
相当于为Registry提供了一个完成用户认证等功能的检索接口
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。
镜像的生成途径: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.1-2
[root@oracle ~]# docker tag e729820ed9ff magedu.com/httpd:v0.1-1
[root@oracle ~]# docker tag magedu.com/httpd:v0.1-1 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.1-1 [root@oracle ~]# docker commit -p -a "cmxu <xcm_1740@163.com>" -c ‘CMD ["/bin/httpd","-f","-h","/data/html"]‘ httpd1 cmxu/httpd:v0.2-1
[root@oracle ~]# docker run --name myhttpd -d cmxu/httpd:v0.2-1 [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.2-1 [root@oracle ~]# docker image push registry.cn-hangzhou.aliyuncs.com/cmxu/httpd:v0.2-1
[root@oracle ~]# docker save –help [root@oracle ~]# docker load --help eg: [root@oracle ~]# docker save -o images.gz cmxu/httpd:v0.2-1 magedu.com/httpd:v0.1-2 #在当前目录生成images.gz文件 [root@oracle ~]# docker load -i images.gz
原文:https://www.cnblogs.com/cmxu/p/11768413.html