Docker镜像服务器磁盘空间清理
我们开发环境Jenkins构建项目时报服务器磁盘空间不足,导致项目自动化构建部署失败,
Docker镜像服务器磁盘空间清理我们做了多次了,之前在清理Docker镜像服务器时走了不少弯路,查了不少Docker镜像服务器空间清理,都大同小异,都是一些如何清理历史镜像文件的文章,而实际按照清理镜像文件进行一顿操作,释放的内存了了,最近一次磁盘空间报警事件,镜像文件清理也就才清理了40M,完全达不到清理磁盘空间的效果。
事实上我们的镜像执行sh脚本本身包含清理垃圾镜像文件的步骤:
因此,重要事情说三遍: 当Docker镜像服务器磁盘空间不足时,首先要考虑的时服务器的日志文件、大文件等等,最后才考虑Docker镜像本身占用的磁盘内存 。
df命令用于查看磁盘分区的使用情况,了解磁盘总量及用量,默认单位为KB。
当磁盘空间报警时,我们可以使用df命令查看磁盘分区使用情况:
注意,使用df -h命令会看到Docker镜像的/var/lib/docker 目录占很多空间,其实这是假象,许多同事初次看到这个接口首先应该就是去考虑如何清理/var/lib/docker,我也不例外。
不要受/var/lib/docker 目录影响,继续分析空间占用情况。
前面通过df命名我们大致了解了我们磁盘分区内存使用情况,使用du命令可以当前目录下文件、目录在磁盘中占用的空间的大小。
来到服务器顶层目录,执行命令:
找到内存使用异常的文件夹,进入其目录依次执行du -sh ,最终找到占用内存的大文件或日志,进行清理。
分享下我在情况过程找到的大文件
通过前面df 和du配合分析清理空间后,基本就能释放服务器磁盘空间,就简单提下Docker镜像清理咯,毕竟网上一大堆。
镜像清理。
批量清除无用的镜像
version: '3' //docker-compose 版本 3x
services: //服务的配置信息
FileServer: //自己定义的服务
image: nginx:latest //使用的镜像名
container_name: 'FileData' // docker容器名
restart: always //重启策略 always 总是重新启动
ports: - '8003:8003' //映射端口信息 宿主端口:容器端口
volumes: // 定义了卷信息,提供给 services 中的 具体容器使用
- '/nginx/confd/defaultconf:/etc/nginx/confd/defaultconf' // 用户自己指定的目录:映射目录
- '/nginx/log:/var/log/nginx'
- '/file:/usr/share/nginx/file'
- '/web:/usr/share/nginx/html' //其他html连接目录
command: /bin/bash -c "nginx -g 'daemon off;'" //覆盖容器启动后默认执行的命令
autoindex on; //是否显示文件目录 on显示 off 关闭显示
autoindex_exact_size on; // 显示文件确切大小 on 显示字节单位 off 显示出文件的大概大小,单位是KB或者MB或者GB
autoindex_localtime on; //默认为off,显示的文件时间为GMT时间 ;改为on后,显示的文件时间为文件的服务器时间
charset utf-8,gbk; //显示的字符集
server{ //服务配置
listen 8003; // 监听端口 ,也可以加上IP地址,如,listen 127001:8080;
server_name _; //定义网站域名,可以写多个,用空格分隔。
//匹配规则,在server{}里可以有很多location配置段
//root/alias 是指定文件路径的两种方式 alias 相当于重定向路径
//使用alias,目录名后面一定要加“/”
location / { //location 后面跟的搜索路径
root /usr/share/nginx/file; //指定文件服务地址 这里的目录是 yml 文件里配置的映射目录
}
location /web/{
alias /usr/share/nginx/; //多个location 的时候这里只需要指定映射目录的上级目录就行了
index indexhtml indexhtm; //配置默认首页
}
}
Docker是世界领先的软件容器平台。Docker使用Google公司推出的Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器,但docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
Docke最初实现是基于LXC。LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。相当于C++中的NameSpace。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。
docker并不是LXC替代品,docker底层使用了LXC来实现,LXC将linux进程沙盒化,使得进程之间相互隔离,并且能够课哦内阁制各进程的资源分配。在LXC的基础之上,docker提供了一系列更强大的功能。
Docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放了开发人员以便他们专注在真正重要的事情上:构建杰出的软件。
用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
docker的三个概念:
镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(1204、1404等)的Ubuntu镜像。
docker的用途:
官方给的是bulid ship run,就是编译、装载、运行。就是实现了应用的封装、部署、运行的生命周期管理只要在glibc的环境下,都可以运行。
谐云自主研发的容器云平台,是基于Docker和Kubernetes技术构建的一套完整IT标准化和自动化框架,以“面向终态、优化IT资源”为目标的新一代PaaS平台,能够提高企业的IT管理能力,在降低运营成本和风险的同时,获得更高的运维效率,保障业务稳定运行和高效迭代。
1、 centos7 环境下,安装docker后服务器断开ssh连接
原因及处理方法1 : 通过ip addr 命令查看 docker0 的ip段是否同当前主机的网络内外网段是否相同
如果相同,修改/etc/docker目录下daemonjson文件里面添加如下内容:
{
"bip": "1921682001/24"
}
然后进行重启:
sudo systemctl daemon-reload
sudo systemctl restart dockerservice
原因及处理方法2: 内核和版本不匹配
a) 通过uname -r 查看内核版本,从docker官网上查看对应的日志信息,对比安装相应版本docker
b) 或者通过升级系统内核,重新安装docker处理 服务器-centos7 内核升级 -
原文传送门
随手浏览时,翻到一篇文章《 服务器指北 - 有了服务器之后可以做点什么 》,我平时就喜欢在家里搞东搞西,这标题正对胃口。毫不犹豫的点进去看看有什么新东西能用在家里的山寨服务器上。果然没让我失望,里面提到一个影音管理系统叫做jellyfin,从之前的 emby fork 而来,由于 emby 闭源了,大家就在这基础上分支出了 Jellyfin。
特性嘛?
话不多说,让我们直奔主题吧。
我的家庭nas服务器系统的版本是ubuntu1604,是用一个acer旧笔记本改的,原来的硬盘容量已经很小了,只能用来跑系统,存储全部使用外挂方式,用来存储自己的本地资料以及搭建云盘和云笔记的数据资料,影音文件也在其中。
我选择搭建docker版jellyfin,影音库直接挂到外存中的影音文件夹,不需要对原有资料路径做任何变动。
当看到这段文字时,说明docker安装成功了。
至此,Docker安装最简版,完成。没有像其他文章提到的配置镜像站,也没有分配用户权限。没分配用户权限不是好的示范,不提倡学习,但是我这边自家内网使用,一切从简。
下面开始使用docker来搭建本文的主角——Jellyfin服务。
然而我并不是这样做的。因为懒,直接docker安装了。
上面的参数中需要说明的是:
docker会自动拉取镜像完成安装
如果能看到上面的画面,说明jellyfin安装完成,就是这么便捷!!!!docker越来越成功果然是有道理的。
现在就可以通过http://本地ip:8096来访问jellyfin服务了。
后面该怎么选怎么选,**路径、电视剧路径,语言神马的。最后注意一下远程访问的两个勾,默认是打上的。
这样,我们的jellyfin服务就安装好了。
虽然是内网服务,还是会禁不住得瑟的心,弄个公网地址给朋友看看,所以就有了内网穿透。
内网穿透工具采用Frp,轻与简单是我选择工具的个人偏好。
服务端扔阿里云上,内网安装客户端,配上端口
我把ecs中的web服务端口都配成9,方便管理。
启动frpc
现在,访问ecs的公网ip:9096就能访问自己的Jellyfin了。
来张整体图,能看到不同的媒体库以及各自的更新进度。
可以在首页直接打开视频
也可以点击进入影片介绍页,是的,jellyfin居然还有影片介绍页,我们只需要提供合规格命名的片源,其他的都交给jellyfin吧。
截图时是在公网,网速不佳,不然是可以看到演员的照片,还会推荐本地存储的相关影片,这个有点逆天了,查了一下这是从emby带出来的功能,强大的搜刮能力。
补一张卡司图
还可以进入演员详情页
Ok,不管从哪个路径进来,最终还是要播放影片。播放效果是这样滴
内网使用,还是非常流畅的。
参考文章
《Ubuntu 1604 安装 Docker 和 Docker Compose
》, https://wwwrabbitwflycom/articles/2019/05/14/1557827886665html
《在群晖Docker中安装Jellyfin媒体服务器
》, https://wwwsmbinncom/jellyfinhtml
环境:ECS服务器,务必使用CentOS 7 以上版本,64位系统推荐是CentOS 78
安装步骤:
一:安装docker所需的环境
1安装依赖:yum install -y yum-utils device-mapper-persistent-data lvm2
2配置yum源 使用国内的:yum-config-manager --add-repo http://mirrorsaliyuncom/docker-ce/linux/centos/docker-cerepo
3查看docker版本:yum list docker-ce --showduplicates | sort -r
二:安装docker
注意:不使用1131版本,该版本在jenkins使用docker命令时会说找不到配置文件
1安装docker:yum -y install docker-ce-201010-3el7
2查看docker版本:docker -v
3启动docker:systemctl start docker
4查看docker 启动状态:systemctl status docker
5检查安装结果:docker info
运行Docker守护进程:systemctl start docker
停止Docker守护进程:systemctl stop docker
重启Docker守护进程:systemctl restart docker
6查看容器:docker ps
7停止容器:docker stop 容器id
三:修改镜像仓库:
vim /etc/docker/daemonjson
添加如下内容:
{
"debug":true,"experimental":true,"registry-mirrors":["https://pb5bklzrmirroraliyuncscom","https://hub-mirrorc163com","https://dockermirrorsustceducn"]
}
8查看信息:docker info
仅供个人学习使用,如有不足请指出。
愿景:愿天下所有程序员能早日财富自由,永不搬砖!
0条评论