Hostname 临时修改(需要开启新的会话) [root@localhost ~]hostname test123 永久修改 [root@localhost ~]# vim /etc/hostname localhost.localdomain OS Directory Detail / #根目录,起点。 etc # 系统和应用的配置文件 home #普通用户的家目录 bin #可执行二进制文件 (系统指令) bin -> /usr/bin sbin #可执行二进制文件(超级用户指令)sbin -> /usr/sbin usr # 可执行二进制文件(用户程序) boot #系统引导目录(存放系统引导文件) lib # 系统库文件 tmp #临时文件(此自带定时清理机制,不适合存放需要长期持久化的数据) var #系统日志(/var/log)、帮助文档、比较杂乱。 proc #保存进程的动态信息(内存使用率、CPU使用率等…) sys #/proc类似,是一个虚拟的文件系统,主要记录与系统核心相关的信息(系统当前已经载入的模块信息等,这个目录实际不占磁盘容量)。 dev....
软件架构的进化 软件架构是在软件的内部,经过综合各种因素的考量、权衡,选择特定的技术,将系统划分成不同的部分并使这些部分相互分工,彼此写作,为用户提高需要的价值。 因素考量 业务需求 技术栈 成本 可扩展性 组织架构(分工) 可维护性 架构进化史 一层架构 -> MVC -> Dubbo 单体架构 功能、业务集中在一个发布包里,部署运行在同一个进程中。 易于开发 易于测试 易于部署 易于水平伸缩(新建服务器、配置好环境、复制软件包) 致命的硬伤: 代码膨胀、难以维护。(分析、定位、修复、成本高) 构建、部署成本大 新人上手困难 创新困难 可扩展性差 微服务间如何通讯 通讯模式角度考虑 xxx一对一一对多 同步请求响应模式,最常见—— 异步通知/请求异步响应发布订阅/发布异步响应 从通讯协议角度考虑 REST API RPC(dubbo、dubbox、motan、grpc、thrift) MQ (发布订阅模式) 如何选择RPC框架 I/O、线程调度模型(NIO、BIO、长连接、短连接、单线程、多线程、线程调度算法的性能如何) 序列化与反....
分布式系统中多容器管理的困难 生产环境中同一种类型的容器往往散落在各个主机节点上,因此无法回避下列问题: 怎么去管理这么多容器? 怎么能方便的横向扩展? 如果容器down了,怎么能自动恢复? 如何去更新容器而不影响业务? 如何去监控追踪这些容器? 怎么去调度容器的创建? 保护隐私数据? Docker Swarm Mode Architecture 综上所述,容器编排应运而生,docker的容器编排工具的实现有很多,只不过swarm是内置于docker的容器编排工具,由docker公司内置到docker中。 Service & Replicas * 在docker swarm模式下Service的概念和Docker Compose中的概念基本一致。 * 在Replicas横向扩展模式下,每个Replicas都是一个实际的容器,每个容器都会根据调度系统的计算,被分配在不同的node上运行。也就是说,通过Swarm Manager部署去部署一个Service时候,其实是不知道容器最终会运行在哪些swarm节点上的,这取决于Swarm的调度算法的计算结果(例如:根据节点....
多容器的APP的痛点 要从Dockerfile build image或者Dockerhub拉取iage 要创建多个container 要管理这些container(启动停止删除) 一个应用可能由多个容器之间相互配合完成,追个容器进行管理成本高,将多个容器定义为一个组,对组进行统一的管理。 微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。 Docker Compose简介 使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。 Docker Compose是一个工具。 这个工具可以通过yml文件定义多容器的docker APP。 通过一条命令就可以根据yml文件的定义去创建或管理多容器。 yml概念 Services 一个service代表一个container,这个container可以从dockerhub的image创建而来,或是从本地的Dockerfile build构建的image创建而来。 Service的....
Container Layer 数据默认会写在Container Layer层,如果删除容器则应用数据也会随之消失,应用数据的生命周期随容器的生命周期。 Docker持久化数据的方案 基于本地文件系统的Volume。可以在执行Docker create或Docker run时,通过-v参数将主机的目录作为容器的数据卷。 基于plugin的Volume,支持第三方的存储方案,比如NAS,AWS。 数据持久化:Data Volume * 受管理的Data Volume,由docker后台自动创建。 * 绑定挂载的Volume,具体挂载位置可以由用户指定。 不管以上哪种方式都需要在Dockerfile内指定VOLUME。 [root@localhost ~]# docker run -d --name mysql -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql # 查看volume [root@localhost ~]# docker volume ls local d4c4991c29f14a193f87460de0b847ec30f5f4d1....
私有镜像仓库 开通镜像服务 登录阿里云开通容器镜像服务。点击管理控制台-》初次使用会提示开通,然后设置密码。 点击管理 # 登录阿里云Docker Registry docker login --username=soulboy1990116 registry.cn-shanghai.aliyuncs.com # 从Registry中拉取镜像(拉取) [root@localhost ~]# docker pull registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world flask-hello-world: Pulling from abc1024/soulboy_images [root@localhost ~]# docker run -d -p 5000:5000 registry.cn-shanghai.aliyuncs.com/abc1024/soulboy_images:flask-hello-world Digest: sha256:8c4f6441a730d5abff5838....
Linux namespace 的概念 Linux 内核从版本 2.4.19 开始陆续引入了 namespace 的概念。其目的是将某个特定的全局系统资源(global system resource)通过抽象方法使得namespace 中的进程看起来拥有它们自己的隔离的全局系统资源实例(The purpose of each namespace is to wrap a particular global system resource in an abstraction that makes it appear to the processes within the namespace that they have their own isolated instance of the global resource. )。Linux 内核中实现了六种 namespace,按照引入的先后顺序,列表如下: namespace 引入的相关内核版本 被隔离的全局系统资源 在容器语境下的隔离效果 Mount namespaces Linux 2.4.19 ....