企业开发进阶-5-DockerAdvance
DockerfileDockerfile 是用来构建 Docker 镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
三部曲
编写 Dockerfile 文件
docker build 命令构建镜像
docker run 依镜像运行容器实例
基础知识
每条保留字指令都必须为大写字母且后面要跟随至少一个参数
指令按照从上到下,顺序执行
# 表示注释
每条指令都会创建一个新的镜像层并对镜像进行提交
执行 Dockerfile 大致流程
docker 从基础镜像运行一个容器
执行一条指令并对容器作出修改
执行类似 docker commit 的操作提交一个新的镜像层
docker 再基于刚提交的镜像运行一个新容器
执行 dockerfile 中的下一条指令直到所有指令都执行完成
小结
Dockerfile 定义了进程需要的一切东西。Dockerfile 涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程
Docker 镜像,在用 Dockerfile 定义一个文件之后,docker build ...
企业开发进阶-5-DockerInstall
安装 Docker安装 Docker安装文档
安装步骤
确定机器是CentOS7及以上版本
1cat /etc/redhat-release
卸载旧版本
12345678sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
yum安装gcc
12yum -y install gccyum -y install gcc-c++
Set up the repository
1yum install -y yum-utils
设置镜像仓库
1yum-config-manager --add-re ...
设计模式-18-备忘录模式
备忘录模式
备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象
备忘录模式属于行为型模式
意图:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
主要解决:
所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
何时使用:
很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态
如何解决:
通过一个备忘录类专门存储对象状态。
关键代码:
客户不与备忘录类耦合,与备忘录管理类耦合。
优点:
给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态
实现了信息的封装,使得用户不需要关心状态的保存细节
缺点:
消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存
使用场景:
需要保存/恢复数据的相关状态场景
提供一个可回滚的操作。
注意事项:
为了符合迪米特原则,还要增加一个管理备忘录的类
为了节约内存,可使用原型模式+备忘录模 ...
设计模式-17-中介者模式
中介者模式
中介者模式是用来降低多个对象和类之间的通信复杂性
模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护
中介者模式属于行为型模式。
意图:
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
主要解决:
对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。
何时使用:
多个类相互耦合,形成了网状结构。
如何解决:
将上述网状结构分离为星型结构。
关键代码:
对象 Colleague 之间的通信封装到一个类中单独处理。
优点:
降低了类的复杂度,将一对多转化成了一对一
各个类之间的解耦
符合迪米特原则。
缺点:
中介者会庞大,变得复杂难以维护。
使用场景:
系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。
注意事项:
不应当在职责混乱的时候使用。
案例说明通过聊 ...
设计模式-16-观察者模式
观察者模式
观察者模式是一种行为型设计模式
它定义了一种一对多的依赖关系,当一个对象的状态发生改变时,其所有依赖者都会收到通知并自动更新。
当对象间存在一对多关系时,则使用观察者模式。比如,当一个对象被修改时,则会自动通知依赖它的对象。
意图:
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
主要解决:
一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。
何时使用:
一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知,进行广播通知。
如何解决:
使用面向对象技术,可以将这种依赖关系弱化。
关键代码:
在抽象类里有一个 ArrayList 存放观察者们。
优点:
观察者和被观察者是抽象耦合的
建立一套触发机制。
缺点:
如果一个被观察者对象有很多的直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间
如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃
观察者模式没有相应的机制让观察者知道所观察的目标对象是怎么 ...
设计模式-15-迭代器模式
迭代器模式
迭代器模式是 Java 和 .Net 编程环境中非常常用的设计模式
用于顺序访问集合对象的元素,不需要知道集合对象的底层表示
迭代器模式属于行为型模式。
意图:
提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。
主要解决:
不同的方式来遍历整个整合对象。
何时使用:
遍历一个聚合对象。
如何解决:
把在元素之间游走的责任交给迭代器,而不是聚合对象。
关键代码:
定义接口:hasNext, next。
应用实例:
JAVA 中的 iterator。
优点:
它支持以不同的方式遍历一个聚合对象
迭代器简化了聚合类
在同一个聚合上可以有多个遍历
在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
缺点:
由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
使用场景:
访问一个聚合对象的内容而无须暴露它的内部表示
需要为聚合对象提供多种遍历方式
为遍历不同的聚合结构提供一个统一的接口。
注意事项:
迭代器模式就是分离了集合对象的遍历行为 ...











