Linux Docker 一键安装脚本:
curl -sSL https://get.docker.com/ | sh
Docker 安装 - Docker 安装与配置 - AIUAI
以前汇总的一些 Docker 镜像和容器操作用法:
1. Docker System 命令
[1] - 查看 docker 空间使用情况
docker system df
如:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 38 8 21.89GB 14.96GB (68%)
Containers 36 0 2.2GB 2.2GB (100%)
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
[2] - 查看 docker 实时事件,如容器创建、删除等信息
docker system events
[3] - 查看 docker 系统信息
docker system info
#或
docker info
[4] - docker 清理,如已停止的容器清理、失效的数据卷和网络、缓存、镜像等,
docker system prune
#
#深度清理
#清理整个系统,且只会保留真正在使用的镜像,容器,数据卷以及网络,需要格外谨慎
#如,不能在生产环境中运行,因为一些备用镜像(用于备份,回滚等)会被删除=
docker system prune -a
2. Docker 手工清理
Docker(版本 1.13 之前)旧版本没有 docker system 命令,可以进行手动清理,常用的命令有:
[1] - 删除所有关闭的容器
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
[2] - 删除无 tag 的镜像
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
[3] - 删除无用的数据卷
docker volume rm $(docker volume ls -qf dangling=true)
3. Docker 磁盘占用清理
Docker 长期运行后,/var/lib/docker
占用较多,
df -lh
输出如:
udev 32G 0 32G 0% /dev
tmpfs 6.3G 4.0M 6.3G 1% /run
/dev/nvme0n1p2 457G 381G 53G 88% /
tmpfs 64G 0 64G 0% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 32G 0 32G 0% /sys/fs/cgroup
tmpfs 6.3G 24K 6.3G 1% /run/user/121
tmpfs 6.3G 0 6.3G 0% /run/user/1001
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/5a****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/e3****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/87****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/71****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/78****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/595****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/17****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/34****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/fa****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/e0****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/9f****/merged
overlay 457G 381G 53G 88% /var/lib/docker/overlay2/68****/merged
其中,overlay
分区是 Docker 的虚拟文件系统,其真实的文件系统是 /dev/vda1. 所以要找到是什么原因大量占据了 /dev/vda1.
再者,
cd /var/lib/docker
du -lh --max-depth=1
输出如:
245G ./overlay2
138G ./containers
96K ./network
72K ./buildkit
20K ./plugins
20K ./builder
28K ./volumes
4.0K ./trust
4.0K ./tmp
4.0K ./runtimes
53M ./image
4.0K ./swarm
383G .
一般是两种原因.
3.1. 无用镜像和容器太多
docker system df -v
#清理磁盘,删除关闭的容器、无用的数据卷和网络,以及无tag的镜像
docker system prune
#将没有容器使用Docker镜像都删除
docker system prune -a
3.2. 容器输出的日志太大
容器长时间运行,往往是打印了大量的日志未清理,占据了大量磁盘空间.
容器的日志文件在/var/lib/docker/containers/{containerId}
下.
日志文件中以 -json.log
结尾的即为日志文件. 可以对此进行清理:
cd /var/lib/docker/containers/{containerId}
cat /dev/null > *-json.log
#(建议清理后重启该容器服务)
3.3. 日志和大文件等占用
一些日志文件,大文件占用了 /dev/vda1
分区. 这个分区一般是挂载在 “/” 下面.
可以重点关注下面几个目录:
- /var/tmp
- /var/log
- /root
4. Nginx 示例
#拉取 nginx 镜像
docker pull nginx
#后台启动一个nginx,将服务器的8080端口映射到容器的80端口
docker run -d -p 8080:80 nginx
#Docker廋身
#docker system prune
#停止Docker服务
systemctl stop docker
#创建目标目录
mkdir -p /data/docker/
#同步源目录文件到目标目录
rsync -avz /var/lib/docker/ /data/docker
#修改Docker配置文件
vim /etc/docker/daemon.json
#修改或者新增内容如下
{
"data-root": "/data/docker"
}
#启动Docker服务
systemctl start docker
# 查看是否修改成功
docker info | grep "Docker Root Dir"
#输出:Docker Root Dir: /data/docker