因 inodes 占用资源过多导致 no space left on device 的问题
摘自:https://blog.csdn.net/weixin_34383474/article/details/121493708 问题现象使用 GitLab Runner 的打包机器执行命令打包 Docker 镜像时报 "no space left on device" 的错误,无法正确打包。 问题排查步骤登录打包机查看机器剩余磁盘容量,得到结果物理机磁盘仍有剩余空间: 1df -h 通过复制文件证明磁盘空间确有剩余,但是在物理机上直接执行 Docker 命令依然存在 no space left on device 空间不足的报错。 通过搜索找到原因:服务机 inodes 使用过高,执行指令得到结果 inodes 占用 100%,原因为 Docker 打包过程中小文件生成过多导致 inodes 占用过高。 inode 是什么 inode 是文件系统中的一个数据结构,用于存储文件或目录的元数据信息,如文件大小、所属用户、所属组、权限、创建时间、修改时间等等。每个 inode 都有一个唯一的编号,称为 inode 号。 当文件或目录被创建时,会分配一个 in...
Docker Compose 控制多个容器启动的优先级
docker-compose.yaml中healthcheck配置项作用:可用于检查容器是否正常运行,初始状态为starting,最后一次检查完成后显示sucess或者unhealthy,以下是命令执行返回的状态对应容器状态0:状态是sucess,容器正常运行1:状态是unhealthy,容器非正常运行2:忽略执行命令的状态包含healthcheck的docker-compose文件 12345678910111213141516171819202122version: "3.7" #docker compose的版本services: tomcat: image: tomcat:v10.0.7 ports: - 18080:8080 # 暴露端口信息 - "宿主机端口:容器暴露端口" container_name: tomcat_test #设置启动容器的名称,若不设置会默认生成一个 links: - mysql:db #指定关联的容器 mysql: image: ...
基于 Docker 搭建 Prometheus + Grafana
摘自:https://juejin.cn/post/7097166804044218405 安装运行Prometheus(docker版)Grafana是一个开源的功能丰富的数据可视化平台,通常用于时序数据的可视化。它内置了多种数据源的支持 下载镜像包123docker pull prom/node-exporterdocker pull prom/prometheusdocker pull grafana/grafana 启动 node-exporter12345docker run -d -p 9100:9100 \ -v "/proc:/host/proc:ro" \ -v "/sys:/host/sys:ro" \ -v "/:/rootfs:ro" \ prom/node-exporter 访问url: http://127.0.0.1:9100/metrics 效果如下: 这些都是收集到的数据,有了它就可以做数据展示了。 启动prometheus新建目录 prometheus,编辑配置文件...
WSL2 开发环境配置指南:高效整合 IDEA、Go、Node.js 等工具
引言Windows Subsystem for Linux (WSL) 彻底改变了 Windows 用户的开发体验,特别是 WSL2 版本,它通过完整的 Linux 内核提供了接近原生的性能和兼容性。这使得开发者可以在熟悉的 Windows 系统上,无缝地利用 Linux 强大的生态系统和命令行工具。 本指南旨在提供一个全面的 WSL2 开发环境配置手册,帮助你高效地整合 IntelliJ IDEA、Go、Node.js、Git、Maven 等常用工具,并解决网络代理等常见问题,从而搭建一个流畅、高效的开发工作流。 重要提示:现代版本的 IntelliJ IDEA (2022.3+), GoLand, 和其他 JetBrains IDE 已经内置了对 WSL2 的无缝远程开发支持。推荐优先使用 IDE 自带的 WSL 远程功能,它比手动配置更简单、稳定,且能避免许多潜在的兼容性问题。 一、IntelliJ IDEA 与 WSL2 深度整合1.1 将 WSL 设置为默认终端要在 IDEA 中直接使用强大的 Linux 终端,可以按以下步骤操作: 打开 File -> S...
Docker,containerd,CRI,CRI-O,OCI,runc
转自: https://zhuanlan.zhihu.com/p/490585683 自 Docker 开启了使用容器的爆发式增长,有越来越多的工具和标准来帮助管理和使用这项容器化技术,与此同时也造成了有很多术语让人感到困惑。 比如 Docker, containerd, CRI, CRI-O, OCI, runc,本篇将解释容器生态系统是如何在一起工作的。 容器生态系统容器生态系统是由许多令人兴奋的技术、大量的专业术语和大公司相互争斗组成的。 幸运的是,这些公司偶尔会在休战中走到一起合作,商定一些标准,这些标准有助于使这个生态系统在不同的平台和操作系统之间更具互操作性,并减少对单一公司或项目的依赖。 这张图显示了 Docker、Kubernetes、CRI、OCI、containerd 和 runc 在这个生态系统中是如何结合的。 其工作流程简单来说是这样的: Docker,Kubernetes 等工具来运行一个容器时会调用容器运行时(CRI)比如 containerd,CRI-O 通过容器运行时来完成容器的创建、运行、销毁等实际工作 Docker 使用的是 co...
CentOS 7 修改 Docker 容器和镜像默认存储位置
注: 目前发现在迁移过程中nexus服务会丢文件(迁移之前一定要做好测试) 转: https://segmentfault.com/a/1190000040326126 CentOS7修改Docker容器和镜像默认存储位置通常,当你开始使用docker时,我们并不太关心Docker 用于存储镜像和容器的默认目录。当使用Docker进行更多实验时,Docker开始占用大量的空间时,你不得不按下紧急按钮。所以现在是时候把故障排除放在如何改变docker的默认存储位置了 在试图改变Docker的默认存储位置时,我们必须知道一些重要的信息。 docker 当前使用的默认存储位置docker 当前使用的存储驱动程序镜像和容器要存放的新存储空间 Docker 默认的位置在/var/lib/docker,当前所有的镜像、容器都存储在这儿。如果你有任何在运行的容器,停止这些容器,并确保没有容器在运行,然后运行以下命令,确定当前Docker使用的存储驱动。 1、查看docker当前信息注:此处需要注意docker的两个信息: Storage Driver: ov...
解决docker push慢的问题 -- http代理
docker pull拉取镜像,可以用修改 /etc/docker/daemon.json 加入国内源的方式解决,但docker push不行。传统的**export http_proxy=**设置http代理变量的方式对docker无效,docker采取了自己的方式,下面进入正文 代理地址(panda): 192.168.3.153:41091 启用全局代理123456789101112# 创建目录mkdir -p /etc/systemd/system/docker.service.d# 创建文件vi /etc/systemd/system/docker.service.d/http-proxy.conf# 写入配置[Service]Environment="HTTP_PROXY=http://192.168.3.153:41091/"# 刷新更改systemctl daemon-reload && systemctl restart docker# 验证是否生效systemctl show -...
docker共享宿主机git私钥
Dockerfile123456789...# 共享宿主机git私钥RUN yum install git -y && \ mkdir -p /root/.ssh/ && \ echo "${SSH_KEY}" > /root/.ssh/id_rsa && \ chmod 600 /root/.ssh/id_rsa && \ touch /root/.ssh/known_hosts && \ ssh-keyscan <gitlab_id>/github.com/gitee.com >> /root/.ssh/known_hosts... 执行(~/.ssh/git/id_rsa 是宿主机 git 私钥所在位置)1docker build -t <xxx> --build-arg SSH_KEY="$(cat ~/.ssh/git/id_rsa) .
加速Docker多阶段构建
多阶段构建虽然能够减小镜像体积,但是构建的速度慢了许多。原因在于:一是相比于原先的单阶段构建,多了一些构建步骤;二是缓存失效,多阶段编译之后只保留最终镜像的缓存,中间镜像的缓存丢失。其中缓存失效的问题在CI环境中尤为显著。 加快多阶段构建的措施有两项:并行构建和保留缓存并行构建 从Docker 18.09开始引入了并行构建,启用方法有两种: 临时启用:设置环境变量DOCKER_BUILDKIT=1; 原构建命令: docker build -f Dockerfile -t test_name . 增加DOCKER_BUILDKIT=1后的命令: DOCKER_BUILDKIT=1 docker build -f Dockerfile -t test_name . 默认启用:在/etc/docker/daemon.json中设置{ "features": { "buidkit": true }}。 保留缓存 不仅保留最终镜像的缓存,还保留中间镜像的缓存。 do...
记录 Docker 构建优化
记录一次node项目优化方案优化前: 以ubuntu发行版为基础镜像 不带小版本号 每次构建都从头构建(这里也推荐将package*json先copy过来进行install再copy . .,如果文件没变化,那就使用缓存,不重新构建) 优化后: 建立runtime基础镜像(包含提前安装好的基础依赖和环境, 包括node_modules),并使用alpine为基础镜像发行版 使用nexus管理项目包(docker/npm/maven) 指定具体版本号(只有 major version,没有指定 minor version、patch version。当该基础镜像 minor 或 patch 版本更新后,如果本地的镜像缓存也被清除了,那么打包就会使用新版本的基础镜像) 构建 Docker 镜像的时候,会缓存 Dockerfile 中尚未更改的所有步骤。所以,如果新构建时更改任何指令,将后的指令步骤将会重新来不再使用缓存。举例来说,就是指令 3 发生了变更,其后的 4-n 就会重跑并重新生成缓存。因此,编写 Dockerfile 的时候,就需要将最不可能产生更...
