什么是微服务?
2013年,docker项目的开源,随着容器技术的兴起,一种通过以容器为载体,使用多个小型服务组合来构建应用的微服务架构逐渐清晰,这些小型服务围绕具体应用来构建.各个服务之间采用不同的编程语言,不同的存储技术,运行在各自的进程之中,互不干扰,协同工作.
微服务架构.
微服务并不是一种技术,而是架构思想,它以容器技术为载体,演进出的一种以软件运行环境,产品,研发,运营为一体的全新模式.站在Docker的角度,软件就是容器的组合,而容器又是服务的最佳载体,一台计算机同时运行多个容器,从而就能很轻松的实现复杂的结构.
微服务架构的优点:松藕合高内聚,高度可扩展,出色的弹性,易于部署,访问.
容器服务编排
在微服务架构中,每个微服务一般都会包含多个容器实例,如果每个微服务都要手动管理,那么维护量会很大,于是docker Compose工具应运而生.
Compose工具,可以在一个文件中配置多个容器服务,然后使用一个简单的命令就可以轻松高效的管理配置中引用的所有容器服务.
compose子命令
docker compose [-f 文件名.yaml | -p project] 子命令
指令 | 说明 |
up | 创建项目并启动容器 |
down | 删除项目容器及网络 |
ls | 列出可以管理的项目 |
start/stop/restart | 启动项目/停止项目/重启项目 |
image | 列出项目使用的镜像 |
ps | 显示项目中容器的状态 |
logs | 查看下项目中容器的日志 |
Compose概述
Compose项目是Docker官方的开源项目,负责实现容器集群的快速编排,在Compose中有两个核心概念,分别是服务和项目
---服务(service): 一个应用的容器,实际上可以包括若干运行相同镜像的容器实例.
---项目(project): 由一组关联的应用容器组成的一个完整业务单元,在docker-conpose.yaml文件中定义.
Compose语法
指令 | 说明 |
network | 配置容器连接的网络 |
container_name | 指定容器名称 |
depends_on | 解决容器的依赖,启动先后的问题 |
command | 覆盖容器启动后默认执行的命令 |
environment | 设置环境变量 |
image | 指定为镜像名称或镜像ID |
network_mode | 设置网络模式 |
restart | 容器保护策略[always,no,on-failure] |
ports | 暴露端口信息 |
volume | 数据卷,支持[volume,bind,tmpfs,npipe] |
Harbor仓库
harbor概述
Harbor是在Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括: 提供WEB界面,优化用户体验,支持登录,搜索功能,区分公有,私有镜像,以及基于角色的访问控制,集成日志审计,支持水平扩展等功能.
部署harbor环境非常繁琐,设计到web服务器,数据库服务器,程序代码,docker私有镜像仓库等9个应用.
部署Harbor环境需要的9个应用
1.Docker Engine:Harbor是基于Docker的私有容器镜像仓库,因此需要安装和配置Docker Engine来运行和管理容器。
2.MySQL数据库:Harbor使用MySQL数据库来存储镜像元数据、用户账户和权限信息等数据。
3.Redis数据库:Harbor使用Redis来缓存元数据和会话信息,提高性能和响应速度。
4.NGINX:Harbor使用NGINX作为反向代理服务器,用于负载均衡和SSL终止,以便安全地访问Harbor服务。
5.Clair:Clair是一个开源的容器镜像漏洞扫描工具,用于扫描和分析Harbor中的镜像,检测潜在的安全漏洞。
6.Notary:Notary是一个开源的容器镜像签名和验签工具,用于确保Harbor中的镜像在传输和存储过程中的安全性和完整性。
7.Harbor Core:Harbor的核心组件,提供镜像仓库、用户管理、权限控制等功能。
8.Harbor UI:Harbor的用户界面,提供可视化的操作界面,方便用户管理和使用Harbor服务。
9.Harbor Registry:Harbor的镜像仓库,用于存储和管理容器镜像。
这9个应用为必需的主要应用程序,具体的部署过程与方式请参照harbor官方网站.(如下)
为服务与云原生
微服务架构只是云时代的起点,在微服务兴起之后,人们发现对大规模的容器集群编排管理并不是一件容易的事情.为了解决容器编排调度的问题,各个厂商都推出了自己的解决方案,较流行的容器编排工具包括Docker Swarm, Apache Mesos 和2014年Google开源的Kubernetes
现在kubernetes被公认为云时代的操作系统,软件和硬件的界限越来越模糊,硬件彻底被抽象化,云化了,现如今已经在全力向云原生时代过度莉.