一、Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有影响。


Docker与虚拟机的区别:


传统虚拟化是站在硬件物理资源的基础上,虚拟出多个OS,然后在OS的基础上构建相对独立的程序运行环境。人称硬件虚拟化。

而Dokcer则是站在操作系统的基础上进行虚拟,显然Dokcer轻量得多,因此其资源占用、性能消耗相比传统虚拟化都有很大优势。人称操作系统层虚拟化。


二、Docker属于C/S架构,是由client客户端、daemon守护进程、image镜像、container容器组成

①镜像与容器的区别:

镜像可以理解为一堆静态的文件,拥有一个或多个只读层。

容器则是镜像run起来之后的一个实例。镜像之于容器就好比面向对象编程里的class之于object。容器=镜像+读写层

一个镜像可创建多个容器,每个容器都有各自的一个可读写层。



②在容器上进行的各种骚操作,会随着容器的销毁而销毁,可使用commit命令来保存,但更推荐使用Dockerfile定制镜像。

commit命令和Dockerfile详解


③容器上的数据以及文件,也会随着容器的销毁而销毁,可使用数据卷和目录挂载来保存。

数据卷和目录挂载详解


三、docker-compose(它还有兄弟:Machine、Swarm[集群])

Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器, Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用容器,非常适合组合使用多个容器进行开发的场景。

来看个栗子

官方quickstart-WordPress


四、CICD



Continuous Integration vs. Continuous Delivery vs. Continuous Deployment



持续集成、持续交付、持续部署



这里讲一下持续集成,顺了两张图:


大致步骤:

①程序猿更新代码到git远程仓库

②Jenkins与git仓库配置有webhook,Git webhook会触发Jenkins服务器自动构建。(webhook与异步编程中"订阅-发布模型"非常类似,一端触发事件,一端监听执行。)

③Jenkins会拉取git仓库某个分支下的最新代码,使用maven插件进行项目构建。

④构建成war包利用ssh插件发送到docker服务器

⑤Jenkins中的构建触发器执行自定义的shell脚本,war包结合Dockerfile定制成docker镜像

⑥run image、push image、邮件通知


推荐一个搭建CI demo(git+docker+maven+registry+jenkins)


当然基于强大的Jenkins插件库,可随项目情况定制合适的CI,成熟

的方案还应该有自动化单元测试、集成测试、端对端测试。

单元测试:针对函数或模块的测试 

集成测试:针对整体产品的某个功能的测试,又称功能测试
端对端测试:从用户界面直达数据库的全链路测试