文章目录

建议大家在下面的规范指导下对docker进行操作,以保证服务的稳定性.

1、环境变量命名必须匹配c标准,matching regex [A-Za-z][A-Za-z0-9]* ,建议环境变量统一使用大写字母。

2、测试到生产应使用同一镜像。

3、容器应无状态完全自理,容器间不应有启动顺序要求(应用有需求的,请容器内自行构建重试等待机制),容器启动后的所有初始化操作需要在容器内部完成,启动后使用kuberctl exec,doker cp,docker exec等操作进行容器初始化配置是不可取和不被允许的。

4、小文件载入请使用Configmap,Configmap 只能存储配置文件等小文件(强烈建议不要存储代码),图片,二进制文件,压缩包及其它超过20k的大文件务必不能放入Configmap(容器内configmap注入文件的目录必须为空目录,否则目录内原内容会被覆盖),可以通过容器启动脚本自行在容器启动后从ftp tfs等处拉取。

5、容器内需要保持无状态,需要持久化的数据请放入持久化数据卷中,需要持久化存储的应用请联系运维部门申请,不能使用宿主机目录挂载到容器。

6、一个pod内的容器必然在一台宿主机上,对同pod内容器的网络调用,请使用127.0.0.1,对其它服务的非dubbo调用(如mysql),请尽量使用域名。

7、发布的线上镜像文件中需要指明每个容器中所有监听的端口(containerPort),svc目前只能使用nodeport暴露方式,nodeport端口仅需配置整个项目要对外提供服务的端口如tomcat默认开放8005 8009 8080 三个端口,nodeport只需要配置需要暴露给pod外部的8080端口。
对于web应用,对外暴露的端口统一为80

8、如果容器内应用需要与外部应用双向发起连接,请先与运维部门沟通。

9、必须指明相对准确的每个容器平均使用资源与最大资源限制。

10、livenessProbe与readinessProbe探针至少配置一个,务必配置准确有效,否则可能产生严重影响,http返回值健康值只能是200。

11、对外提供服务的容器(如nginx容器,及nginx直接转发流量的容器)务必配置readinessProbe(优先配置7层检查)。

只通过dubbo调用的服务,不对外直接提供服务的容器(如web realtime),从有利debug角度考虑,只需配置livenessProbe(容器务必开放一个可以反应容器状态的端口)。

12、每次发布的镜像需要统一tag,没有升级的组件的镜像需要重新打一个新版本的tag。
每次发布均需要对tag增1,线上至少保留8-10个最近版本的发布镜像。

13、容器输入参数尽量使用环境变量的形式,不建议CMD加参数(方便configmap统一配置)。

文章目录
Fork me on GitHub