端口映射与容器互联
写在前面在前面我们已经掌握了单个容器的管理操作,但是在实际工作中很少是只运行一个容器,而更多的是需要运行多个容器进行协作的情况,因此就需要多个容器之间能够互相访问到对方的服务,那么本篇文章就来学习Docker端口映射与容器互联相关的知识,注意本文所提到的宿主机是指VMware虚拟机,而非本地的Windows系统主机。
端口映射Docker除了通过网络访问外,还提供了其他两个非常方便的功能来满足服务访问的基本需求,一是允许映射容器内应用的服务端口到本地宿主机端口;二是使用互联机制来实现多个容器间通过容器名来快速访问。
从外部访问容器应用 请注意,开发者在启动容器的时候,如果不指定对应的参数,那么在容器外部是无法通过网络来访问容器内的网络应用和服务的。 当容器中运行一些网络应用,要让外部访问这些应用的时候,可以通过-P或者-p参数来指定端口映射。当使用-P(大写)的时候,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口:
12345[root@envythink ~]# docker run -d --name eyou -P training/webap ...
Docker数据管理
写在前面在前面我们详细学习了docker的三大核心概念:镜像、容器和仓库,接下来开始学习如何管理数据。在实际工作中使用docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,此时必然会使用到容器数据管理的各种操作。
容器中的数据管理主要有两种方式:(1)数据卷(Data Volumes),表示容器内数据直接映射到本地主机环境;(2)数据卷容器(Data Volume Containers),表示使用特定容器维护数据卷。
本篇就来学习docker数据管理相关的知识,首先会介绍如何在容器内创建数据卷,并且把本地目录或者文件挂载到容器内的数据卷中,接着介绍如何使用数据卷容器在容器和宿主机、容器和容器之间共享数据,并实现数据的备份和恢复。
数据卷数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将宿主机操作系统目录直接映射进容器,有点类似于Linux操作系统中的mount行为。
数据卷特性数据卷提供很多特性,包括且不限于以下几点:(1)数据卷可以在容器之间共享和重用,容器间传递数据将变得高效与方便;(2)无论是容器内操作还是本地操作,用户对数据卷内数据的修改 ...
Docker仓库
写在前面Docker三个核心概念已经详细学习了前两个,接下来学习第三个概念—仓库(Repository)。仓库是集中存放镜像的地方,它分为公共仓库和私有仓库。注意仓库(Repository)和注册服务器(Registry)两者是不同的,实际上注册服务器是存放仓库的具体服务器,一个注册服务器上可以有多个仓库,每个仓库下面有多个镜像,因此你完全可以将仓库理解为是注册服务器上的一个具体的项目或目录。举个例子,对于地址为private-docker.com/ubuntu的仓库来说,前面的private-docker.com是注册服务器地址;后者的ubuntu是仓库名称。通过上面的简单介绍,相信开发者已经对仓库和注册服务器有了基本的认识。在本文中将介绍如何使用Docker Hub官方仓库进行登录、下载、上传等操作,如何使用国内社区提供的仓库来下载镜像,创建和使用私有仓库的相关操作。
Docker Hub官方仓库Docker Hub是Docker官方提供的最大公共镜像仓库。一般来说,开发者需要的镜像都可以在Docker Hub官方仓库上找得到并直接下载。
登录开发者可以执行docker login ...
操作Docker容器
写在前面在前面我们学习了docker镜像相关的知识,接下来再来学习另一个核心概念—容器。容器是镜像的一个运行实例,所不同的是,镜像是静态的只读文件,而容器则是带有运行时需要的可写文件层,同时容器中的应用进程处于运行状态。
可以将其类比到面向对象编程中的对象和类的关系,其中类实例化出对象,正如这里的容器是镜像的一个运行实例一般。
如果认为虚拟机是模拟运行的一整套操作系统,包括内核、应用运行环境、其他系统环境以及跑在上面的应用;那么Docker容器就是独立运行的一个或者一组运用,以及它们必需的运行环境。
接下将围绕容器来进行学习,主要包含创建、启动、终止、删除容器,进入容器内执行操作、通过导入导出操作实现容器迁移等内容。
创建容器用户可以理解为对容器的操作就像直接操作应用一般,非常简单且快速。
新建容器开发者可以使用docker create [container]命令来新建一个容器。
举个例子,开发者可以使用ubuntu:latest镜像创建一个容器,使用的命令如下:
12345[root@envythink ~]# docker create -it ubuntu:latestdffc ...
使用Docker镜像
写在前面镜像是Docker三大核心概念中最重要的一部分,而Docker运行容器前需要本地存在对应的镜像,如果镜像不存在,Docker会尝试从默认的镜像仓库中下载(默认使用Docker Hub公共注册服务器的仓库),用户也可以通过配置来使用自定义的镜像仓库,笔者在前面就自定义了镜像仓库。
既然镜像这么重要,那么本篇就围绕镜像这一核心概念来具体介绍相关操作:(1)如何使用pull命令从Docker Hub仓库中下载镜像到本地;(2)如何查看本地已有的镜像信息和管理镜像标签;(3)如何在远端仓库中使用search命令进行搜索和过滤;(4)如何删除镜像标签和镜像文件;(5)如何创建用户定制的镜像并且保存为外部文件;(6)如何往Docker Hub仓库中推送自己的镜像。
获取镜像镜像是运行容器的前提,因此首先是需要获取镜像,开发者可以使用docker [image] pull命令直接从官方的Docker Hub网站上进行获取,该命令的格式为docker [image] pull NAME[:TAG],其中NAME是镜像仓库名称,用来区分镜像,而TAG则是镜像的标签,一般用来表示版本信息,因此通常 ...
Docker与容器
写在前面从19年初开始使用Docker到现在差不到两年了,感觉对于Docker的认识还停留在使用的阶段,各个知识点串联度不够,没有形成一个体系,因此打算抽出一些时间来系统学习Docker,以便在后续使用的时候更加得心应手。本篇首先学习Docker是什么,之后会剖析Docker和相关容器技术,以及它在DevOps等运用场景所带来的巨大便利,最后学习Docker在整个虚拟化领域中的技术定位。
虚拟技术我们知道在主机时代比拼的是单个服务器的性能,如CPU主频和内存的强弱,而在云时代,最为看中的则是凭借虚拟化技术所构建的集群处理能力。从传统来看,虚拟化既可以通过硬件模拟来实现,也可以通过操作系统软件来实现。而容器技术则更优雅,它充分利用了操作系统本身已有的机制和特性,可以实现远超虚拟机的轻量级虚拟化。因此有人甚至将其称为“新一代的虚拟化”技术,并将基于容器打造的云平台亲切的称为“容器云”。
什么是DockerDocker是基于Go语言开发的开源容器项目,它诞生于2013年。现在主流的操作系统包括Linux的各大发行版、macOS、Windows等都已经支持Docker。
Docker的构想是要 ...
规则持久化存储
写在前面前面我们通过一个入门的demo来演示了如何使用Sentinel来实现接口的限流,其实它只是流控规则的一种实现,流控规则除了基于QPS和并发数以外,还支持调用关系的流量控制,但是这都不是本文的重点。本文主要介绍基于流控规则的QPS方式,如何将之前使用的流控规则进行持久化存储。
规则持久化现在系统出了一个bug,需要重启sentinel-hello服务,然后你会发现一个神奇的现象,就是之前开发者在sentinel-dashboard页面配置的限流规则居然不见了,而且该微服务显示处于“失联”状态:
因此现在需要做的就是对限流规则进行持久化操作,那么如何进行持久化呢?往下看,并阅读 官方文档 进行了解。
从官方文档中可以看出,我们上面讲到的持久化,其实是动态规则扩展里面的外部配置源扩展,接下来就详细学习这个外部配置源扩展。不过在此之前有必要先对动态规则扩展进行一个学习,并通过流控规则基于QPS实现这一例子,来介绍规则持久化存储。
内存态扩展内存态扩展就是直接通过使用API来直接修改规则,Sentinel提供了以下5个API来修改不同的规则:
12345FlowRuleManager. ...
实现接口限流
写在前面我们知道随着微服务应用的增多,服务与服务之间的稳定性就显得越来越重要,否则极易出现由于某个服务出现问题而导致其余服务全部崩溃的雪崩效应发生。在前面学习Spring Cloud的时候,我们知道了如何使用Hystrix来进行服务熔断和降级,但是由于Netflix已经宣布Hystrix不再更新,那么我们就需要选择一个它的替代品,除了官方推荐的resilience4j外,Spring Cloud Alibaba旗下的Sentinel也是备受关注。
Sentinel介绍Sentinel以流量为切入点,从流量控制、熔断降级、系统负载保存等多个维度来保护服务的稳定性。仅仅通过本篇文章是无法掌握和使用Sentinel的,因此我会用后续几篇文章来深入理解Sentinel,本文主要介绍如何使用Sentinel来实现接口限流。
Sentinel特点(1)丰富的应用场景。Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应用等。(2)完备的实时监控。Sentinel还提供实时的监控功能,使得开发者可以在 ...
Open API、存储和集群部署
写在前面前面通过两篇文章的学习,已经对Nacos有了一个较为初步的认识和使用,接下来开始学习Nacos的Open API、数据持久化、监控、集群部署、Nacos Docker等知识。
Open API我们知道Nacos提供了可视化界面,一般来说可视化的系统都提供了一套可供程序调用的API,自然Nacos也不例外。Nacos提供了一套较为完整的API接口,开发者可以通过这些接口便能很方便的基于Nacos进行二次开发。
配置管理Nacos对于配置管理提供了4个接口,分别用于获取、监听、发布和删除配置,这里以获取配置接口为例进行介绍。
获取配置请注意这里采用标准的API格式进行书写:(1)描述:获取Nacos上的配置;(2)请求类型:GET;(3)请求URL:/nacos/v1/cs/configs;(4)请求参数:
名称
类型
是否必须
描述
tenant
string
否
租户信息 ,对应于Nacos的命名空间ID字段
dataId
string
是
配置集ID
group
string
是
配置分组
(5)返回配置:
类型
描述
:——–:
: ...
实现配置中心
写在前面在前面分析Nacos的pom.xml依赖文件时,我们发现Nacos不仅支持Eureka的服务发现与注册外,还具有Ribbon的客户端负载均衡、Config的分布式配置等功能。那么本篇就来学习最后的一个功能,如何使用Nacos实现配置中心这一目的。
通过Nacos的配置管理,开发者可以将整个架构体系中的所有配置都集中在Nacos中进行存储。
快速入门接下来将演示如何使用Nacos实现配置中心,主要包括如何在Nacos中创建配置内容和如何在Spring Cloud应用中加载Nacos配置中心的配置信息。
创建配置请注意这里依旧不像之前在学习Spring Cloud Config实现配置中心时那样,需要先创建一个Spring Boot应用作为config-server,那是因为这里的Nacos既是一个“eureka-server”项目,还是一个“config-server”项目,因此配置中心服务端项目其实可以复用之前的nacos-server-1.3.1,但是需要进行一些配置修改,如下所示:
第一步,启动Nacos服务端,点击左侧的配置管理—>配置列表,然后点击右上角的“+”按 ...
