docker

【docker 笔记】docker 存储相关整理

2019-05-15  本文已影响0人  58bc06151329

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

1. 概述

Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: xfs

aufs

overlay2

[root@localhost docker]# pwd
/var/lib/docker
[root@localhost docker]# ll
total 8
drwx------.  3 root root   78 May 14 19:24 containers
drwx------.  3 root root   22 May  7 18:26 image
drwxr-x---.  3 root root   19 May  7 18:26 network
drwx------. 20 root root 4096 May 14 19:24 overlay2
drwx------.  4 root root   32 May  7 18:26 plugins
drwx------.  2 root root    6 May  7 18:26 swarm
drwx------.  3 root root   37 May 13 13:45 tmp
drwx------.  2 root root    6 May  7 18:26 trust
drwx------. 27 root root 4096 May 13 13:45 volumes
{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
[root@localhost docker]# tree -L 3 image/
image/
└── overlay2
    ├── distribution
    ├── imagedb
    │   ├── content
    │   └── metadata
    ├── layerdb
    │   ├── mounts
    │   ├── sha256
    │   └── tmp
    └── repositories.json

9 directories, 1 file
[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sdcvm-postgres      latest              9b4a60d30e64        47 hours ago        445 MB
sdcos               sdcos7              9df994b93bcf        5 weeks ago         350 MB
[root@localhost sha256]# pwd
/var/lib/docker/image/overlay2/imagedb/content/sha256
[root@localhost sha256]# ll | grep 9b4a60d30e64
-rw-------. 1 root root 6316 May 13 13:45 9b4a60d30e64b8c7c48e436c38cefe7dabb6bd92aea95e8453c2a2c6754cf4d5
......
"rootfs":{"type":"layers","diff_ids":
[
"sha256:522eaa81ad19cff9d9d64c7511c6288dc9695306f3e4f496d0cbd3379f31b743",
"sha256:bba9c8b6f7bf7db18623881d535ed612033daecada485fbc1443f676ebe681d9",
"sha256:e5f61ba5d0872fea5d70e0edf94d5dd204017bc31dc00698425de060f394b963",
......
]}
......
[root@localhost 522eaa81ad19cff9d9d64c7511c6288dc9695306f3e4f496d0cbd3379f31b743]# pwd
/var/lib/docker/image/overlay2/layerdb/sha256/522eaa81ad19cff9d9d64c7511c6288dc9695306f3e4f496d0cbd3379f31b743
[root@localhost 522eaa81ad19cff9d9d64c7511c6288dc9695306f3e4f496d0cbd3379f31b743]# ll
total 740
-rw-r--r--. 1 root root     64 May  7 18:27 cache-id
-rw-r--r--. 1 root root     71 May  7 18:27 diff
-rw-r--r--. 1 root root      9 May  7 18:27 size
-rw-r--r--. 1 root root 741803 May  7 18:27 tar-split.json.gz
[root@localhost 522eaa81ad19cff9d9d64c7511c6288dc9695306f3e4f496d0cbd3379f31b743]# cat cache-id 
7c217baf83ec2dd3b91d18813f638a90c38683ce9890d4195ce7557fbd2c1005[root@localhost 522eaa81ad19cff9d9d64c7511c6288dc9695306f3e4f496d0cbd3379f31b743]#
[root@localhost overlay2]# pwd
/var/lib/docker/overlay2
[root@localhost overlay2]# ll | grep 7c217baf83ec2dd3b91d18813f638a90c38683ce9890d4195ce7557fbd2c1005
drwx------. 3 root root     30 May  7 18:27 7c217baf83ec2dd3b91d18813f638a90c38683ce9890d4195ce7557fbd2c1005
[root@localhost overlay2]# cd 7c217baf83ec2dd3b91d18813f638a90c38683ce9890d4195ce7557fbd2c1005/
[root@localhost 7c217baf83ec2dd3b91d18813f638a90c38683ce9890d4195ce7557fbd2c1005]# ll
total 4
drwxr-xr-x. 17 root root 224 May  7 18:27 diff
-rw-r--r--.  1 root root  26 May  7 18:27 link
[root@localhost 1067c0c749b276951102faf9b44b0cc6b3bc061d1560d739e95cc719368e9401]# ll
total 8
drwxr-xr-x. 3 root root  17 May 13 13:45 diff
-rw-r--r--. 1 root root  26 May 13 13:45 link
-rw-r--r--. 1 root root 115 May 13 13:45 lower
drwx------. 2 root root   6 May 13 13:45 merged
drwx------. 2 root root   6 May 13 13:45 work

merged、容器层(upperdir)、镜像层(lowerdir)之间的关系

merged、容器层(upperdir)、镜像层(lowerdir)之间的关系

2. 数据卷(Data Volume)

bind mount

[root@localhost ]# docker run -d -P --name web2 -v /src/webapp:/webapp training/webapp python app.py
[root@localhost ]# docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash
[root@localhost ]# docker run -d -P --name web2 -v /src/webapp:/webapp:ro training/webapp python app.py

docker managed volume

[root@localhost ]# docker run -d -P --name web -v /webapp training/webapp python app.py
"Mounts": [
            {
                "Name": "f143b7f379fb6d012a08656fc950bf6df4bf5a5b90c72f310644aa997620122b",
                "Source": "/var/lib/docker/volumes/f143b7f379fb6d012a08656fc950bf6df4bf5a5b90c72f310644aa997620122b/_data",
                "Destination": "/webapp",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],

3. 卷容器(volume container)

[root@localhost ]# docker create -v /dbdata --name dbstore training/webapp  /bin/true
[root@localhost ]# docker run -d -P --name web3 --volumes-from dbstore training/webapp python app.py

data-packed volume container

4. 数据卷的基本操作

操作 说明
volume create 创建数据卷。
volume inspect 显示一个或多个卷的详细信息。
volume ls 显示数据卷列表。
volume prune 删除所有未使用的本地卷。
volume rm 删除一个或多个数据卷。

4.1 创建数据卷

参数 说明
--driver , -d 指定卷驱动程序名称,默认本地。
--label 为卷设置元数据。
--name 设置卷名称。
--opt , -o 设置驱动程序特定选项。
[root@localhost ]# docker volume create hello
hello
[root@localhost ]# docker run -d -v hello:/world busybox ls /world
[root@localhost ]# docker volume create --driver fake \
    --opt tardis=blue \
    --opt timey=wimey \
    foo

4.2 数据卷详细信息

参数 说明
--format , -f 使用给定的 GO 模板格式化输出。
[root@localhost ]# docker volume create
85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d
[root@localhost ]# docker volume inspect 85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d
[
  {
      "Name": "85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d",
      "Driver": "local",
      "Mountpoint": "/var/lib/docker/volumes/85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d/_data",
      "Status": null
  }
]
[root@localhost ]# docker volume inspect --format '{{ .Mountpoint }}' 85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d
/var/lib/docker/volumes/85bffb0677236974f93955d8ecc4df55ef5070117b0e53333cc1b443777be24d/_data

4.3 数据卷列表

参数 说明
--filter , -f 提供筛选值(例如 dangling=true)。
--format 使用给定的 GO 模板格式化输出。
--quiet , -q 简要输出,只显示卷名称。
[root@localhost ]# docker run -d  -v tyler:/tmpwork  busybox
f86a7dd02898067079c99ceacd810149060a70528eff3754d0b0f1a93bd0af18
[root@localhost ]# docker volume ls -f dangling=true
DRIVER              VOLUME NAME
local               rosemary

format

占位符 说明
.Name 卷名称。
.Driver 卷驱动。
.Scope 卷范围(local, global)。
.Mountpoint 主机上卷的装入点。
.Labels 分配给卷的所有标签。
.Label 此卷的特定标签的值。例如 {{.Label "project.version"}}
[root@localhost ]# docker volume ls --format "{{.Name}}: {{.Driver}}"
vol1: local
vol2: local
vol3: local

4.4 删除所有未使用的本地卷

参数 说明
--filter 提供筛选值(例如 label=)。
--force , -f 不提示确认。
[root@localhost ]# docker volume prune

WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
07c7bdf3e34ab76d921894c2b834f073721fccfbbcba792aa7648e3a7a664c2e
my-named-vol

Total reclaimed space: 36 B

4.5 删除数据卷

在删除容器的同时删除卷

[root@localhost ]# docker run -d -P --name web5 -v /webapp training/webapp python app.py
69199905a74cb360935e32f4e99f7f11319f6aa36033a920aa0bae25874f5c69
[root@localhost ]# docker volume ls
DRIVER              VOLUME NAME
local               5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330
local               838f4dd99721a9445be22a6b42d35e04cb43ad145ecf26107a9025f428587f76
local               vol1
[root@localhost ]# docker rm -vf web5
web5
[root@localhost ]# docker volume ls
DRIVER              VOLUME NAME
local               5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330
local               vol1

批量删除孤单卷

参数 说明
--force , -f 强制删除一个或多个卷。
[root@localhost ]# docker volume ls -qf dangling=true
244a23f3ab11f17345a68e77f96bb46a8dbaf445760dd86ab0faa07dfbd84236
c864cfac232e8728b1805abc8c363d324124b38e6297544a8cbbf61d883c7e46
f143b7f379fb6d012a08656fc950bf6df4bf5a5b90c72f310644aa997620122b
[root@localhost ]# docker volume rm $(docker volume ls -qf dangling=true)
244a23f3ab11f17345a68e77f96bb46a8dbaf445760dd86ab0faa07dfbd84236
c864cfac232e8728b1805abc8c363d324124b38e6297544a8cbbf61d883c7e46
f143b7f379fb6d012a08656fc950bf6df4bf5a5b90c72f310644aa997620122b
[root@localhost ]# docker volume ls
DRIVER              VOLUME NAME
local               5341c03f3b94f13f4c86d88ccb0f3b63487adf30dea7ae6b2d06e947235e7330
local               vol1
上一篇 下一篇

猜你喜欢

热点阅读