一。运维角度:
(一)镜像:
1. 避免依赖过深。不要在基础镜像上加太多产生其他的镜像,我觉得这块最多是三四层。
一层是base景像再往上是工具、中间件这样的,再往上一层就是你自己的程序,再多就比较乱了。
Base image是CentOS 7
2. 镜像越小越好,消耗的资源越少越好
3. 根据应用的差异化,建多个基础镜像
4. 镜像构建这块,一定要从Dockerfile生成,这样做最大的好处是可以通过Dockerfile“阅读”镜像。
在后续的协作、升级维护等方面会带来巨大的便利。如果不从Dockerfile生成,以后更新、回滚是很麻烦的。
我用Dockerfile生成的时候,其他的人可以通过Dockerfile或者镜像就可以阅读这个镜像是怎么来的。
哪个镜像是base镜像,中间加了哪些软件,运行什么东西
5.镜像管理这块,虽然我们应用的是原生的,但是这几项只要跟数据有关系的都要考虑。
单点问题,暂时我们用的是一台机器,不是很安全,对应的解决方案可以考虑DRBD、分布式存储以及云存储。
性能问题,主要是下载加速,目前可用的解决方案是通过HTTP反向代理缓存来加速Layer的下载。
权限问题,可以用Nginx LUA提供一个简单快速的实现方案
(二)日志管理:
日志管理的话,如果把日志放在容器里面,由于容器是无状态的,所以存储在容器内的日志会随着容器的销毁而消失。
你要把日志实时保存下来,或者把日志放在宿主机,但是放在宿主机的话,有点违反Docker化不依赖宿主机的任何环境的要求。
建议放一些日志收集工具如Logstash或者Flume等。
(三)RC配置
1. 多实例运行,我们的机器可够跑多个实例的,启动的时候每个实例的占的内存和CPU都要考虑一下
(四)内核参数的调整:
1. ulimit
2. dns
3. ....
二。开发角度:
(一)
1. 程序放在容器里的话,这个程序至少应该是无状态的,不能依赖于宿主机的一切环境,如目录、IP
2. 以前如果用正常开发的话,root是不让用的,用Docker就可以