2019-1-17 | 学习 Docker

文章预告:接下来几篇甚至十几篇都会是 Docker 相关的文章。要么是笔记要么教程

2019-1-17 | 学习 Docker

这篇文讲什么

我最近(2019年1月)在做什么 + 目的是什么 + 以及接下来几篇/十几篇博客的预告。

这篇文对谁有用?有什么用?

对谁有用?:额...
有什么用?:┑( ̄Д  ̄)┍

一些小前提

我的技术栈主要是 Ruby on Rails + Vue.js
最近(2018年10月到现在2019年1月)在做微信小程序

一句话总结

我希望后端部署能简单一些,一条命令或者按个按钮就能部署。
同时获得 0 downtime + 容易 scale

学习动机(&碰到的问题)

  1. 部署方便:现在我用 Ruby on Rails 每次要部署到全新的机器上就要装 ruby, rails, nginx, redis, postgresql, 20分钟是肯定跑不掉的了,虽然可以用 shell 脚本简化一些。但还是很烦。

  2. 环境隔离:如果服务器上要跑多个版本的 Rails,也会很麻烦。(但说实话我目前还没碰到这样的场景)

  3. 资源限制:比如想在4核8g内存的机器上限制 Rails 最多用2核4g内存。据我所知如果不用 Docker 目前暂时没有更简单的方式

  4. 我想要 0 downtime 更新代码 + 回滚。
    要简单 + language agnostic。
    rails 生态圈里的 puma 的确可以无 downtime 更新。nginx 的 load balancer 也可以做到。
    但还是觉得不够方便。还是有不少手动操作

  5. 另外 monitoring 和 logging 貌似有不错的方案。
    ELK 想接触一下。

我现在 0 downtime 部署代码的方式很费时,累,我觉得很蠢。

我现在在服务器上跑2份 Ruby on Rails,一份在9292端口 ,一份在9696端口,
nginx 用 upstream 指向其中一个。比如现在指向9292,然后我想更新代码。

第一步: git commit & push
第二步: mina deploy --verbose。
第三步: ssh 到服务器上 ps axu | grep puma
第四步: kill -9 杀掉 9696 的 Rails。然后重新跑起来。
第五步: 修改 nginx 配置文件指向 9696 端口。
第六步: sudo nginx -t 确认配置文件没写错
第七步: sudo nginx -s reload

一整个流程要花掉我3-5分钟不说,还很手工。一天更新个几次我就很不耐烦

Docker 从 2013 年就出了。现在 2019 年了。是时候学习了

全文完

感谢阅读。接下来可能几篇甚至十几篇文章都会是 Docker。
因为国内的中文资料我还是感觉偏少。