docker 高可用性的一些注意点

1.重启策略

no 不要自动重启容器。(默认)

on-failure 如果容器由于错误而退出,则重新启动容器,该错误表现为非零退出代码。

unless-stopped 除非显式停止或停止或重新启动Docker本身,否则重新启动容器。

always 如果容器停止,请务必重启容器。

注意:在docker run 或者 service 后面追加 --restart always 服务器重启

 

2.更新部分命令

docker update

https://docs.docker.com/engine/reference/commandline/update/#description

如更新容器重启命令

docker restart 容器id --restart always

 

3.利用自定义网络来实现容器间的互通(来代替原有的命令 --link)(服务少的情况下使用这种)

https://docs.docker.com/network/bridge/#differences-between-user-defined-bridges-and-the-default-bridge

创建子网络 docker network create my-net

docker create --name my-nginx \ --network my-net \ --publish 8080:80 \ nginx:latest

删除子网络 docker network rm my-net

将已经运行的容器连入该网络 docker network connect my-net my-nginx my-net 子网络名称 my-nginx 容器名称

断开网络连接 docker network disconnect my-net my-nginx

 

4.docker 统一时差

1.启动容器时,和主机同步

docker run -v /etc/localtime:/etc/localtime:ro

2.在打包时的dockerfile中添加

ENV TZ=Asia/Shanghai

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

 

5.docker 程序设置为自启

 systemctl start docker.service docker 服务启动

 sudo systemctl enable docker 开机自启

 

6.docker json-file日志导出

 docker logs 容器id >& 宿主机日志地址

 

7.如何保证节点间的正常通信(推荐使用这种,在服务多的情况下)

 可以采用overlay网络模式

1.创建网络(swarm上的可以在主节点上构建网络)

docker network create --driver overlay [自定义网络名称]

2.运行服务时指定网络名称

docker service create --replicas 1 --name redis redis:latest --network [自定义网络名称]

replicas为实例数目

 

8.docker swarm的服务拓展

可以使用scale命令来实现服务的伸缩

如: docker service scale [服务名称]=[实例数]

docker service scale redis=3

备注:

1.在扩展实例的过程中,原先的实例不会停止,会保证原有的运行

2.在减少实例的过程中,减少的那个实例会存在访问中断的情况

3.实例所运行的日志,如果采用默认的jsonfile则只会在leader主节点上看到该情况(建议使用flutend来实现收集日志)

4.对于数据库的持久化操作不要采用 service的方式进行,建议直接运行容器即可

5.如果实例被迫停止了,那么swarm会自动在启动一个服务,维持实例数不变

 

9.docker 限制内存

1.运行容器时限定,memory-swap代表进程内申请的内存 -m代表容器运行时的内存

-m 300M --memory-swap=300M

2.若是 swarm 的service

--limit-memory 300M

3.关于容器内部 若采用的虚拟机

3.1 比如java 设置jvm

在dockerfile文件内如下

ENTRYPOINT exec java $JAVA_OPTS -jar -Xms128m -Xmx256m xx.jar

xms和xmx代表最小和最大内存,一般最大是最小的 2,4倍

如果不知道自己的应用程序的内存大致占多少,那么可以通过动态感知来做

-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap

 

3.2 比如nodejs 设置新生代和老年代的堆大小

使用 max_old_space_size

关于内存泄漏的诊断可以参考下面这个链接

https://cloud.tencent.com/developer/article/1120021

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值