Linux Docker 一键安装脚本:

curl -sSL https://get.docker.com/ | sh

Docker 安装 - Docker 安装与配置 - AIUAI

以前汇总的一些 Docker 镜像和容器操作用法:

Docker - Image镜像创建及容器操作 - AIUAI

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
Last modification:July 22nd, 2022 at 02:38 pm