Docker容器日志查看与清理

1. 问题 docker容器日志导致主机磁盘空间满了。docker logs -f container_name噼里啪啦一大堆,很占用空间,不用的日志可以清理掉了。 2. 解决方法 2.1 找出Docker容器日志 在linux上,容器日志一般存放在/var/lib/docker/containers/container_id/下面, 以json.log结尾的文件(业务日志)很大,查看各个日志文件大小的脚本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 # chmod +x docker_log_size.sh # ./docker_log_size.sh 2.2 清理Docker容器日志(治标) 如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启docker。接下来,提供一个日志清理脚本clean_docker_log.sh,内容如下: #!/bin/sh echo "======== start clean docker containers logs ========" logs=$(find /var/lib/docker/containers/ -name *-json....

2022-05-06 · 1 分钟

Docker Compose教程

1.Compose介绍 Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。 Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景。 2.Compose和Docker兼容性 compose文件格式版本 docker版本 3.4 17.09.0+ 3.3 17.06.0+ 3.2 17.04.0+ 3.1 1.13.1+ 3.0 1.13.0+ 2.3 17.06.0+ 2.2 1.13.0+ 2.1 1.12.0+ 2.0 1.10.0+ 1.0 1.9.1.+ Docker版本变化说明: Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。 Docker的linux发行版的软件仓库从以前的https://apt.dockerproject.org和https://yum.dockerproject.org变更为目前的https://download.docker.com, 软件包名字改为docker-ce和docker-ee。 3.安装docker Docker的社区版(Docker Community Edition)叫做docker-ce。老版本的Docker包叫做docker或者docker-engine,如果安装了老版本的docker得先卸载然后再安装新版本的docker。docker的发展非常迅速,apt源的更新往往比较滞后。所以docker官网推荐的安装方式都是下载docker安装脚本安装。 卸载老旧的版本(若未安装过可省略此步): $ sudo apt-get remove docker docker-engine docker....

2022-04-25 · 4 分钟

解决Docker日志文件太大的问题

Docker 在不重建容器的情况下,日志文件默认会一直追加,时间一长会逐渐占满服务器的硬盘的空间,内存消耗也会一直增加,本篇来了解一些控制日志文件的方法。 清理单个文件 运行时控制 全局配置 Docker 的日志文件存在 /var/lib/docker/containers 目录中,通过下面的命令可以将日志文件夹根据升序的方式罗列出来。 $ sudo du -d1 -h /var/lib/docker/containers | sort -h 28K /var/lib/docker/containers/0db860afe94df368335c2e96f290275f4c396b996b4e8d22770b01baafd9982c 36K /var/lib/docker/containers/6ee184044661c436b44769d56c203f1fc296dbfe08f6ed4cf79aa6fb8cae6659 44K /var/lib/docker/containers/66c44231981fcb5ecd33bf0fc3390e71c5cbbabb839d79441eb3317b8500d551 60K /var/lib/docker/containers/bc4136199037e73d712614ef57de0915d294cbe51045d213f0d822d71a86cf2c 344K /var/lib/docker/containers/7bd3a179cf67b1537e0965c1d1f518420ac5d4cd151ecb75c37ada8c2347ca6b 984K /var/lib/docker/containers/6bd1f79f16b8b06f2bd203dd84443004ba08c150ac51d23fa620e8b2cbf4b773 1.7M /var/lib/docker/containers/a93a4275571b0033367f9cab8213c467b21a03c600e2203195640b5a5bc7f523 4.4M /var/lib/docker/containers/082564c5bdb19b642491b09419a69061122483c0f959a36eb186dd1fec53c163 14M /var/lib/docker/containers/05fc24ef7a14e31e4557c9881482d350cfb05f2f1cb870638de344581154ca01 32M /var/lib/docker/containers/5d70c82942083d16593670058aefed339cfe874c9027205b1e6eb8e569894d65 129M /var/lib/docker/containers/a88d104d20e5ee58ffeaeecbb559b3231c5b8c73ad1443538928ebeae4ff705c 285M /var/lib/docker/containers/b623602a667c0b31068563f244610a548ed055ff9802197f372ff436a294ab5c 917M /var/lib/docker/containers/3d71c509ab6aea34400d37f6c006914eed2cb05e6e6cd07b3ee03eb783dc367b 1.4G /var/lib/docker/containers 有三种方式可以清理日志文件 清理单个文件 感觉哪个容器的日志太大就清理哪个 $ sudo sh -c "cat /dev/null > ${log_file}" ${log_file} 就是日志文件,可以通过 find 命令查找全部日志 $ sudo find /var/lib/docker/containers -name *.log /var/lib/docker/containers/3d71c509ab6aea34400d37f6c006914eed2cb05e6e6cd07b3ee03eb783dc367b/3d71c509ab6aea34400d37f6c006914eed2cb05e6e6cd07b3ee03eb783dc367b-json....

2022-04-21 · 1 分钟

Docker容器中安装curl、telnet、vim基础工具

#因在容器中排查故障需要,需要安装基础工具 # 查看系统版本: cat /etc/os-release Debian基础镜像 #先添加163源 tee /etc/apt/sources.list << EOF deb http://mirrors.163.com/debian/ jessie main non-ffree contrib deb http://mirrirs.163.com/debian/ jessie-updates main non-free contrib EOF #安装 curl telnet apt-get update && apt-get install -y curl telnet vim Alpine基础镜像 #先添加阿里源 cat > /etc/apk/repositories << EOF http://mirrors.aliyun.com/alpine/v3.12/main/ http://mirrors.aliyun.com/alpine/v3.12/community EOF #安装 curl scp telnet vim apk update && apk add curl openssh-client busybox-extras vim

2022-04-20 · 1 分钟

Docker部署Grafana

搜索镜像 docker search grafana/grafana 拉取镜像 版本号可以去官网查看:https://hub.docker.com/r/grafana/grafana docker pull grafana/grafana:8.3.3 创建容器 --restart=always:容器退出后(kill后)自动重启。 --link prometheus:需要将prometheus容器(容器名)的hostname链接过来,否则无法连接到prometheus。 $PWD/grafana/config:映射配置文件位置 $PWD/grafana/data:映射数据存储位置。 /etc/localtime:/etc/localtime:ro:容器内部的时间格式化保持和宿主机一致。 docker run -d --restart=always \ -u root \ --name=grafana \ --link prometheus \ -p 3000:3000 \ -v $PWD/grafana/config:/etc/grafana \ -v $PWD/grafana/data:/var/lib/grafana \ -v /etc/localtime:/etc/localtime:ro \ grafana/grafana:8.3.3 可能出现的错误 使用-u root指定为root用户启动。 mkdir: can't create directory '/var/lib/grafana/plugins': Permission denied 缺少配置文件 msg="failed to parse \"/etc/grafana/grafana.ini\": open /etc/grafana/grafana.ini: no such file or directory" 创建容器时需要先创建好grafana.ini配置文件。 docker cp grafana:/etc/grafana/grafana.ini ....

2022-04-20 · 1 分钟

Docker安装Consul1.9.3

拉取Consul镜像 $ docker pull consul # 默认拉取latest $ docker pull consul:1.9.3 # 拉取指定版本 安装并运行 docker run -d -p 8500:8500 --restart=always --name=consul consul:1.9.3 agent -server -bootstrap -ui -node=1 -client='0.0.0.0' agent: 表示启动 Agent 进程。 server:表示启动 Consul Server 模式 client:表示启动 Consul Cilent 模式。 bootstrap:表示这个节点是 Server-Leader ,每个数据中心只能运行一台服务器。技术角度上讲 Leader 是通过 Raft 算法选举的,但是集群第一次启动时需要一个引导 Leader,在引导群集后,建议不要使用此标志。 ui:表示启动 Web UI 管理器,默认开放端口 8500,所以上面使用 Docker 命令把 8500 端口对外开放。 node:节点的名称,集群中必须是唯一的,默认是该节点的主机名。 client:consul服务侦听地址,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1所以不对外提供服务,如果你要对外提供服务改成0.0.0.0 join:表示加入到某一个集群中去。 如:-json=192.168.0.11

2022-04-19 · 1 分钟

Docker Swarm 节点标签与服务约束

多节点 Swarm 集群下,可能节点的配置不同(比如 CPU、内存等),部署着不同类型的服务(比如 Web服务、Job服务等),当这些服务以 Service 或者 Stack 的形式部署到集群,默认情况下会随机分配到各个节点。不同类型的服务对服务器需求的资源是不同的,为了更合理的利用服务器资源,我们可能希望某些服务能够部署到指定的服务器上。另外一种场景,Swarm 集群中的节点跨机房,为了内部服务间通信更快,我们可能希望关联比较密切的服务能够部署到同一机房的节点上。那么,如何做到呢? 很简单,先给节点添加标签,然后服务发布时添加限制条件即可! Node Label 管理 示例集群信息: docker@node1:~$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION axr4zun8u1es8ytizjpt3zlnw * node1 Ready Active Leader 18.03.0-ce vdip2js7tfflxv0smj6wdw0bv node2 Ready Active 18.03.0-ce vi17ametnwd58297z6nlcl2o0 node3 Ready Active 18.03.0-ce ※ 添加标签 docker node update --label-add role=web node1 ※ 查看标签 docker node inspect node1 [ { "ID": "axr4zun8u1es8ytizjpt3zlnw", "Version": { "Index": 476 }, "CreatedAt": "2018-07-19T03:50:02....

2022-04-08 · 1 分钟

Docker Swarm集群环境搭建及弹性服务部署

一、集群搭建 1、环境准备 五台安装了 Docker 的 CentOS 机器,版本为:CentOS 7.8.2003 Docker Engine 1.12+(最低要求 1.12,本文使用 19.03.12) 防火墙开启以下端口或者关闭防火墙: TCP 端口 2377,用于集群管理通信; TCP 和 UDP 端口 7946,用于节点之间通信; UDP 端口 4789,用于覆盖网络。  2、机器分布 角色 IP HOSTNAME Docker 版本 Manager 192.168.10.101 manager1 19.03.12 Manager 192.168.10.102 manager2 19.03.12 Manager 192.168.10.103 manager3 19.03.12 Worker 192.168.10.10 worker1 19.03.12 Worker 192.168.10.11 worker2 19....

2022-04-08 · 5 分钟

Docker Swarm集群管理利器核心概念扫盲

一、Swarm 简介  Docker Swarm 是 Docker 官方推出的容器集群管理工具,基于 Go 语言实现。代码开源在:https://github.com/docker/swarm 使用它可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。  Docker Swarm 是生产环境中运行 Docker 应用程序最简单的方法。作为容器集群管理器,Swarm 最大的优势之一就是 100% 支持标准的 Docker API。各种基于标准 API 的工具比如 Compose、docker-py、各种管理软件,甚至 Docker 本身等都可以很容易的与 Swarm 进行集成。大大方便了用户将原先基于单节点的系统移植到 Swarm 上,同时 Swarm 内置了对 Docker 网络插件的支持,用户可以很容易地部署跨主机的容器集群服务。  Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排工具,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。  二、Swarm 核心概念 1、Swarm  Docker Engine 1.12 引入了 Swarm 模式,一个 Swarm 由多个 Docker 主机组成,它们以 Swarm 集群模式运行。Swarm 集群由 Manager 节点(管理者角色,管理成员和委托任务)和 Worker 节点(工作者角色,运行 Swarm 服务)组成。这些 Docker 主机有些是 Manager 节点,有些是 Worker 节点,或者同时扮演这两种角色。...

2022-04-08 · 2 分钟

Docker Swarm集群启动时找不到镜像的问题解决

私有镜像仓库搭建 docker run -d -p 5050:5000 --restart always --name registry registry:2 仓库配置 vim /etc/docker/daemon.json { "registry-mirrors": ["https://aqwaeuv8.mirror.aliyuncs.com"], "insecure-registries":["10.3.55.134:5050"] // 取消仓库认证 } 测试,push和pull镜像没有问题,使用docker swarm update时出现找不到镜像错误 问题1: update时提示,No such image: 10.3.55.134:5050/ms-group/ly-12320-server-ks_online:5f223018@sha256:261b7ef562bf95a7293046fb0524e5ff2fe70ad55dcd5ffe7981b35f9d50ff56 解决方案: 需要在所有的docker swarm集群节点都配置daemon.json,并重启docker systemctl restart docker 问题2: 修复完以上问题后,再更新时,出现starting container failed: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: “/bin/sh”: stat /bin/sh: no such file or directory: unknown 解决方案: 基础镜像没有/bin/sh导致,检查基础镜像...

2022-04-07 · 1 分钟