首先 为什么需要Docker?
在资管公司进行软件开发,按照监管要求分成开发环境、测试环境和生产环境。开发人员在开发环境不断开发迭代新的功能,放到测试环境交由用户测试,验收后再部署到生产环境中。不管怎么努力,因为基础设施和资源等的天然不同,这几个环境之间总是存在着或多或少的差异,在部署和运行时会出现各种各样的问题。基于此,团队开始尝试使用Docker。
Docker可以帮助解决以下的两个重要问题:
不同环境的差异带来的部署和运行的挑战,例如安装的依赖包版本不同
一个工具往往由多个组件构成,彼此之间版本不尽相同,把它们连接在一起同时运行可能会碰到未知的问题
先记住几个关键词
dockerfile
image
registry
container
host
dockerfile是image的源代码
docker是dockerfile的编译器,生成可执行的image
运行起来的进程就是docker container
Docker的工作原理
将运行环境和业务代码一起打包成image
如果之后需要反复使用,可以将image上传到registry。registry可以是public,也可以是private。
通过image可以创建container,container和image一一对应
最后将container放在host上,一个host可以同时放多个container
在实际工作中的应用
Ask: 在测试环境中同时运行1.0和1.1两个版本
Solution: 为这两个版本分别build image并创建container,放在UAT host上。访问时可以通过端口号 (同一host) 或不同IP地址 (不同host)来区分。
Reference
什么是Docker?看这一篇干货文章就够了! - 知乎 (zhihu.com)
现代软件开发的一大目的就是隔离,应用程序在运行时相互独立互不干扰 ... 其中一种解决方案就是上面提到的虚拟机技术,通过将应用程序部署在不同的虚拟机中从而实现隔离。容器技术 只隔离应用程序的运行时环境但容器之间可以共享同一个操作系统,这里的运行时环境指的是程序运行依赖的各种库以及配置。