Docker存储调整

概述

主要介绍docker的devicemapper和overlay2这两种常用配置参数,操作系统在7.4及docker版本在1.13.1以上建议使用overlay2存储方式;以及docker存储位置的调整,这些配置调整主要是为了应对客户那里不同的环境,比如,有的客户机器上没有磁盘可以挂载,这就需要使用系统盘的额外空间了,这个空间可能是个目录或者是个VG;再或者有的客户docker默认路径/var/lib/docker下是不允许放置数据,所以这个空间非常小,需要调整位置;将以下参数根据客户的不同需求进行排列组合应该就满足大部分需求了。另外还有一些配置过程中产生的问题做个记录。做个总结小记,怕又忘了。

修改docker存储的位置

  1. 停止docker服务
systemctl stop docker
  1. 编辑/usr/lib/systemd/system/docker.service文件
ExecStart=/usr/bin/dockerd-current \
          --graph=/opt/docker-data \
  1. 重启服务
systemctl daemon-reload 
systemctl start docker
  1. 检查Docker Root Dir字段的值是否为修改后的
docker info
...
Docker Root Dir: /opt/docker-data
...
  1. 注意点
如果开启了selinux,新建的目录需要配置selinux的上下文,否则docker 容器启动会有问题,如果selinux是permissive或disabled,则没问题。

/etc/sysconfig/docker-storage-setup常用配置介绍

  • 这些参数用man docker-storage-setup就可以查看到了。
STORAGE_DRIVER: 指定存储的种类,默认是devicemapper,可以修改为overlay2。
CONTAINER_THINPOOL: 这个值是给STORAGE_DRIVER为devicemapper时使用的,用于指定使用的lv名字
EXTRA_STORAGE_OPTIONS: 用于指定一些额外存储参数,这个就是作为docker的启动参数。
DEVS: 用于指定设备,设备可以是一块盘,一个分区,如果没有指定,那么VG字段就需要指定了,使用VG的空间。
VG: 在指定设备的前提下并且系统没有对应的VG,则会自动创建;如果没有指定设备,那么就需要先创建一下。
===============================================================================================
以下几个参数比较少用,主要用于设置lv根据某个阈值进行动态扩容,不做介绍了,有兴趣的可以用个man查看。
GROWPART:
AUTO_EXTEND_POOL:
POOL_AUTOEXTEND_THRESHOLD:
POOL_AUTOEXTEND_PERCENT:
===============================================================================================
CHUNK_SIZE:设置chunk的大小,一般也不怎么设置。
DEVICE_WAIT_TIMEOUT:在使用docker-storage-setup时等待创建的时间,默认60秒。
WIPE_SIGNATURES:有时候磁盘上有数据,这个参数用于确认删除,值有true/false,true是强制删除。
===============================================================================================
接下来的几个参数主要用来创建一个LV(需要先指定DEV),并且把这个LV创建为xfs的文件系统然后mount到指定的路径下,其实这个参数跟docker没有直接关系。
CONTAINER_ROOT_LV_NAME: 指定lv名字
CONTAINER_ROOT_LV_MOUNT_PATH: 指定mount路径
CONTAINER_ROOT_LV_SIZE: 指定lv大小,默认是40%。
===============================================================================================
DATA_SIZE: 用于指定使用多少存储,这个是docker会直接使用的lv大小,这个参数没法指定百分比。
以下几个参数也很少使用,没有玩过,感兴趣的可以去man一下看看。
ROOT_SIZE:
MIN_DATA_SIZE:
POOL_META_SIZE:

配置overlay2单独使用一块盘

  1. 停止docker服务
systemctl stop docker
rm -rf /var/lib/docker/
  1. 配置/etc/sysconfig/docker-storage-setup
STORAGE_DRIVER=overlay2
DEVS=/dev/sdb
CONTAINER_ROOT_LV_NAME=dockerlv
CONTAINER_ROOT_LV_SIZE=100%FREE
# 下面这个mount的路径就比较特殊了,其实这个相关的配置文件就是使用sdb创建一个pv、vg、lv,然后格式化成xfs,最后mount一下,docker只是去使用这个路径下空间,如果docker存储的路径需要改变,这个mount的路径也需要进行修改。
CONTAINER_ROOT_LV_MOUNT_PATH=/var/lib/docker
VG=dockervg
  1. 初始化docker存储启动docker
docker-storage-setup
systemctl start docker
  1. 最后通过docker info去查看存储相关的配置进行验证

配置overlay2单独使用一个分区

使用已有的VG则只需要在使用一块盘的方法之上把DEVS字段修改为某个分区即可。

配置overlay2使用已有VG

使用已有的VG则只需要在使用一块盘的方法之上把DEVS字段删除,VG字段修改为已有的VG即可,如果没有指定默认使用根文件系统所在的VG。

配置devicemapper单独使用一块盘

  1. 停止docker服务
systemctl stop docker
rm -rf /var/lib/docker/
  1. 配置/etc/sysconfig/docker-storage-setup
STORAGE_DRIVER=devicemapper
CONTAINER_THINPOOL=docker-pool
DEVS=/dev/sdb
VG=docker-vg
  1. 配置生效
# docker-storage-setup
INFO: Writing zeros to first 4MB of device /dev/sdb
4+0 records in
4+0 records out
4194304 bytes (4.2 MB) copied, 0.00860744 s, 487 MB/s
INFO: Device node /dev/sdb1 exists.
  Physical volume "/dev/sdb1" successfully created.
  Volume group "docker-vg" successfully created
  Using default stripesize 64.00 KiB.
  Rounding up size to full physical extent 24.00 MiB
  Thin pool volume with chunk size 512.00 KiB can address at most 126.50 TiB of data.
  Logical volume "docker-pool" created.
  Logical volume docker-vg/docker-pool changed.
  1. 启动docker
systemctl start docker
  1. 默认情况下docker-pool这个lv只会使用vg的40%空间,这个可以通过指定DATA_SIZE或者后面再通过lvextend去扩容lv。

配置devicemapper单独一个分区

方法同配置devicemapper单独使用一块盘,只需要将DEVS指定为特定分区即可。

配置devicemapper使用已有VG

方法同配置devicemapper单独使用一块盘,将DEVS字段删除,并将VG字段修改为已有的VG即可,如果没有指定默认使用根文件系统所在的VG。

注意点

  1. 如果此前这块盘被使用过,创建了pv,vg,lv,需依次删除lv、vg、pv,然后再使用fdisk删除sdb1分区,执行partprobe,最后再执行docker-storage-setup。
  2. 在使用一块盘、分区、VG,lv默认使用的是所在VG的40%空间,这个要看具体
  3. 执行docker-storage-setup报错如下错误时,将WIPE_SIGNATURES=true追加至/etc/sysconfig/docker-storage-setup文件后。
ERROR: Found dos signature on device /dev/sdb at offset 0x1fe. Wipe signatures using wipefs or use WIPE_SIGNATURES=true and retry.
  1. 如果再次执行docker-storage-setup还会报如下错,删除/etc/sysconfig/docker-storage文件再次执行即可。
INFO: Wipe Signatures is set to true. Any signatures on /dev/sdb will be wiped.
/dev/sdb: 2 bytes were erased at offset 0x000001fe (dos): 55 aa
/dev/sdb: calling ioclt to re-read partition table: Success
INFO: Writing zeros to first 4MB of device /dev/sdb
4+0 records in
4+0 records out
4194304 bytes (4.2 MB) copied, 0.00307498 s, 1.4 GB/s
INFO: Device node /dev/sdb1 exists.
  Physical volume "/dev/sdb1" successfully created.
  Volume group "docker-vg" successfully created
INFO: Found an already configured thin pool /dev/mapper/docker--vg-docker--pool in /etc/sysconfig/docker-storage
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 60 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 55 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 50 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 45 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 40 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 35 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 30 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 25 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 20 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 15 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 10 seconds
INFO: Waiting for device /dev/mapper/docker--vg-docker--pool to be available. Wait time remaining is 5 seconds
INFO: Timed out waiting for device /dev/mapper/docker--vg-docker--pool
ERROR: Already configured thin pool /dev/mapper/docker--vg-docker--pool is not available. If thin pool exists and is taking longer to activate, set DEVICE_WAIT_TIMEOUT to a higher value and retry. If thin pool does not exist any more, remove /etc/sysconfig/docker-storage and retry
  1. 当配置好存储后,启动docker时报如下错,我是使用restart去启动docker解决的。
# systemctl status docker.service -l
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2018-12-14 07:10:49 EST; 36s ago
     Docs: http://docs.docker.com
  Process: 2983 ExecStart=/usr/bin/dockerd-current --graph=/opt/docker-data --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --authorization-plugin=rhel-push-plugin --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIES (code=exited, status=1/FAILURE)
 Main PID: 2983 (code=exited, status=1/FAILURE)

Dec 14 07:10:47 test4 systemd[1]: Starting Docker Application Container Engine...
Dec 14 07:10:47 test4 dockerd-current[2983]: time="2018-12-14T07:10:47.476880833-05:00" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"
Dec 14 07:10:48 test4 dockerd-current[2983]: time="2018-12-14T07:10:48.028808212-05:00" level=info msg="libcontainerd: new containerd process, pid: 2991"
Dec 14 07:10:49 test4 dockerd-current[2983]: time="2018-12-14T07:10:49.037685204-05:00" level=error msg="devmapper: Unable to delete device: devicemapper: Error running DeleteDevice dm_task_run failed"
Dec 14 07:10:49 test4 dockerd-current[2983]: Error starting daemon: error initializing graphdriver: devmapper: Base Device UUID and Filesystem verification failed: devicemapper: Error running deviceCreate (ActivateDevice) dm_task_run failed
Dec 14 07:10:49 test4 systemd[1]: docker.service: main process exited, code=exited, status=1/FAILURE
Dec 14 07:10:49 test4 systemd[1]: Failed to start Docker Application Container Engine.
Dec 14 07:10:49 test4 systemd[1]: Unit docker.service entered failed state.
Dec 14 07:10:49 test4 systemd[1]: docker.service failed.
  1. 有时候遇到一些问题解决不了,那就重新来一次,进行删除lv、vg、pv、fdisk、partprobe、rm -f /etc/sysconfig/docker-storage、rm -rf /var/lib/docker/,最后执行docker-storage-setup
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352

推荐阅读更多精彩内容