一、镜像介绍

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、审计日志

2、Docker镜像和镜像管理的更多相关文章

  1. Docker进阶之四:镜像管理

      一.什么是镜像? 简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统. 二.镜像从哪里来? Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容 ...

  2. docker简单介绍----镜像和容器管理

    docker可以分为三部分:docker镜像   docker仓库  docker容器 docker镜像:一个image可以包含一个镜像,也可以理解为一个系统模板,里面安装了相关应用,也可以是纯净版的 ...

  3. Docker容器与镜像管理

    目录 容器管理 运行容器 容器的启停操作 容器导入导出 容器生命周期管理 容器资源限制 内存限制 CPU限制 io 限制 镜像管理 镜像命名规范 镜像基本操作 容器管理 运行容器 1.运行一个容器示例 ...

  4. Docker镜像和容器管理(二)

    Docker安装 Docker镜像管理 https://hub.docker.com/ 是公共的一个Docker镜像仓库,类似GitHub一样,上面有非常多的开源项目镜像. 可以直接在命令行搜索镜像 ...

  5. Docker 镜像与容器管理

    镜像与容器简介 Docker的大部分操作都围绕着它的三大核心概念:镜像.容器.仓库而展开.因此,准确把握这三大核心概念对于掌握Docker技术尤为重要,在docker中,我们重点关注的就是镜像和容器了 ...

  6. docker学习构建镜像---第三章节

    一.docker镜像使用 运行docker容器时,使用的镜像如果在本地不存在,docker会自动从docker镜像仓库中下载,默认是从docker hub公共镜像源下载 在这里,我们需要了解:管理和使 ...

  7. docker基础之镜像

    获取镜像 从 Docker Registry 获取镜像的命令是 docker pull.其命令格式为: docker pull [选项] [Docker Registry地址]<仓库名>: ...

  8. [转]Docker中的镜像

    引言 这篇文章中我们主要来探讨下Docker镜像,它是用来启动容器的构建基石,本文的所用到的Dcoker版本是17.1,API版本是1.33,Go的版本是1.9.2,OS是基于Arch Linux的M ...

  9. Docker Dockerfile 定制镜像(转)

    转自: https://yeasy.gitbooks.io/docker_practice/ 及 https://blog.csdn.net/wo18237095579/article/details ...

随机推荐

  1. T-SQL检查停止的复制作业代理,并启动 (转载)

    有时候搭建的复制在作业比较多的时候,会因为某些情况导致代理停止或出错,如果分发代理时间停止稍微过长可能导致复制延期,从而需要从新初始化复制,带来问题.因此我写了一个脚本定期检查处于停止状态的分发代理, ...

  2. Asp.Net MVC 模型(使用Entity Framework创建模型类)

    这篇教程的目的是解释在创建ASP.NET MVC应用程序时,如何使用Microsoft Entity Framework来创建数据访问类.这篇教程假设你事先对Microsoft Entity Fram ...

  3. 【转】Nginx学习---负载均衡的原理、分类、实现架构,以及使用场景

    [原文]https://www.toutiao.com/i6593604356799463944/ [原文]https://www.toutiao.com/i6592741060194075143/ ...

  4. def chi(*food,**kw):

    def chi(*food,**kw): print(food,kw)chi("cong","蒜",'姜','可乐',"J=Juice",a ...

  5. 【11】python 递归,深度优先搜索与广度优先搜索算法模拟实现

    一.递归原理小案例分析 (1)# 概述 递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到! (2)# 写递归的过程 1.写出临界条件 2.找出这一次和上一次关系 3.假设 ...

  6. 记录一次elasticsearch-php工作过程

    初始化 $hosts = array('192.168.30.41'); $this->client = \Elasticsearch\ClientBuilder::create()->s ...

  7. 修改Lotus notes默认浏览器

    notes收到的邮件里面的链接,点了以后会自动在notes里打开,但notes很弱,加载页面总是有问题.怎么才能让他默认用ie浏览器打开呢,怎么设置,请教达人. 右下角有个office->Edi ...

  8. Docker技术入门与实战 第二版-学习笔记-2-镜像构建

    3.利用 commit 理解镜像构成 在之前的例子中,我们所使用的都是来自于 Docker Hub 的镜像. 直接使用这些镜像是可以满足一定的需求,而当这些镜像无法直接满足需求时,我们就需要定制这些镜 ...

  9. WorldWind源码剖析系列:星球类World

    星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...

  10. SQL 字符串分割表函数

    --字符串分割表函数 ) ) declare @i int; declare @count int; ); ); declare @Index int; )) declare @rowID int; ...