Docker技术简介

Docker容器技术

一、认识Docker容器技术和镜像仓库

容器

容器是一种轻量级、可移植、自包含的软件运行环境,允许多个应用程序在同一个操作系统实例上独立运行,而不会互相干扰。想必大家有点不好理解,那么 利用通俗易懂的方式概述容器: 想象一下,你有一个应用程序,但是这个应用程序需要一些特定的软件和配置才能正常运行。比如,它可能需要某个版本的python,特定的环境变量等,如果直接安装这些依赖,就可能会造成与其他程序发生冲突,例如端口号被占用,版本不兼容等一系列问题。那么容器就像一个打包盒,把你的应用程序和该程序所需的东西都装在一个独立的环境中,这样一来,无论把这个打包盒搬到哪里,应用程序都能正常运行,因为打包盒里有它所需要的全部东西,这就是容器的概念

1.1Docker简介

(1)Docker是一种用于构建、发布及运行应用程序的开源项目,他通过容器化技术简化了应用程序的部署和管理

(2)Docker是一个开源的应用容器引擎,基于go语言开发,为应用打包、部署平台,而非单纯的虚拟化技术

(3)Docker类似于集装箱,各式各样的货物,经过集装箱的标准化进行托管,而集装箱之间互不影响

(4)Docker是一个轻量级的容器,我们可以把环境交给Docker管理,当我们需要移植我们的产品的时候,就可以将环境整个的迁移到另一台主机上

1.2Docker引擎

Docker引擎用于运行容器化应行用程序的平台,它可以使应用程序在隔离环境中运行。Docker引擎的核心组件包括如下:

(1)Docker Daemon(守护进程):负责管理容器的生命周期及处理操作系统内核之间的交互。简单来说它可以接受来自Docker CLI的指令,以此来创建,运行。停止和删除容器。

(2)Docker CLI(命令行接口):用户可以通过命令行操作来执行Docker相关的操作,如构建镜像、运行容器、管理网络等。

(3)Docker镜像:Docker镜像是应用程序及其依赖的一个不可变快照,用于创建容器。镜像是分层构建的,可以从一个基础镜像上层层添加程序文件或配置。

(4)Docker容器:容器是镜像的运行实例,它提供了一个隔离的运行环境。容器可以在不同的主机上跨平台运行,确保应用程序的可移植性。

(5)Docker Registry:用于存储和分发Docker镜像。Docker Hub是一个公共的镜像仓库,用户也可以搭建私有仓库来存储自己的镜像。

Docker引擎,开发者可以在不同的系统环境中一致地运行应用程序,解决了传统应用程序部署时“环境不一致”的问题

1.3Docker架构

Docker基于C/S架构模型设计,Client通过接口与Server进程通信实现容器的构建,运行和发布。Client和Server可以运行在同一集群,也可以通过跨主机实现远程通信

Docker三大核心架构

(1)Docker镜像(Image)

Docker镜像是Docker容器运行的基础,它是一个只读的模板,包含应用程序及其运行环境。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用

(2)Docker容器(Container)

Docker容器是镜像的运行实例。它封装了应用程序的代码、依赖和运行环境,通过镜像启动,并在隔离的环境中运行。(可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程、用户和网络和运行在其中的应用程序)与虚拟机不同,容器是轻量级的,启动速度极快,且资源消耗少。

(3)Docker仓库(Registry)

Docker仓库是用于存储和分发Docker镜像的服务。用户可以将自己构建的镜像上传到仓库中,也可以从仓库中拉取公开的镜像。Docker Hub是最常用的公共仓库,用户也可以搭建私有仓库来管理自己的镜像。

1.4Docker组成

Docker的底层技术主要依赖于linux内核中的几个关键功能来实现其容器化机制,包括Cgroup、Namespace、rootfs以及容器引擎。

◎Cgroup是linux内核提供的一项功能,用于限制、隔离和统计系统资源的使用。如CPU、内存、网络带宽等。Cgroup的作用是确保每个容器能够在受限的资源下运行,而不会影响主机系统或其他容器。

◎Namespace是linux内核的另一项功能,用于隔离系统的不同部分。通过Namespace,Docker能够在每个容器中创建独立的进程空间、网络堆栈和文件系统视图,实现容器之间的隔离。

◎rootfs是指容器的根目录文件系统。Docker容器运行时,每个容器都会有一个独立的rootfs,它包含了容器所需的所有文件、库、配置等。

◎容器引擎指的是Docker用户态中用于操作和管理容器的工具。它是用户与linux内核进行交互的桥梁。Docker引擎在用户态中通过CLI命令向内核发送指令,利用内核提供的Cgroup、Namespace等功能实现容器的隔离与资源管理,主要包括:Docker Daemon、Docker CLI、镜像管理、容器编排

1.5Docker优势

(1)应用部署

Docker简化了应用程序的部署和管理,通过将应用程序打包到容器中,确保他们在任何环境中都能以一致的方式运行

(2)微服务架构

Docker是微服务架构的理想选择,允许将大型应用程序分解成较小的、独立的模块,从而提高敏捷性和可扩展性

(3)轻量级虚拟化

Docker容器较于传统的虚拟机更加轻量和高效,能够快速启动和停止,节省资源系统

(4)运行环境一致性

无论在本地还是云端,应用的运行环境都能保持相同,减少了因环境差异导致的问题

(5)可移植性

可以轻松的将docker容器从一个平台迁移到另一个平台,无需担心依赖和环境配置的差异比如:在本地开发的容器可以无缝部署到云服务器上

(6)高效的资源利用

多个docker容器可以共享主机的操作系统内核,从而更有效地利用系统资源

(7)隔离性

每个服务器都是独立运行的,完全隔离的。避免公用的服务器资源会容易受到其他用户影响

(8)快速的启动部署

可以做到秒级,甚至毫秒级的启动时间,大大节约了开发、测试、部署的时间

(9)易于部署和扩展

能够快速部署新的应用实例,并且可以根据需求轻松的进行水平扩展

(10)DevOps

Docker桥接了开发和运维之间的差距,使团队能够有效的协作并实现DevOps实践

1.6为什么使用Docker

(1)更高效的利用系统资源:由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

(2)更快速的启动时间:传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大的节约了开发、测试、部署的时间。

(3)一致的运行环境:开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现这类问题。

(4)持续交付和部署:对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署。开发人员可以通过 Dockerfile 来进行镜像构建,并结合 持续集成(Continuous Integration) 系统进行集成测试,而运维人员则可以直接在生产环境中快速部署该镜像,甚至结合 持续部署(Continuous Delivery/Deployment) 系统进行自动部署。​                                                

(5)更轻松的迁移:由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

(6)更轻松的维护和扩展​:Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的 官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

1.7Registry镜像仓库

1.7.1Registry简介

Docker Registry是一个存放镜像的仓库,可以方便的存储、管理和分发镜像。通过将镜像上传到Registry,用户可以在不同环境中快速的下载和运行镜像,大大提高了应用的部署和管理效率。

  1. 镜像仓库:Docker Registry是一个集中式的镜像仓库,可以存储、管理和分发镜像。它通常被部署在互联网服务器或者云端,使得用户可以在任何地方下载和运行镜像
  2. 跨环境一致性:由于在多个环境中使用的是相同的镜像,因此可以确保应用在不同环境中的一致性。用户只需要在开发环境中制作好镜像,并将其上传到Registry,就可以在生产环境中直接下载并运行该镜像
  3. 与Docker完美集成:Docker本身已经与Registry完美集成,用户可以通过简单的Docker命令来上传、下载和运行镜像,无需了解Registry的具体细节
  4. 开源项目:Registry本身是一个开源项目,任何人都可以下载并部署自己的私有Registry

1.7.2Registry分类

公共仓库: Docker官方提供了一个公共的镜像仓库,称为Docker Hub。Docker Hub上存储了大量的公共镜像,用户可以通过搜索镜像名称找到自己需要的镜像,并下载到本地使用。

私有仓库: Docker还支持创建自己的私有镜像仓库,用于存储和共享自定义的镜像。私有仓库可以满足企业或个人对镜像管理的特殊需求。

1.7.3Registry特点 

(1)高效的镜像上传与下载

分层存储:Registry 将镜像拆分为多个层,每个层可以被多个镜像共享,从而减少存储空间占用。这种分层存储方式还加快了镜像的上传和下载速度,因为只需要传输和存储改变的部分。

性能优化:从 2.0 版本开始,Registry 改用 Go 语言重写,极大提升了性能,优化了镜像的 push 和 pull 过程,减少了操作的延迟。

(2)易于部署和管理

轻量级部署:Registry 是一个轻量级的服务,用户可以非常方便地通过 Docker 镜像运行它。这使得用户可以轻松搭建自己的私有镜像仓库。

灵活配置:Registry 支持灵活的配置选项,用户可以根据需求调整其功能和后端存储。它的配置非常简单,可以通过少量参数来定制化镜像仓库。

(3)多种后端存储支持

Registry 支持多种后端存储方案,用户可以根据需求选择适合的存储方式:

本地文件系统:可以直接将镜像存储在本地文件系统中。

云存储服务:支持主流云存储方案,包括 Amazon S3、Google Cloud Storage 和 Azure Blob Storage。这使得 Registry 可以与分布式云基础设施无缝集成。

(4)镜像缓存机制

镜像缓存:Registry 实现了强大的镜像缓存机制,减少了镜像重复下载的需求,加快了镜像拉取的速度,特别是在多个用户或服务频繁访问同一镜像的情况下。

(5)安全性与认证

TLS/HTTPS 支持:Registry 支持 TLS 加密通信,允许通过 HTTPS 访问镜像仓库,确保数据传输的安全性,防止未经授权的访问和数据泄露。

可配置的认证模块:Registry 提供了灵活的认证机制,支持基本认证、OAuth、LDAP 等,可以控制哪些用户有权上传、下载或管理镜像。用户可以根据需求选择合适的认证方式,保证镜像的私密性。

(6)Webhook 通知系统

自动化通知:Registry 提供了基于 Webhook 的通知系统。当用户对镜像进行操作(如推送、拉取)时,Registry 可以自动触发预定义的 Webhook 事件,从而集成自动化工作流程,或在外部系统中执行其他操作。

(7)扩展性和高可用性

分布式存储与扩展:支持分布式存储和部署,方便构建大规模、高可用的镜像仓库架构。通过负载均衡和集群部署,Registry 可以在大规模使用场景中保持高效运转,处理大量并发请求。

健康检查:Registry 提供健康检查功能,可以随时监控其运行状态,自动检测并报告问题,确保服务的持续可用性。

(8)镜像的元数据管理

清单文件(Manifest):Registry 使用清单文件(Manifest)来记录镜像的元数据,包括镜像的层信息、镜像标签和摘要。它支持多架构镜像,可以将不同平台(如 x86、ARM)的镜像打包在一个 Manifest 文件中,方便镜像跨平台使用。

镜像签名:Registry 支持为镜像生成签名,确保镜像来源的可信性和完整性,防止镜像在传输过程中被篡改。

(9)日志记录与审计

操作日志:Registry 记录所有与镜像相关的操作日志,包括镜像的推送、拉取和删除操作。这些日志有助于追踪问题、排查故障以及满足合规性要求。

审计:通过审计机制,可以跟踪镜像的访问情况,帮助管理员了解谁在何时对镜像进行了哪些操作。

1.7.4Registry应用场景

(1)私有容器镜像仓库

企业和开发团队往往需要构建自己的容器镜像,而不希望将这些镜像发布到公共仓库(如 Docker Hub)。 通过搭建私有 Docker Registry,团队可以将内部构建的镜像存储在企业的内部网络中,确保敏感代码和数据不会泄露。 私有镜像仓库还可以提高镜像拉取速度,减少对公共网络的依赖。

(2)本地开发和测试

在本地开发环境中,使用 Docker Registry 可以帮助开发者快速存储和分发自己构建的容器镜像,尤其在测试过程中,需要频繁迭代和修改镜像内容时,本地 Registry 可以大幅提升开发效率。 开发者可以将新构建的镜像推送到本地 Registry,然后在测试环境中直接拉取使用,避免每次都要构建镜像。

(3)CI/CD 集成

在 CI/CD(持续集成/持续交付)流水线中,Docker Registry 是不可或缺的一环。 在构建完成后,CI 系统可以将生成的镜像推送到 Registry,然后在不同的部署环境(如测试环境、预生产环境和生产环境)中拉取这些镜像进行部署。 通过使用私有 Registry,企业可以对镜像管理进行更严格的控制,确保部署过程中使用的都是经过验证的镜像。

(4)离线环境部署

某些企业或组织(如政府机构、金融公司)由于安全或政策原因,可能无法访问公共的 Docker Hub。 这种情况下,可以在企业内部搭建一个离线的 Docker Registry,用于存储和分发所需的镜像。 通过这种方式,企业可以在完全隔离的环境中使用 Docker 容器技术,而不需要连接外部网络。

(5)快速镜像分发和拉取

在分布式开发或部署场景中,Docker Registry 可以用于优化镜像的分发和拉取速度。 通过部署多个 Registry 实例,企业可以实现镜像的分布式存储,使得开发人员和运维人员能够更快地从最近的 Registry 实例中获取所需的镜像,减少网络延迟并提高工作效率。

(6)镜像缓存

在多集群或多节点的环境中,为了减少重复下载镜像的时间,企业可以使用 Docker Registry 作为镜像缓存。 这样,当镜像在不同节点上使用时,Registry 可以充当一个本地缓存,避免每次都从远程仓库下载相同的镜像,节省时间和带宽。

1.7.5Registry优势

(1)资源集中管理

Registry 仓库的资源集中管理优势不仅体现在存储和查找依赖上,还通过统一的接口提供一致的操作体验。例如,Docker Registry、npm Registry、Maven 中央仓库等都允许开发者通过命令行工具或 API 进行发布、拉取、删除等操作。这种集中化的管理方式减少了团队内的沟通成本,同时提高了团队协作的效率,所有成员都可以从同一来源获取相同的依赖版本。

此外,集中管理的 Registry 仓库可以确保所有依赖包都通过合规的流程发布,企业能够控制和审查外部包的引入,避免未经批准的第三方包进入生产环境。

(2)依赖追踪与版本管理

通过 Registry 仓库进行依赖管理,开发者不仅可以清晰地查看项目的依赖树,还能通过版本管理机制进行精确的控制。对于复杂项目,依赖的版本管理至关重要,Registry 提供了版本锁定、标签管理等功能,使开发团队能够在不同的环境中(开发、测试、生产)稳定运行项目。

例如,npm 和 Maven 提供的版本锁定机制可以防止由于某些依赖的升级而导致的兼容性问题。团队可以根据需要选择升级或保持特定版本,确保软件的稳定性。此功能还允许回滚到某个已知的稳定版本,减少问题排查的时间。

(3)效率提升

除了缓存机制,Registry 仓库还通过内容分发网络(CDN)等技术加速资源的分发。例如,Docker Registry 通过镜像分发机制,可以让不同区域的用户从最近的节点获取容器镜像,显著提高镜像拉取的速度。类似地,npm 和 Maven 仓库利用 CDN 技术优化包的下载速度,特别是对于全球分布的开发团队,能够显著减少网络传输的延迟。

(4)安全性保障

Registry 仓库通过多种方式来保障安全性和内容质量。首先是身份验证和授权控制,确保只有经过授权的用户才能发布或访问特定的资源。其次,Registry 仓库通常会内置安全扫描功能,例如 Docker Hub 会扫描上传的容器镜像,检查其中的漏洞和安全风险。这种自动化的安全审查过程,有助于降低软件供应链中的安全风险。

此外,许多企业选择使用私有的 Registry 仓库,通过严格的访问控制和审核机制,确保内部使用的包或镜像都经过充分验证。这种做法能够有效防止因外部库的引入而导致的安全问题,例如供应链攻击。

(5)生态系统支持

Registry 仓库通常是开发工具链的重要组成部分,许多 CI/CD 工具、构建工具、部署工具都与其深度集成。例如:

CI/CD 集成: Jenkins、GitLab CI 等工具可以与 Registry 集成,自动化从构建、测试到发布的流程,将构建的产物推送到 Registry 仓库,接着部署到生产环境。

开发环境集成: 像 npm、Maven 等工具直接支持从 Registry 仓库拉取依赖,并在开发环境中自动安装,简化了开发者的操作。

部署与运维支持: 容器编排工具(如 Kubernetes)可以与 Docker Registry 集成,在部署时自动从 Registry 拉取容器镜像。类似地,许多云服务平台(如 AWS、Azure)也支持与 Registry 仓库集成,加速云端应用的部署流程。

这种广泛的生态系统支持,使得 Registry 仓库成为现代软件开发和交付流程中的关键一环。无论是前端开发、后端服务,还是 DevOps 和运维工作,Registry 都为整个开发周期的自动化和高效运作提供了坚实的基础。

(6)可扩展性与自定义

Registry 仓库还具有高度的可扩展性,企业可以根据需求进行自定义。例如,Harbor、Artifactory 等企业级   Registry 解决方案基于 Docker Registry 构建,提供了额外的功能,如更详细的权限管理、高级安全扫描、镜像复制等。通过这些扩展功能,企业可以满足更复杂的场景需求,并与现有的内部系统集成。

1.8Harbor镜像仓库

1.8.1Harbor简介

Harbor 是一个开源的容器镜像仓库,用于存储和分发 Docker 镜像。它提供了一种安全、可靠且易于使用的解决方案,用于管理镜像的整个生命周期,从创建、存储到分发。Harbor 支持团队协作,并且可以与现有的 CI/CD(持续集成/持续部署)系统无缝集成。

1.8.2Harbor仓库结构

UI(Harbor的核心服务)

Log(运行着rsyslog的容器,进行日志收集)

Nginx(使用Nginx做反向代理)

Registry(官方的Docker registry)

Adminserver(Harbor的配置数据管理器)

Jobservice(Harbor的任务管理服务)

1.8.3Harbor工作流程

首先,当用户访问Docker client时,Docker client将请求发送到Proxy服务。Proxy服务负责与Registry服务进行通信,请求Docker镜像。Registry服务将镜像的存储位置返回给Proxy服务,后者从指定的存储位置(可能是Docker Registry或者本地存储)拉取镜像。接着,Proxy服务通过Docker Daemon将镜像传递给Docker client。然后,Docker client将镜像发送到Docker puller/pusher,它负责在Docker集群内管理镜像的同步和分发。最后,Docker puller/pusher将镜像发送到Job services和Log收集器,完成任务的执行并收集日志信息。这些信息被存储在Database中,可用于数据存储和检索。

(2)设置镜像仓库地址

#设置阿里云镜像源

[root@localhost ~]#  yum-config-manager \

>     --add-repo \

>   https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#设置Docker官方镜像源

[root@localhost ~]#  yum-config-manager \

> --add-repo \

> https://download.docker.com/linux/centos/docker-ce.repo

解析:

两个镜像仓库地址,一个是阿里云的镜像源,另一个是Docker官方的镜像源,建议使用阿里云的镜像源,因为受网络问题的影响较小,

yum-config-manager \  管理yum配置文件的命令,主要用于启用,禁用或添加存储库

> --add-repo \  --add-repo选项告诉yum-config-manager添加一个新的仓库

>     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo      指定阿里云镜像仓库

执行这条命令后,yum-config-manager会从指定的URL下载仓库配置文件,并将其添加到系统的YUM仓库列表中,具体来说,他会在/etc/yum.repos.d/目录下创建一个名为docker-ce.repo的文件,该文件包含了阿里云提供的docker-ce镜像源的配置信息。

这里使用阿里云的镜像仓库

1.8.4Harbor类型

(1)社区版(Community Edition)

开源版本,面向所有用户,免费提供。 支持基本的镜像存储、镜像复制、访问控制、镜像签名、漏洞扫描等功能。 社区用户可以自由使用和扩展,但企业级支持有限。

(2)企业版(Enterprise Edition)

企业级 Harbor 提供更高级的功能和支持,包括额外的安全特性、支持更多集成选项、以及来自 Harbor 团队的技术支持。  企业版通常基于定制需求进行扩展和优化,满足大规模生产环境的使用。

(3)云部署版

Harbor 可以与公有云服务(如 AWS、Azure、GCP)集成,提供云端的镜像管理服务。 云部署版通常通过自动化工具(如 Kubernetes、Helm Charts)进行快速部署,方便与云原生应用无缝对接。

1.8.5Harbor应用场景

(1)私有容器镜像仓库

场景:企业希望搭建内部私有镜像仓库,来安全管理和分发容器镜像,避免敏感数据的泄露。

应用:企业内部开发团队可以将构建好的镜像存储在 Harbor 中,方便在 CI/CD 流程中进行管理和使用,提升软件交付效率,同时确保敏感镜像数据不会流入公共网络。

(2)多区域镜像同步

场景:企业在全球多个数据中心或云服务之间需要进行容器镜像的同步与分发。

应用:Harbor 提供的镜像复制功能,可以在不同的 Harbor 实例之间进行自动化的镜像同步,支持多区域部署,确保各地团队可以就近获取所需镜像,减少传输延迟。

(3)容器镜像安全扫描

场景:在生产环境中部署容器时,企业需要确保镜像的安全性,以避免镜像中包含的漏洞造成潜在的安全风险。

应用:Harbor 集成了漏洞扫描工具,可以在镜像推送到仓库时自动进行安全扫描,并阻止带有严重漏洞的镜像被推送或使用,提升镜像的整体安全性。

(4)基于策略的权限管理

场景:企业有多团队协作开发容器化应用程序,不同团队对镜像的访问权限有所不同。

应用:Harbor 支持基于项目和角色的访问控制(RBAC),管理员可以通过项目管理功能为不同团队创建各自的项目,并对镜像仓库的访问权限进行细粒度的控制,确保只有授权用户可以访问和操作指定的镜像。

(5)CI/CD 集成

场景:开发和运维团队需要快速迭代、自动化发布应用,使用持续集成/持续部署(CI/CD)来推动镜像从开发到生产的自动化流程。

应用:Harbor 可以与 CI/CD 工具(如 Jenkins、GitLab CI、Azure DevOps)无缝集成,开发者在代码提交后,CI/CD 工具可以自动构建 Docker 镜像并推送到 Harbor,确保所有镜像都经过统一的存储和管理,同时支持版本控制。

(6)混合云和多云环境

场景:企业需要在不同的云服务提供商之间迁移和共享镜像,同时保持一致的安全性和权限管理。

应用:Harbor 可以部署在私有云、公有云或混合云环境中,支持在不同的云环境中进行镜像的跨云复制和管理,确保镜像分发的灵活性和高可用性,同时统一镜像仓库的安全策略和权限控制。

(7)DevSecOps 实践

场景:在 DevSecOps 文化中,安全性需要从开发阶段就融入到容器生命周期管理中。

应用:通过 Harbor 的镜像签名(Notary)和漏洞扫描功能,开发团队可以在开发阶段保证镜像的安全性,并确保推送到 Harbor 的镜像是经过验证且没有漏洞的,为 DevSecOps 提供了安全保障。

(8)容器镜像生命周期管理

场景:企业需要管理容器镜像的版本、定期清理不再使用的镜像,节省存储空间。

应用:Harbor 提供了镜像垃圾回收功能,可以定期清理未使用的镜像,节省存储空间。管理员还可以根据业务需求设置自动化的镜像生命周期管理策略,清理旧版本镜像、保留重要镜像。

1.8.6Harbor优势

(1)企业级访问控制和安全性

细粒度的角色管理:Harbor 提供基于项目的角色管理,支持细粒度的角色和权限控制(RBAC),企业可以根据用户的不同角色(如管理员、开发者、访客等)设置不同的访问权限,确保只有授权的用户可以访问、推送或拉取镜像。

漏洞扫描与镜像签名:Harbor 集成了安全漏洞扫描工具(如 Trivy 和 Clair),能够对容器镜像进行自动化的漏洞检测,确保镜像在进入生产环境前已被扫描和评估。同时,Harbor 支持镜像签名(Notary),验证镜像的来源和完整性,防止未经授权的镜像进入仓库。

(2)镜像复制与多云支持

跨区域、多实例镜像同步:Harbor 支持在不同数据中心、云平台或物理位置的 Harbor 实例之间进行镜像复制。这使得在多云或混合云环境中,企业可以轻松实现镜像的全球分发和同步,保证各区域之间的高效协作和业务连续性。

自定义复制策略:管理员可以根据业务需求自定义镜像的复制策略,选择不同项目或镜像的复制频率、优先级等,灵活实现不同的跨区域同步需求。

(3)高性能和资源利用

快速推送与拉取:Harbor 的镜像仓库经过优化,支持大规模镜像的快速上传与下载。镜像的层级存储和传输机制保证了数据传输的高效性,尤其是在跨区域传输镜像时,提供了极大的带宽节省和性能优化。

镜像垃圾回收:Harbor 提供了自动化的垃圾回收功能,可以定期清理未使用的镜像,减少存储空间的占用,提升系统的资源利用效率。

(4)易于集成的 DevOps 支持

与 CI/CD 工具无缝集成:Harbor 可以无缝集成主流的持续集成和持续部署(CI/CD)工具,如 Jenkins、GitLab CI、GitHub Actions 等。开发者在开发流程中可以通过 CI/CD 管道自动构建、推送和管理容器镜像,快速实现自动化的应用交付。

API 与 CLI 支持:Harbor 提供丰富的 API 和 CLI 工具,方便开发者通过脚本和自动化工具对 Harbor 进行操作和管理,极大提升了 DevOps 流程的效率和灵活性。

(5)强大的日志与审计功能

全面的操作审计:Harbor 记录了所有用户的操作日志,如推送、拉取、删除镜像等行为,方便管理员对系统进行安全审计和追踪。特别适用于对安全性和合规性要求较高的行业,如金融、医疗和政府机构。

集中日志管理:Harbor 通过 Logcollector 统一管理各个组件的日志,支持将日志输出到外部系统(如 Elasticsearch、Fluentd)进行日志分析和监控,帮助企业更好地进行运维管理和故障排查。

二、Docker安装与使用

2.1安装Docker服务

基础准备

(1)系统要求:

Docker支持64位版本CentOS7以上版本,并且要求内核版本不低于3.10

确保系统是最新的,避免兼容性问题

(2)配置要求:

镜像使用CentOS-7-1804版本     

虚拟机配置自定义,推荐配置(4vCPU/4G内存/100G硬盘)

(3)环境要求:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/10481.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows程序设计9:文件的读写操作

文章目录 前言一、文件的写操作WriteFile1.WriteFile介绍2.WriteFile实例二、文件的读操作ReadFile1.ReadFile简介2.ReadFile实例总结前言 Windows程序设计9:文件的读写操作。 一、文件的写操作WriteFile 1.WriteFile介绍 从文件指针指向的位置开始,将数据写入到一个文件中…

AJAX笔记入门篇

黑马程序员视频地址: 黑马程序员前端AJAX入门到实战全套教程https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p2https://www.bilibili.com/video/BV1MN411y7pw?vd_source…

洛谷 P10288 [GESP样题 八级] 区间 C++ 完整题解(STL二分法)

本文并非最优解,但能通过。 一、题目链接 P10288 [GESP样题 八级] 区间 - 洛谷 二、解题思路 **本题的大意就是求出a[l~r]间x出现的次数,由于数据较大、较多,所以暴力容易超时。** 首先新建一个mp,mp[x]是一个vector,里…

springboot集成钉钉,发送钉钉日报

目录 1.说明 2.示例 3.总结 1.说明 学习地图 - 钉钉开放平台 在钉钉开放文档中可以查看有关日志相关的api,主要用到以下几个api: ①获取模板详情 ②获取用户发送日志的概要信息 ③获取日志接收人员列表 ④创建日志 发送日志时需要根据模板规定日志…

android主题设置为..DarkActionBar.Bridge时自定义DatePicker选中日期颜色

安卓自定义DatePicker选中日期颜色 背景:解决方案:方案一:方案二:实践效果: 背景: 最近在尝试用原生安卓实现仿element-ui表单校验功能,其中的的选择日期涉及到安卓DatePicker组件的使用&#…

学习串行通信

本文来源: [8-1] 串口通信_哔哩哔哩_bilibili 智谱清言 ------------ 串口(Serial Port): 串口是一种应用非常广泛的通讯接口,串口成本低,容易使用,通信线路简单,可实现两个设…

【memgpt】letta 课程4:基于latta框架构建MemGpt代理并与之交互

Lab 3: Building Agents with memory 基于latta框架构建MemGpt代理并与之交互理解代理状态,例如作为系统提示符、工具和agent的内存查看和编辑代理存档内存MemGPT 代理是有状态的 agents的设计思路 每个步骤都要定义代理行为 Letta agents persist information over time and…

(二)QT——按钮小程序

目录 前言 按钮小程序 1、步骤 2、代码示例 3、多个按钮 ①信号与槽的一对一 ②多对一(多个信号连接到同一个槽) ③一对多(一个信号连接到多个槽) 结论 前言 按钮小程序 Qt 按钮程序通常包含 三个核心文件: m…

SpringCloudGateWay和Sentinel结合做黑白名单来源控制

假设我们的分布式项目,admin是8087,gateway是8088,consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目,那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以&#xff1…

玩转大语言模型——配置图数据库Neo4j(含apoc插件)并导入GraphRAG生成的知识图谱

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型——使用GraphRAGOllama构建知识图谱 玩转大语言模型——完美解决Gra…

C# Winform制作一个登录系统

using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 登录 {p…

第11章:根据 ShuffleNet V2 迁移学习医学图像分类任务:甲状腺结节检测

目录 1. Shufflenet V2 2. 甲状腺结节检测 2.1 数据集 2.2 训练参数 2.3 训练结果 2.4 可视化网页推理 3. 下载 1. Shufflenet V2 shufflenet v2 论文中提出衡量轻量级网络的性能不能仅仅依靠FLOPs计算量,还应该多方面的考虑,例如MAC(memory acc…

AJAX案例——图片上传个人信息操作

黑马程序员视频地址&#xff1a; AJAX-Day02-11.图片上传https://www.bilibili.com/video/BV1MN411y7pw?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodes&p26 图片上传 <!-- 文件选择元素 --><input type"file"…

AI DeepSeek-R1 Windos 10 环境搭建

1、安装&#xff1a; 下载 Python |Python.org CUDA Drivers for MAC Archive | NVIDIA pip 和virtualenv Download Ollama on Windows 如下图 2、下载模型 deepseek-r1 ollama run deepseek-r1 或者可以ollama run deepseek-r1:8b 或 3、安装一个可视化对话Chatbox 下载 …

【AI绘画】MidJourney关键词{Prompt}全面整理

AI绘画整理&#xff0c;MidJourney关键词。喜欢AI绘画的朋友必备&#xff0c;建议收藏&#xff0c;后面用到时供查阅使用。 1、光线与影子篇 中 英 闪耀的霓虹灯 shimmeringneon lights 黑暗中的影子 shadows in the dark 照亮城市的月光 moonlightilluminatingthe cit…

剑指offer 数组 持续更新中...

文章目录 1. 数组中重复的数字1.1 问题描述1.2 方法1: 排序1.3 方法2: 哈希表1.4 方法3: 原地交换 2. 寻找重复数2.1 问题描述2.2 方案1&#xff0c;使用辅助数组2.3 方案2&#xff0c;使用二分 3. 二维数组的查找3.2 方案1&#xff0c;贪心 4. 合并两个有序数组4.1 问题描述4.…

SQLAlchemy 2.0的简单使用教程

SQLAlchemy 2.0相比1.x进行了很大的更新&#xff0c;目前网上的教程不多&#xff0c;以下以链接mysql为例介绍一下基本的使用方法 环境及依赖 Python:3.8 mysql:8.3 Flask:3.0.3 SQLAlchemy:2.0.37 PyMySQL:1.1.1使用步骤 1、创建引擎&#xff0c;链接到mysql engine crea…

nodejs:express + js-mdict 网页查询英汉词典

向 DeepSeek R1 提问&#xff1a; 我想写一个Web 前端网页&#xff0c;后台用 nodejs js-mdict, 实现在线查询英语单词 1. 项目结构 首先&#xff0c;创建一个项目目录&#xff0c;结构如下&#xff1a; mydict-app/ ├── public/ │ ├── index.html │ ├── st…

23.Word:小王-制作公司战略规划文档❗【5】

目录 NO1.2.3.4 NO5.6​ NO7.8.9​ NO10.11​ NO12​ NO13.14 NO1.2.3.4 布局→页面设置对话框→纸张&#xff1a;纸张大小&#xff1a;宽度/高度→页边距&#xff1a;上下左右→版式&#xff1a;页眉页脚→文档网格&#xff1a;勾选只指定行网格✔→ 每页&#xff1a;…