meface/docs/article/devops/docker/docker_question.md

117 lines
5.3 KiB
Markdown
Raw Normal View History

2023-11-17 10:54:23 +08:00
---
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