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

117 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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