--- title: 问题集 date: 2022-06-19 author: ac tags: - Docker categories: - DevOps --- ### 1. 部署pg或ck数据库 当需要保留默认的数据库配置和数据,不让每次容器停止后启动数据重新被自动初始化时,需要将数据和配置的目录挂载出来。 - 先启动一个没有挂载目录的容器; - 用`docker cp`命令将容器内部的配置目录和数据目录拷贝一份到宿主机上。 - 再删掉容器,用`-v`挂载复制到本地的配置目录和数据目录。 ```shell # 查看容器详情, docker inspect 容器ID ``` ### 2. Docker 磁盘空间使用分析与清理 解决磁盘空间不足 用户发现 Docker 宿主机的磁盘空间使用率非常高。通过 du 逐层分析,发现是 [Volume](https://so.csdn.net/so/search?q=Volume&spm=1001.2101.3001.7020) 或 overlay2 等目录占用了过高空间。示例如下 ```shell # 根据使用的存储驱动的不同,相应目录会有所不同: [root@node3 docker]# du -h --max-depth=1 |sort 104K ./network 13M ./image 20K ./plugins 24G ./overlay2 # 这个目录占用了非常高的磁盘磁盘空间 25G . 283M ./volumes 4.0K ./swarm 4.0K ./tmp 4.0K ./trust 518M ./containers ``` **分析 Docker 空间分布** Docker 的内置 CLI 指令 `docker system df`,可用于查询镜像(Images)、容器(Containers)和本地卷(Local Volumes)等空间使用大户的空间占用情况。 示例输出如下: ```shell [root@node3 docker]# docker system df TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 17 12 2.713 GB 1.144 GB (42%) Containers 15 12 10.75 GB 0 B (0%) Local Volumes 8 4 282.9 MB 241.8 MB (85%) ``` **查看空间占用细节** 可以进一步通过 `-v`参数查看空间占用细节,以确定具体是哪个镜像、容器或本地卷占用了过高空间。示例输出如下: ```shell [root@node3 docker]# docker system df -v # 镜像的空间使用情况 Images space usage: REPOSITORY TAG IMAGE ID CREATED SIZE SHARED SIZE UNIQUE SIZE CONTAINERS busybox latest 6ad733544a63 5 days ago 1.129 MB 0 B 1.129 MB 1 nginx latest b8efb18f159b 3 months ago 107.5 MB 107.5 MB 0 B 4 ubuntu latest 14f60031763d 3 months ago 119.5 MB 0 B 119.5 MB 0 alpine 3.3 606fed0878ec 4 months ago 4.809 MB 0 B 4.809 MB 0 tutum/curl latest 01176385d84a 3 years ago 224.4 MB 0 B 224.4 MB 1 # 容器的空间使用情况 Containers space usage: CONTAINER ID IMAGE COMMAND LOCAL VOLUMES SIZE CREATED STATUS NAMES d1da451ceeab busybox "ping 127.0.0.1" 0 10.7 GB About an hour ago Up About an hour dstest 956ae1d241e8 nginx:latest "nginx -g 'daemon ..." 0 26 B 3 months ago Up 3 months localTest_restserver_2 74973d237a06 nginx:latest "nginx -g 'daemon ..." 0 2 B 3 months ago Up 3 months # 本地卷的空间使用情况 Local Volumes space usage: VOLUME NAME LINKS SIZE 83ba8747f4172a3c02a15f85b71e1565affca59f01352b4a94e0d28e65c26d1c 0 830 B a479c303b278f1442f66644f694a554aac630e72b7a27065a11ef85c4d87b648 0 22.16 MB 79a25b6376e0d6587d8f4f24e08f9467981f04daad14bf3353a12d727d065503 1 18.83 MB ``` **空间清理 ** 可以通过 Docker 内置的 CLI 指令 `docker system prune`来进行自动空间清理。 不同状态的镜像: - 已使用镜像(used image): 指所有已被容器(包括已停止的)关联的镜像。即 docker ps -a 看到的所有容器使用的镜像。 - 未引用镜像(unreferenced image):没有被分配或使用在容器中的镜像,但它有 Tag 信息。 - 悬空镜像(dangling image):未配置任何 Tag (也就无法被引用)的镜像,所以悬空。这通常是由于镜像 build 的时候没有指定 -t 参数配置 Tag 导致的。 ### 参考文章 [1] 你必须知道的Docker数据卷(Volume) https://www.cnblogs.com/edisonchou/p/docker_volumes_introduction.html [2] docker-3.5 graphdriverhttps://juejin.cn/post/6934732393248981000 [3] Docker 磁盘空间使用分析与清理 解决磁盘空间不足 https://blog.csdn.net/biao0309/article/details/106950944