常见的镜像在Docker Hub就能找到,但是要部署自己的服务可能需要自己构建镜像。构建镜像可以使用Dockerfile。Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。 镜像结构 镜像是将应用程序及其需要的系统函数库、环境、配置、依赖打包而成。 以MySQL镜像的组成结构为例: 镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。构建镜像,其实就是实现上述打包的过程。 语法 构建自定义的镜像时,并不需要一个个文件去拷贝,打包。我们只需要告诉Docker,镜像的组成,需要哪些BaseImage、需要拷贝什么文件、需要...

容器状态 Docker容器一般会有以下三种状态: 运行:进程正常运行。 暂停:进程暂停,CPU不再运行,但不会释放内存。 停止:进程终止,回收进程占用的内存、CPU等资源。 相关的命令如下: 命令 说明 docker run 创建并运行一个容器,正常情况下处于运行状态。 docker pause 让一个运行的容器暂停。例如docker pause my-debian。 docker unpause 让一个容器从暂停状态恢复运行。例如docker unpause my-debian。 docker stop 停止一个运行的容器。例如docker stop my-debian。 docker start 让一个停止的容器再次运行。例如...

拉取镜像 在使用容器前,需要先获取相对应的镜像。例如要在Docker中安装MySQL 5.7,需要先获取MySQL 5.7的Docker镜像。相应的命令为: 1docker pull mysql:5.7 命令的本质意思为,从Docker镜像仓库中获取版本为5.7的MySQL镜像。 在Docker中镜像的标识由两部分组成: Repository:通常是由镜像主要运行的软件名称组成。例如Tomcat的镜像的Repository就是tomcat。 Tag:通常代表镜像的版本。在没有显式指定Tag的情况下,Docker会给Tag一个默认值latest,代表当前镜像的最新版本。 例如拉取MySQL最新版本的镜像: 1docker pull...

DockerHub是一个官方的Docker镜像的托管平台,里面存放了人们配置好的镜像。这样的平台称为Docker Registry。 国内也有这样的Docker仓库,它们被称为Docker的镜像仓库或镜像源。这些镜像源都是与Docker官方仓库同步的。 例如导入腾讯的镜像源: 修改/etc/docker/daemon.json配置文件: 1vim /etc/docker/daemon.json 添加以下内容,并保存: 1{ 2 "registry-mirrors": [ 3 "https://mirror.ccs.tencentyun.com" 4 ] 5} 重启Docker: 1sudo systemctl restart...

分布式系统的部署问题 大多数Web服务都是运行在Linux系统之上,因为Linux开源、免费、安全、稳定等等。Linux计算机的架构大致如图: 计算机硬件:例如CPU、内存、磁盘等。 系统内核:所有Linux发行版的内核都是Linux。内核可以与计算机硬件交互,对外提供内核指令,用于操作计算机硬件。 系统应用:操作系统本身提供的应用、函数库。这些函数库是对内核指令的封装,使系统用起来更加方便。 应用与Linux计算机交互过程大致为: 应用调用操作系统应用(函数库),实现各种功能。 系统函数库是对内核指令集的封装,会调用内核指令。 内核指令操作计算机硬件。 Linux的发行版有很多很多,例如Debain、Ubuntu、CentOS等...

Eureka 服务注册中心 Eureka架构下将服务分为以下两个角色: 注册中心(Eureka Server,服务端)。 客户端(Eureka Client)。 Eureka会将客户端(即服务)的信息进行注册,让客户端可以通过Eureka注册中心获取服务信息并进行调用。 Eureka的作用: 注册服务信息:服务提供者启动时向Eureka注册自己的信息,Eureka保存这些服务信息到服务列表中。 获取服务信息:服务消费者根据服务名称向Eureka拉取服务列表。 负载均衡:有多个服务提供者时,服务消费者利用负载均衡算法,从Eureka注册的服务列表中挑选一个服务后发起远程调用。 感知服务健康状态: 服务提供者会每隔30秒向Eureka...

尽管使用了注册中心来解决URL的硬编码等问题,但是如今使用RestTemplate还是存在以下问题: 代码可读性差,编程体验不统一; 参数复杂URL难以维护。 Feign是一个声明式的HTTP客户端,作用于服务消费者,在服务消费者中为服务提供者创建一个HTTP远程调用。官方地址:https://github.com/OpenFeign/feign。其作用就是帮助我们优雅的实现HTTP请求的发送,解决上面提到的问题。 使用 Feign 使用Feign非常简单,大致分为以下步骤: 在pom.xml中引入Feign客户端依赖: 1<dependency> 2...

网关 网关是所有微服务的统一入口。网关的核心功能特性: 请求路由:一切请求都必须先经过网关,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当路由的目标服务有多个时,还需要做负载均衡。 权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。 限流:当请求流量过高时,在网关中按照下流的微服务能够接受的速度来放行请求,避免服务压力过大。 在SpringCloud中网关的实现包括两种: Gateway:基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。 Zuul:基于Servlet的实现,属于阻塞式编程。 Spring Cloud Gateway旨在为...

部署 Nacos Server 安装和配置好Nacos后,在nacos的bin目录中使用脚本启动: Windows: 单机启动: 1startup.cmd -m standalone Linux: 单机启动: 1sh startup.sh -m standalone 在浏览器中使用对应的IP和端口访问,如http://localhost:8848/nacos。 默认账号和密码均为nacos。 更多Nacos的部署方式:Nacos 部署 服务注册中心 Nacos 客户端依赖 父工程: 1<!-- 2 Spring Cloud Alibaba 3 包含了Nacos的版本管理 4 --> 5<dependency> 6...

微服务远程调用 在微服务架构中,不同微服务都应该有自己独立的数据库以减少服务之间的冗余。而不同的服务之间可能需要共享数据。但拆分后的服务,它们的数据库是相互独立的,一个服务不可能去调用另一个服务的数据库,所以服务之间的信息共享成为一个问题。 为了解决服务之间的信息共享,微服务通过将业务暴露为接口,以供其它微服务使用。这种服务调用方式与用户调用服务的方式是相同的,都是通过URL来远程调用接口。 在微服务远程调用中,有一下两种角色: 服务提供者(Provider):一次业务中,被其它微服务调用的服务。 即提供接口给其它微服务的服务。 服务消费者(Consumer):一次业务中,调用其它微服务的服务。 即调用其它微服务提供的接口的服务。...