docker:alpine使用logrotate切割日志
最近在交付项目的时候使用了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切割日志的更多相关文章
- logrotate 切割日志
在工作中需要切割日志我们项目中选择的系统自带的logrotate,如需要其他需求需要自己在百度一下或者参考: https://www.cnblogs.com/kevingrace/p/6307298. ...
- 如何在Centos 7上用Logrotate管理日志文件
何为Logrotate? Logrotate是一个实用的日志管理工具,旨在简化对系统上生成大量的日志文件进行管理. Logrotate允许自动旋转压缩,删除和邮寄日志文件,从而节省宝贵的磁盘空间. L ...
- 利用Linux自带的logrotate管理日志
日常运维中,经常要对各类日志进行管理,清理,监控,尤其是因为应用bug,在1小时内就能写几十个G日志,导致磁盘爆满,系统挂掉. nohup.out,access.log,catalina.out 本文 ...
- nginx按天切割日志
原文链接:http://www.cnblogs.com/benio/archive/2010/10/13/1849935.html 本文只节选部分内容 Nginx自己没有日志分割的功能,一旦时间过长 ...
- Linux下配置Nginx按天切割日志
Nginx由于轻巧和高效的设计风格,去掉了一些额外的功能,所以它不像apache那样有自动切割日志. 建立一个脚本文件,并保证这个文件有可执行的权限:1.建立一个文件/root/log.nginx.s ...
- nginx切割日志脚本
nginx切割日志脚本 #!/bin/bash #cut nginx log #2018年9月26日14:26:44 #by jiajiezhao ########################## ...
- 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...
- python 多线程日志切割+日志分析
python 多线程日志切割+日志分析 05/27. 2014 楼主最近刚刚接触python,还是个小菜鸟,没有学习python之前可以说楼主的shell已经算是可以了,但用shell很多东西实现起来 ...
- 在Linux下使用logrotate管理日志(转)
原文地址:http://www.tuicool.com/articles/ieAnMjN logrotate是日志循环管理工具,可以分割日志文件,删除旧的日志文件,创建新的日志文件,循环管理日志从而节 ...
随机推荐
- a 标签一些特殊用法
发邮件 <a href="mailto:youemail@mail.com?subject=邮件标题&body=邮件内容">告诉我们</a> 打电话 ...
- 不难懂——CSS 匹配指定name元素
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- undo和redo的区别
undo和redo的区别: undo一般用于事务的取消与回滚,记录的是数据修改前的值: redo一般用于恢复已确认但未写入数据库的数据,记录的是数据修改后的值.
- Android开发-记账本-实现记账功能选择
制作GridView适配器,实现页面数据的变化 制作类型存储数据库,存储的主要是图片类型,类型被选中时的图片,类型未被选中时的图片. 数据库代码如下 package com.example.Utils ...
- AT2699 [ARC081D] Flip and Rectangles
以下是简要题解: 首先思考如何判定一个矩形是否能通过操作变成全黑. 首先从简单而又特殊的 \(2 \times 2\) 的矩形开始,不难发现只要其中黑色数量不为奇数即可. 近一步拓展可以发现,一个矩形 ...
- xargs、sort、uniq命令
xargs.sort.uniq命令,我们由LeetCode的一道题来引入,并使用加以理解: 题目是这样的:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率. word ...
- 标签显示模式(display)
非洲黑人: 皮肤内黑色素含量高,以吸收阳光中的紫外线,保护皮肤内部结构免遭损害,头发象羊毛一样卷曲,使每根卷发周围都有许多空隙,空隙充满空气,卷发有隔热作用. 欧洲白人: 生活寒带或着是说常年温度较低 ...
- bootstrap移动 pc 响应轮播
PC端效果 width100% 移动端 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta ...
- Java-基于JDK的动态代理
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11686615.html 简单的记录一下Java中自带动态代理的用法. 准备材料: 1.一个接口 ...
- Docker Harbor私有仓库部署与管理 (超详细配图)
Docker Harbor私有仓库部署与管理 1.Harbor 介绍 2.Harbor部署 3.Harbor管理 1.Harbor 介绍: 什么是 Harbor ? Harbor 是 VMware 公 ...