zoukankan      html  css  js  c++  java
  • 2、Docker镜像和镜像管理

    一、镜像介绍

    1、定义

    一个只读层被称为镜像,一个镜像是永久不会变的(如果一个镜像需要变动,那就新建一个镜像,而不是去修改他,镜像本身就是当做一个模板。)。

    内核、启动引导文件、分层镜像、可读写层

    由于 Docker 使用一个统一文件系统,Docker 进程认为整个文件系统是以读写方式挂载的。 但是所有的变更都发生顶层的可写层,而下层的原始的只读镜像文件并未变化。由于镜像不可写,所以镜像是无状态的。

     

    每一个镜像都可能依赖于由一个或多个下层的组成的另一个镜像。我们有时说,下层那个 镜像是上层镜像的父镜像。

    2、镜像和容器的关系

    为什么要说这个呢?因为是容器使用镜像,所以他们之间有密切的关系。

    容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时,会先从镜像里面要写的文件复制到容器自己的文件系统中(读写层)。

    如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作的,并不会修改镜像的源文件,这种方式提高磁盘利用率。

    若想持久化这些改动,可以通过docker commit将容器保存成一个新的镜像,但是不推荐这么操作,而是直接重新制作一个镜像,作为模板,这样的镜像会更小。

    3、基础镜像

    一个没有任何父镜像的镜像,谓之基础镜像,比如centos、Ubuntu等基础镜像,只是提供操作系统,没有任何应用。

    4、镜像ID

    所有镜像都是通过一个 64 位十六进制字符串 (内部是一个 256 bit 的值)来标识的。 为简化使用,前 12 个字符可以组成一个短ID,可以在命令行中使用。短ID还是有一定的 碰撞机率,所以服务器总是返回长ID。

     

    5、获取镜像

    • 可以使用 docker pull 命令直接从仓库获取所需要的镜像。
    • 也可以使用docker search container_name来搜索镜像。

    镜像拉取到本地后,就可以构建容器了。

     

    二、镜像管理(命令行)

    1、镜像操作

    • docker images # 显示本地所有的镜像列表,等价于docker image ls
    • docker prune  #删除没有使用的所有image
    • docker import # 从一个tar包创建一个镜像,往往和export结合使用
    • docker export #导出一个tar包格式的镜像
    • docker build # 使用Dockerfile创建镜像(推荐)
    • docker commit # 从容器创建镜像,一般很少使用,因为镜像是不可变的模板
    • docker rmi # 删除一个镜像
    • docker load # 从一个tar包创建一个镜像,和save配合使用
    • docker save # 将一个镜像保存为一个tar包,带layers和tag信息
    • docker history # 显示生成一个镜像的历史命令,Dockerfile里面的每条命令
    • docker tag # 为镜像打一个tag

    2、镜像仓库(registry)操作

    • docker login # 登录到一个registry
    • docker search # 从registry仓库搜索镜像
    • docker pull # 从仓库下载镜像到本地
    • docker push # 将一个镜像push到registry仓库中

     

    三、企业级镜像仓库Harbor(图形化)

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。参考文档:https://goharbor.io/docs/

     

    1、Harbor安装

    参考文档:https://github.com/goharbor/harbor/blob/master/docs/installation_guide.md

    Harbor安装分为在线安装和离线安装。在线安装就是从harbor仓库去拉取镜像,离线安装是把镜像下载到本地后安装。由于harbor仓库在国外,所以建议通过离线安装。

    安装需求:

    安装步骤

    1. Download the installer;
    2. Configure harbor.cfg;
    3. Run install.sh to install and start Harbor;

    a、下载安装包

    wget  https://storage.googleapis.com/harbor-releases/release-1.6.0/harbor-offline-installer-v1.6.2.tgz
    

      

    b、修改配置文件

    harbor.cfg

     

    c、安装

    ./prepare
    ./install.sh
    

      

    d、进入web界面

     

     

    e、登陆harbor

     

     

    2、Harbor使用

    参考链接:https://github.com/goharbor/harbor/blob/master/docs/user_guide.md

    不得不说,harbor官网非常全面,也非常详细。

     

    a、创建项目

    创建项目,设置为私有(不勾选"公开")

     

     

     

    b、创建用户

     

     

     给用户授权(赋予项目操作权限)

     

    给项目添加授权的成员

     

     

    c、生成镜像

    docker tag nginx 10.11.97.187/library/nginx:v2
    

      

     

    d、上传镜像

    harbor设置了项目以及用户,切设置了用户控制项目的权限,所以对于镜像的使用必须要经过用户验证后才能使用。不然会提示错误信息:

    用户qianxun登陆,qianxun拥有管理jxqy项目的权限:

    用户登陆后的密码保存以及提示登陆成功。

    我们再次推送镜像:

     

     查看推送结果:

     

    再次测试权限问题,登陆一个账户,对jxqy项目没有管理权限:

    我们以xuequn用户推送镜像:

    从上可以看出,xuequn用户对jxqy项目没有控制权限,无法获取其资源。

    e、使用镜像

     我们有了仓库,就可以直接使用镜像开启容器,而不需要把镜像下载下来。

    访问web

     

    f、审计日志

     

  • 相关阅读:
    Angular入门到精通系列教程(12)- 路由(Routing)
    Angular入门到精通系列教程(11)- 模块(NgModule),延迟加载模块
    error: file '/boot/grub/i386-pc/normal.mod' not found解决方案
    mysql常用查询
    mysql数据库表中随机生成时间
    成本分析报表
    弹窗维护字段POPUP_GET_VALUES
    返回上一个屏幕
    PM停机时间问题处理
    IP41
  • 原文地址:https://www.cnblogs.com/skyflask/p/10014008.html
Copyright © 2011-2022 走看看