最近在交付项目的时候使用了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. 字体替换 re.sub

    dic={'hqo3r': '迎', 'hq6ic': '名', 'hq7yw': '头', 'hq1lk': '新', 'hqpe1': '肇'} content=''' 总体hqo3r则,错的注( ...

  2. hashmap 实现 相同的key值时,value值叠加效果。

    一,了解一些基础 package com.ohs.demo; /** * * 一.需求是:停止相同的key值,覆盖效果,将重复的value值,叠加起来. * * 二.hash? 什么是hash? * ...

  3. makefile 编译多个目标

    1.静态库libtools.a源码 libtools.h #ifndef tools_h_ #define tools_h_ int sub(int x,int y); int mul(int x,i ...

  4. 使用require.context实现前端工程自动化

    require.context是什么 一个webpack的api,通过执行require.context函数获取一个特定的上下文,主要用来实现自动化导入模块,在前端工程中,如果遇到从一个文件夹引入很多 ...

  5. JS 解构赋值

    感谢原文作者:小火柴的蓝色理想 原文链接:https://www.cnblogs.com/xiaohuochai/p/7243166.html 介绍 解构赋值语法是一种 Javascript ES6引 ...

  6. 用Java开发局域网内文件传输软件遇到的一些问题

    项目地址:https://github.com/b84955189/FileTransfer 由于巨懒的我不太喜欢使用U盘操作文件,特此开发一个简易的文件传输程序. 目前仅限局域网内传输,后期会尝试写 ...

  7. Copy as Markdown - 将页面链接按照 Markdown 格式copy

    将页面文字和链接组成 Markdown 格式的网址 直接对页面链接右键使用时,无法获取链接标题,只能显示 No Title 所以需要: 选中「想作为标题的部分文字」, 然后去对「页面链接」右键-> ...

  8. CocoaPods使用专题 by h.l

    cocoaPods安装 CocoaPods安装和使用教程(code4app) cocoapods使用问题解决 cocoapods慢如何解决? CocoaPods停在Analyzing dependen ...

  9. chmod以数字形式改变文件权限

    Linux文件的三种身份和四种权限,三种身份分别为: u:文件的拥有者 g:文件所属的群组 o:其他用户 对于每个身份,又有四种权限,分别为: r:读取文件的权限(read) w:写入文件的权限(wr ...

  10. 如何使Label显示时,一行顶部居中,两行靠左显示----董鑫

    有时我们会碰到这种情况,一个要根据内容显示一行还是两行,一行时还要靠着顶部再居中,比如下面 最左边的名称,要求是靠上的,如果按照正常的方式写的话,可能一行的话就会出现居中显示了,不会顶着头部显示. 我 ...