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