Docker 初探与持续部署

date
Dec 12, 2016
slug
try-the-docker
status
Published
tags
Computer
summary
type
Post

Docker 初探

前段时间在翻新服务器的时候稍微搞了下 docker,然后发现以前对容器的理解完全是错的,最近稍微系统学了点,这里记录下浅显的东西。
  • image 只是文件层的东西,相当于 /root 下的文件,相当于一个可以随时被 chroot 的文件系统。
  • 同上,image 的 build 过程实际上就是 build 文件系统的过程。build 出来之后就可以直接使用了,与环境无关(但是内核依然是系统的内核?)
  • 镜像不可变,容器内容有更新都可以 commit 出一个全新的镜像。所以要尽可能的把变的东西放在容器外面,作为 volumn 挂载(比如数据库的物理层,log 文件,配置文件等)。
  • 容器之间可以连接,就可以通过虚拟网桥通讯,并且会自动设置 hosts 与环境变量。
用起来感觉容器最大的好处就是减少了配置和分发部署的成本。以前配服务器需要好久而且和发行版有关。现在真正做到一键部署。

持续部署

之前在个人项目里面尝试过持续部署。
是基于 github 的 webhook(基于 caddy),我这边推了代码,服务器接到通知,拉代码,然后跑脚本部署。
其实可用性也是很高,也很方便。不过没有一个地方可以看 log,而且也不方便做服务器迁移,而且各个部分耦合度很高,不好做 dockerize。
后来考虑把服务器容器化之后就开始想着如何做持续部署了,这个时候在做一个 hitokoto 的玩具。由三部分组成:
  1. PostgreSQL 数据库(以及一堆 SQL 脚本)
  1. node 服务,起一个 API 服务器处理各种请求。
  1. 前端,最后会 build 成静态文件。
  1. web server 分发前后端流量。
最后选择的平台是 Docker cloud/Dao cloud。
这两个平台都有 service/stack 的概念,大概就是单个容器即服务,多个服务组成一个应用栈。配置文件和 docker compose 的差不多,但是平台会自动帮你更新(重新部署)服务,可以很方便的做整个应用的管理。
上面两个平台的好处是可以自动帮你 build docker image(基于 webhook),而且 image 更新了还可以自动做 redeploy。总之,不太需要做什么就完成了自动部署。
至于前端方面,觉得没有必要加一层容器,考虑的是在 CI 构建,并直接推代码到 volumn 里面去。测试补全了,也可以让其他服务在 CI 先测试,然后部署。最后选择了 circleci,因为 travis ci 要给 ssh key 的话要钱……不过感觉 circle ci 其他方面都要弱好多。

© 连城究 2021