一个只读层被称为镜像,一个镜像是永久不会变的。python
因为 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。 可是全部的变动都发生顶层的可写层,而下层的原始的只读镜像文件并未变化。因为镜像不可写,因此镜像是无状态的。nginx
每个镜像均可能依赖于由一个或多个下层的组成的另外一个镜像。咱们有时说,下层那个 镜像是上层镜像的父镜像。git
为何要说这个呢?由于是容器使用镜像,因此他们之间有密切的关系。github
容器实际上是在镜像的最上面加了一层读写层,在运行容器里文件改动时,会先从镜像里面要写的文件复制到容器本身的文件系统中(读写层)。web
若是容器删除了,最上面的读写层也就删除了,改动也就丢失了。因此不管多少个容器共享一个镜像,所作的写操做都是从镜像的文件系统中复制过来操做的,并不会修改镜像的源文件,这种方式提升磁盘利用率。docker
若想持久化这些改动,能够经过docker commit将容器保存成一个新的镜像,可是不推荐这么操做,而是直接从新制做一个镜像,做为模板,这样的镜像会更小。centos
一个没有任何父镜像的镜像,谓之基础镜像,好比centos、Ubuntu等基础镜像,只是提供操做系统,没有任何应用。api
全部镜像都是经过一个 64 位十六进制字符串 (内部是一个 256 bit 的值)来标识的。 为简化使用,前 12 个字符能够组成一个短ID,能够在命令行中使用。短ID仍是有必定的 碰撞机率,因此服务器老是返回长ID。安全
docker pull
命令直接从仓库获取所须要的镜像。镜像拉取到本地后,就能够构建容器了。服务器
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,经过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。做为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提高用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像所有保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。参考文档:https://goharbor.io/docs/
参考文档:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md
Harbor安装分为在线安装和离线安装。在线安装就是从harbor仓库去拉取镜像,离线安装是把镜像下载到本地后安装。因为harbor仓库在国外,因此建议经过离线安装。
安装需求:
安装步骤
wget https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.2.tgz
harbor.cfg
./prepare
./install.sh
参考连接:https://github.com/goharbor/harbor/blob/master/docs/user_guide.md
不得不说,harbor官网很是全面,也很是详细。
、
建立项目,设置为私有(不勾选"公开")
给用户受权(赋予项目操做权限)
给项目添加受权的成员
docker tag nginx 10.11.97.187/library/nginx:v2
harbor设置了项目以及用户,切设置了用户控制项目的权限,因此对于镜像的使用必需要通过用户验证后才能使用。否则会提示错误信息:
用户qianxun登录,qianxun拥有管理jxqy项目的权限:
用户登录后的密码保存以及提示登录成功。
咱们再次推送镜像:
查看推送结果:
再次测试权限问题,登录一个帐户,对jxqy项目没有管理权限:
咱们以xuequn用户推送镜像:
从上能够看出,xuequn用户对jxqy项目没有控制权限,没法获取其资源。
咱们有了仓库,就能够直接使用镜像开启容器,而不须要把镜像下载下来。
访问web