最近在交付项目的时候使用了docker,大家都知道日志是项目定位问题的重要依据,但如果一开始项目本身没有对日志进行合理切割那就会导致长时间运行的项目日志文件大得编辑器打不开的情况。这里使用大部分linux都有的logrotate对日志进行每日切割。

这里直接上dockerfile,可以配合备注进行查看

FROM alpine
# 设置时区
RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 安装logrotate
RUN apk add logrotate
# 设置工作目录
WORKDIR /data/
# 编写切割规则
RUN echo "/data/*.log {" >> /data/logrotatenode \
# 按每日为单位进行切割
&& echo " daily" >> /data/logrotatenode \
# 备份保留10份
&& echo " rotate 10" >> /data/logrotatenode \
# 备份以日期结尾
&& echo " dateext" >> /data/logrotatenode \
# 延迟压缩
&& echo " delaycompress" >> /data/logrotatenode \
# 使用压缩
&& echo " compress" >> /data/logrotatenode \
# 文件为空时不转储
&& echo " notifempty" >> /data/logrotatenode \
# 允许文件不存在
&& echo " missingok" >> /data/logrotatenode \
# 截断复制
&& echo " copytruncate" >> /data/logrotatenode \
# 文件达到1k的时候才储
&& echo " size=1k" >> /data/logrotatenode \
&& echo "}" >> ./logrotatenode \
# 写入日志文件进行测试
&& echo "hello worlddata:iVBORw0KGgoAAAANSUhEUgAACsIAAARyCAYAAAAXy3LTAAAMTGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUU0nbnltSSWiBCEgJvYlSpEsJoUUQkCrYCEkgocSYEETsyLIKrgUVEVBXdFXERVdXQNaKvSyKvS8WVJR1sWBD5ZsU0NXz/9/53nPmzpN33nnekrlzZwDQqeVJpbmoLgB5knxZfEQIa0JqGovUBVAwHDCAF3Di8eVSdlxcNIAy2P9b3lwFiLK/5KLk+n78/xU9gVDOBwCJgzhDIOfnQfw7AHgJXyrLB4DoA/XWM/KlSjwJYgMZDBBiqRJnqXGJEmeocZXKJjGeA/EOAMg0Hk+WBYB2C9SzCvhZkEf7OsSuEoFYAoAOGeJAvogngDgS4hF5edOUGNoBh4yveLL+xZkxxMnjZQ1hdS4qIYeK5dJc3sz/sRz/XfJyFYM+7GCjiWSR8cqcYd2u50yLUmIaxD2SjJhYiPUhficWqOwhRqkiRWSS2h415cs5sGaACbGrgBcaBbEpxOGS3JhojT4jUxzOhRiuELRQnM9N1MxdJJSHJWg4a2XT4mMHcaaMw9bMbeTJVH6V9scUOUlsDf91kZA7yP+6SJSYoo4ZoxaIk2Mg1oaYKc9JiFLbYDZFIk7MoI1MEa+M3wZiP6EkIkTNj03JlIXHa+xlefLBfLFFIjE3RoOr80WiVBORw0KGgoAAAANSUhEUgAACsIAAARyCAYAAAAXy3LTAAAMTGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUU0nbnltSSWiBCEgJvYlSpEsJoUUQkCrYCEkgocSYEETsyLIKrgUVEVBXdFXERVdXQNaKvSyKvS8WVJR1sWBD5ZsU0NXz/9/53nPmzpN33nnekrlzZwDQqeVJpbmoLgB5knxZfEQIa0JqGovUBVAwHDCAF3Di8eVSdlxcNIAy2P9b3lwFiLK/5KLk+n78/xU9gVDOBwCJgzhDIOfnQfw7AHgJXyrLB4DoA/XWM/KlSjwJYgMZDBBiqRJnqXGJEmeocZXKJjGeA/EOAMg0Hk+WBYB2C9SzCvhZkEf7OsSuEoFYAoAOGeJAvogngDgS4hF5edOUGNoBh4yveLL+xZkxxMnjZQ1hdS4qIYeK5dJc3sz/sRz/XfJyFYM+7GCjiWSR8cqcYd2u50yLUmIaxD2SjJhYiPUhficWqOwhRqkiRWSS2h415cs5sGaACbGrgBcaBbEpxOGS3JhojT4jUxzOhRiuELRQnM9N1MxdJJSHJWg4a2XT4mMHcaaMw9bMbeTJVH6V9scUOUlsDf91kZA7yP+6SJSYoo4ZoxaIk2Mg1oaYKc9JiFLbYDZFIk7MoI1MEa+M3wZiP6EkIkTNj03JlIXHa+xlefLBfLFFIjE3RoOr80W" > /data/helloworld.log \
# 每分钟执行一次备份
&& echo "* * * * * logrotate -v /data/logrotatenode" >> /etc/crontabs/root
# 启动cron服务 因为本身容器启动并不会额外帮我们启动crond,需要我们进行启动,使用脚本启动是方便后续需要启动项目进程
RUN echo "#!/bin/sh" >> start.sh \
&& echo "crond -b" >> start.sh \
# 休眠是为了hold住父进程,如果父进程退出了容器也会被退出
&& echo "sleep 600" >> start.sh \
&& chmod 777 ./start.sh
ENTRYPOINT ["sh", "-c", "./start.sh"]

生成并运行镜像

# alpinelog 为上面的dockerfile
docker build -f alpinelog -t alpinelog
# 运行容器(不要关闭)
docker run -it alpinelog /bin/sh
# 查看容器id
docker ps -a
# 启动另一个终端 进入容器
docker exec -it 容器id /bin/sh

可以看到日志切割成功

/data # ls -l
total 12
-rw-r--r-- 1 root root 0 Nov 21 15:22 helloworld.log
-rw-r--r-- 1 root root 1423 Nov 21 15:22 helloworld.log-20211121
-rw-r--r-- 1 root root 168 Nov 21 15:21 logrotatenode
-rwxrwxrwx 1 root root 29 Nov 21 15:21 start.sh start.sh

docker:alpine使用logrotate切割日志的更多相关文章

  1. logrotate 切割日志

    在工作中需要切割日志我们项目中选择的系统自带的logrotate,如需要其他需求需要自己在百度一下或者参考: https://www.cnblogs.com/kevingrace/p/6307298. ...

  2. 如何在Centos 7上用Logrotate管理日志文件

    何为Logrotate? Logrotate是一个实用的日志管理工具,旨在简化对系统上生成大量的日志文件进行管理. Logrotate允许自动旋转压缩,删除和邮寄日志文件,从而节省宝贵的磁盘空间. L ...

  3. 利用Linux自带的logrotate管理日志

    日常运维中,经常要对各类日志进行管理,清理,监控,尤其是因为应用bug,在1小时内就能写几十个G日志,导致磁盘爆满,系统挂掉. nohup.out,access.log,catalina.out 本文 ...

  4. nginx按天切割日志

    原文链接:http://www.cnblogs.com/benio/archive/2010/10/13/1849935.html  本文只节选部分内容 Nginx自己没有日志分割的功能,一旦时间过长 ...

  5. Linux下配置Nginx按天切割日志

    Nginx由于轻巧和高效的设计风格,去掉了一些额外的功能,所以它不像apache那样有自动切割日志. 建立一个脚本文件,并保证这个文件有可执行的权限:1.建立一个文件/root/log.nginx.s ...

  6. nginx切割日志脚本

    nginx切割日志脚本 #!/bin/bash #cut nginx log #2018年9月26日14:26:44 #by jiajiezhao ########################## ...

  7. 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志

    如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...

  8. python 多线程日志切割+日志分析

    python 多线程日志切割+日志分析 05/27. 2014 楼主最近刚刚接触python,还是个小菜鸟,没有学习python之前可以说楼主的shell已经算是可以了,但用shell很多东西实现起来 ...

  9. 在Linux下使用logrotate管理日志(转)

    原文地址:http://www.tuicool.com/articles/ieAnMjN logrotate是日志循环管理工具,可以分割日志文件,删除旧的日志文件,创建新的日志文件,循环管理日志从而节 ...

随机推荐

  1. Windows如何搭建SSL通信(非Web)

    自己研究了会儿,把结论发出来给有需要的人 第一步:准备环境 首先需要一台服务器(这不是废话吗),我这边用的windows2003, 还需要一台客户端,我用的是windwos2008 第二步:服务器环境 ...

  2. WebSphere--WAS概念和原理解析

    WebSphere--WAS概念和原理解析--tigergao收录于2021/04/25

  3. python29day

    内容回顾 网络编程 概念 B/S C/S架构 B/S browser server C/S client 装客户端使用的 server远程服务器的 osi七层协议 今日内容 tcp协议的编程 如何在连 ...

  4. Java高并发下多线程编程

    1.创建线程 Java中创建线程主要有三种方式: 继承Thread类创建线程类: 定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此也把run方法称为 ...

  5. 布客·ApacheCN 编程/后端/大数据/人工智能学习资源 2020.9

    公告 ApacheCN 项目的最终目标:五年内备份并翻译 Github 上的所有教程(其实快被我们啃完了,剩下的不多了). 警告各位培训班:对 ApacheCN 宣传文章的举报,也将视为对 Apach ...

  6. 「JOI 2015 Final」舞会

    「JOI 2015 Final」舞会 略微思考一下即可知该过程可以化为一棵树.(3个贵族中选择1个,即新建一个节点连向这3个贵族). 该树的结点个数为\(2n\). 考虑二分答案mid. 判定的是公主 ...

  7. JAVA boolean 类型

    boolean 类型用来存储布尔值,在java中布尔值只有2个,true和false. boolean flag=true; flag=false;

  8. 读取.properties配置文件的方式

    一.Properties类解读: 1.Properties类本质其实还是HashTabe,及底层的实现是HashTable public class Properties extends Hashta ...

  9. Java链式写法

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11613067.html Java 链式写法:详细看代码 package chain; /** ...

  10. drop、truncate、delete的区别

    (1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作. TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独 ...