一、定时清理docker容器日志
1. 以下两个shell脚本可以查看和清理所有docker 容器日志
docker_log_size.sh 查所有容器日志大小脚本
#!/bin/sh
echo "======== docker containers logs file size ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
ls -lh $log
done
clean_docker_log.sh 清空所有容器日志脚本
#!/bin/sh
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"
2. 脚本人工执行测试
查看日志大小
root@iZbp178t3hp8rsxpmyzfe2Z:/opt/docker-sh# ./docker_log_size.sh
======== docker containers logs file size ========
-rw-r----- 1 root root 4.3G Aug 18 16:14 /var/lib/docker/containers/c4e04562d33f1898eb1dd3d49ddd5a90dc3b989a3efca110bd44893829fc036c/c4e04562d33f1898eb1dd3d49ddd5a90dc3b989a3efca110bd44893829fc036c-json.log
清理所有日志
root@iZbp178t3hp8rsxpmyzfe1Z:/opt/docker-sh# ./clean_docker_log.sh
======== start clean docker containers logs ========
clean logs : /var/lib/docker/containers/13487e209673f8e3563bfcac486d0bcf8bc47a7ceb13e63967c4d69adf48bf1b/13487e209673f8e3563bfcac486d0bcf8bc47a7ceb13e63967c4d69adf48bf1b-json.log
======== end clean docker containers logs ========
3. crontab 定期清理日志
使用linux的crontab命令每天晚上2点定期执行脚本清空容器日志
0 0 2 * * ? /opt/docker-sh/clean_docker_log.sh
- 先查看定期命令,是否已存在相当指令
root@iZbp178t3hp8rsxpmyzfe1Z:/opt/docker-sh# crontab -l
root@iZbp178t3hp8rsxpmyzfe1Z:/opt/docker-sh#
- 新增指令,保存指令
0 0 2 * * ? /opt/docker-sh/clean_docker_log.sh
root@iZbp178t3hp8rsxpmyzfe1Z:/opt/docker-sh# crontab -e
用root权限进入容器内部
docker exec -u root -it *** sh
或者
#vim clear_docker_logs.sh
#!/bin/bash
echo 'input log file size '$1
default=20
if [ -n "$1" ]
then
default=$1
fi
max=`expr 1024 \* $default`
echo 'current set file size '$max
for file in ` ls /home/docker/lib/docker/containers/*/*-json.log `
do
#echo $file
s=`du -k $file |awk '{print $1}'`
# echo $s
if [ $s -gt $max ]
then
echo 'remove'$file
truncate -s 0 $file
echo 'removed'$file
fi
done
测试脚本
chmod +x clear_docker_logs.sh
./clear_docker_logs.sh 20
加入crontab 每隔半小时清理日志
#crontab -e
*/30 * * * * /bin/sh /data/docker/docker_logs.sh 20 >> /root/mylog.log 2>&1
二、Docker目录迁移
查看磁盘使用情况
# du -hs /var/lib/docker/
查看Docker的磁盘使用情况,docker system df命令,类似于Linux上的df命令,
# docker system df
迁移/var/lib/docker
目录
首先需要停止docker
服务。
#systemctl stop docker
创建新的docker目录,执行命令df -h
,找一个大的磁盘。 我在/home
目录下面建了/home/docker/lib
目录
#mkdir -pv /home/docker/lib
迁移/var/lib/docker
目录下面的文件到 /home/docker/lib
#rsync -avz /var/lib/docker /home/docker/lib/
配置/etc/systemd/system/docker.service.d/devicemapper.con
f。查看devicemapper.conf
是否存在。如果不存在就新建。
#mkdir -p /etc/systemd/system/docker.service.d/
#vim /etc/systemd/system/docker.service.d/devicemapper.conf
然后在devicemapper.conf
写入:(同步的时候把父文件夹一并同步过来,实际上的目录应在/home/docker/lib/docker
)
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker
重新加载 docker
#systemctl daemon-reload
#systemctl restart docker
#systemctl enable docker
为了确认一切顺利,运行
#docker info
命令检查Docker 的根目录.它将被更改为 /home/docker/lib/docker
启动成功后,再确认之前的镜像还在
确定容器没问题后删除/var/lib/docker/目录中的文件
三、整体迁移
1.定制镜像
由于save&load实际操作的是image,所以导出之前,要先使用commit命令把容器中相对于其底层镜像的修改,提交为一层文件系统,与原有的image结合构成一个新的image。新的image中会包含所有修改的内容。
(ps:这种制作镜像的方式不被提倡,因为这样做会保留一些元数据信息,导致image过大,如果想用于制作一个简洁的镜像,需使用DockerFile的方式定制镜像,这里不做详述)
这样以一个容器salve02为例,将它提交到一个叫做theslave02的镜像上,再打上标签
格式:docker commit -m ‘镜像描述’ -a ‘制作者’ 容器名 镜像名
docker commit -m ‘test’ -a ‘yourname’ container-py3 image-py3
提交完成后我们可以看到这么一个image:
2.导出镜像
把镜像导出为一个输出文件:
查看导出的文件:
3.传输文件
将导出的输出文件通过scp的方式发送到本地的主机上:
4.导入镜像
在本地主机上,将受到的文件导入为镜像文件:
查看镜像文件:
5.使用镜像运行容器
使用刚刚导入的镜像,运行为一个容器:
查看容器运行状况:
进入容器:
方法二
1.将镜像打成tar包
格式:docker save -o tar包的路径 镜像名
docker save -o /data/py3.tar image-py3
指定路径下,会有py3.tar。
2.使用tar包
先删除本地的容器和镜像,依次操作:
docker ps #查看运行中的容器
docker stop container-py3 #停止容器
docker rm container-py3 #删除容器
docker images #查看镜像
docker rmi image-py3 #删除镜像
加载制作好的tar包
格式:docker load < tar包所在路径
docker load < /data/py3.tar
3.使用镜像
查看镜像
创建并运行容器
docker run -dit --name container-py3 226354af8bd3 /bin/bash
进入容器
docker exec -it container-py3 /bin/bash
测试 python3 环境
python3
发布镜像
tar包形式分发不是很方便,可以将镜像发布到远程仓库。
Docker官网推出的docker仓库的一个公共服务器。
登录退出账号
- 创建账号后--登录账号命令
docker login
- 退出账号命令
docker logout
推送发布镜像
用户登录后,可以通过 docker push
命令将自己的镜像推送(上传)到 Docker Hub
。
以下命令中的 username
请替换为你的 Docker
账号用户名。
1、备份镜像
先docker ps 列出容器
然后
docker commit -p e4141631e4d3(注:docker ps 列出后的 CONTAINER ID) bt2ipv6 (注:自命名)
2、打包镜像
docker tag ubuntu:18.04 username/ubuntu:18.04
3、列出镜像
docker image ls
4、上传镜像
docker push username/ubuntu:18.04
5.查看docker仓库
上传完成后,可以在docker仓库web页面查看镜像。
6.其他人使用,拉取镜像
docker pull username/ubuntu:18.04