最近在交付项目的时候使用了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. python 使用sqlite,ConfigParser实例

    此实例是本人公司真实场景,使用了VNC,ngrok 技术实现内网穿透,本例是对内网穿透的使用: 此例的最终效果是对于处于各地内网终端实现远程桌面监控及操作: 目前世面上也有一些软件实现了内网穿透(向日 ...

  2. CTF web安全45天入门学习路线

    前言 因为最近在准备开发CTF学习平台,先做一个学习路线的整理,顺便也是对想学web的学弟学妹的一些建议. 学习路线 初期 刚刚走进大学,入了web安全的坑,面对诸多漏洞必然是迷茫的,这时的首要任务就 ...

  3. 主键约束(primary key 简称PK)

    7.5.主键约束 主键约束相关术语 主键约束 主键字段:字段添加了主键约束,叫主键字段 主键值:主键字段中的每个值都叫主键值 什么是主键? 主键值是每一行记录的唯一标识(主键值是每一行记录的身份证号) ...

  4. Tomcat-默认访问的工程和默认访问的资源

    Tomcat(默认访问的工程和默认访问的资源) ROOT的工程的访问,以及默认index.html页面的访问 当我们在浏览器地址栏中输入访问地址如下: http://ip:port/   ====== ...

  5. ansible roles实践 zookeeper集群部署

    1.下载解压 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11. ...

  6. mysql新增用户无法登陆问题解决ERROR 1045 (28000)

    mysql增加新用户无法登陆解决方法 ERROR 1045 (28000): Access denied for user 'appadmin'@'localhost' (using password ...

  7. python函数关键字实参传参

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 def describe_pet(type,name): print(f"i have a {type} ...

  8. cygwin -- 在windows平台上运行的unix模拟环境

    cygwin是一个在windows平台上运行的unix模拟环境,是cygnus solutions公司开发的自由软件(该公司开发了很多好东西,著名的还有eCos,不过现已被Redhat收购).它对于学 ...

  9. LoadRunner编写socket性能测试脚本

    利用LoadRunner编写socket性能测试脚本 一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socke ...

  10. 使用gige2500万相机时遇见的问题(条纹以及取图过久)

    1.确保网卡支持1g全双工: 2.确保安装了MVTec GigE Vision Streaming Filter(使用halcon接口的情况下) 3.确保机台的杀毒软件开放了相机的网络监控功能