Docker 安装记录

发布 : 2019-01-30 分类 : 运维 浏览 :

docker 部署环境记录

版本环境说明

1
2
3
4
5
6
7
系统内核,系统版本,应用版本
# uname -r
3.10.0-327.el7.x86_64
# cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
# docker -v
Docker version 1.12.6, build ec8512b/1.12.6

修改docker存储

目前docker支持的存储驱动类型,有aufs,Device mapper,btrfs,overlayfs和zfs,所有驱动都用到写时复制(CoW)的技术。而出现警告的原因,就是在centos系统上(默认不支持aufs),docker daemon启动时,找到的后端存储驱动只有device mapper类型,就会通过loopback的方式,创造100G的sparse文件,并将其作为device mapper的存储池,而所有容器都从该存储池中分配默认10G的存储空间使用(可以理解为通过dd命令创造一个稀疏文件,再把这个稀疏的文件当做块设备通过loopback挂载出来)。而loopback的方式,性能和稳定性都不是很好,所以才出现上述警告。因此解决的办法,也在使用device mapper存储时,避免使用loopback即可。

1
2
3
存储修改参考链接:
https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-loop-lvm-mode-for-testing
https://docs.docker.com/engine/userguide/storagedriver/device-mapper-driver/#configure-direct-lvm-mode-for-production
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
重点看一下存储信息及警告信息。centos时默认使用device mapper loop的方式存储,不推荐生产使用,我们需要修改一下为device mapper-lvm
# docker info
...
Server Version: 1.12.6
Storage Driver: devicemapper
Pool Name: docker-253:0-939524623-pool
Pool Blocksize: 65.54 kB
Base Device Size: 10.74 GB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 11.8 MB
Data Space Total: 107.4 GB
Data Space Available: 107.4 GB
Metadata Space Used: 581.6 kB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.147 GB
Thin Pool Minimum Free Space: 10.74 GB
.....
WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.107-RHEL7 (2015-10-14)
...
  • 手动配置修改direct-lvm模式
  1. 使用块设备,/dev/sda
    分出2个T给docker用,也可以将整块设备直接分给docker

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # fdisk -l /dev/sda

    磁盘 /dev/sda:7696.6 GB, 7696581394432 字节,15032385536 个扇区
    Units = 扇区 of 1 * 512 = 512 bytes
    扇区大小(逻辑/物理):512 字节 / 512 字节
    I/O 大小(最小/最佳):512 字节 / 512 字节
    磁盘标签类型:dos
    磁盘标识符:0x00000000

    设备 Boot Start End Blocks Id System
    /dev/sda1 2048 4294967294 2147482623+ 8e Linux LVM
  2. 安装以下软件包

RHEL / CentOS的:==device-mapper-persistent-data,lvm2,和所有的依赖==

3.创建物理卷

1
2
3
4
# pvcreate /dev/sdb1
WARNING: xfs signature detected on /dev/sdb1 at offset 0. Wipe it? [y/n]: y
Wiping xfs signature on /dev/sdb1.
Physical volume "/dev/sdb1" successfully created

4.创建卷组

1
2
# vgcreate docker /dev/sdb1
Volume group "docker" successfully created

5.创建两个命名的逻辑卷thinpool并thinpoolmeta使用该 lvcreate命令。最后一个参数指定可用空间的大小,以便在空间不足时自动扩展数据或元数据,作为临时停止间隔。这些是推荐值。

1
2
3
4
# lvcreate --wipesignatures y -n thinpool docker -l 95%VG
Logical volume "thinpool" created.
# sudo lvcreate --wipesignatures y -n thinpoolmeta docker -l 1%VG
Logical volume "thinpoolmeta" created.

6.使用lvconvert命令将卷转换为精简池和精简池元数据的存储位置

1
2
3
4
5
6
7
8
9
# sudo lvconvert -y \
--zero n \
-c 512K \
--thinpool docker/thinpool \
--poolmetadata docker/thinpoolmeta
WARNING: Maximum supported pool metadata size is 16.00 GiB.
WARNING: Converting logical volume docker/thinpool and docker/thinpoolmeta to pool's data and metadata volumes.
THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Converted docker/thinpool to thin pool.

7.通过lvm配置文件配置精简池的自动扩展。

1
2
3
4
5
6
7
8
9
10
指定thin_pool_autoextend_threshold和thin_pool_autoextend_percent 值。
thin_pool_autoextend_threshold是lvm 尝试自动扩展可用空间之前所用空间的百分比(100 =禁用,不推荐)。
thin_pool_autoextend_percent 是自动扩展时添加到设备的空间量(0 =禁用)。
当磁盘使用率达到80%时,下面的示例将增加20%的容量。

# vi /etc/lvm/profile/docker-thinpool.profile
activation {
thin_pool_autoextend_threshold=80
thin_pool_autoextend_percent=20
}

8.应用LVM配置文件

1
2
# sudo lvchange --metadataprofile docker-thinpool docker/thinpool
Logical volume "thinpool" changed.

9.启用对主机上逻辑卷的监视。如果没有这一步,即使在LVM配置文件中也不会自动扩展。

1
2
3
4
5
6
# lvs -o+seg_monitor
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Monitor
root centos -wi-ao---- 195.00g
root centos -wi-ao---- 195.00g
swap centos -wi-ao---- 4.00g
thinpool docker twi-a-t--- 1.90t 0.00 0.01 monitored

10.增加配置文件

1
2
3
4
5
6
7
8
9
# vim /etc/docker/daemon.json 
{
"storage-driver": "devicemapper",
"storage-opts": [
"dm.thinpooldev=/dev/mapper/docker-thinpool",
"dm.use_deferred_removal=true",
"dm.use_deferred_deletion=true"
]
}

11.删除原来的原数据

1
2
// 官网推荐将/var/lib/docker整个目录 清空,我测试只清空以下目录即可
# mv /var/lib/docker/devicemapper/ ~/

12.启动docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# systemctl daemon-reload
# systemctl start docker
# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 1.12.6
Storage Driver: devicemapper
Pool Name: docker-thinpool
Pool Blocksize: 524.3 kB
Base Device Size: 10.74 GB
Backing Filesystem: xfs
Data file:
Metadata file:
Data Space Used: 19.92 MB
Data Space Total: 2.089 TB
Data Space Available: 2.089 TB
Metadata Space Used: 2.085 MB
Metadata Space Total: 16.98 GB
Metadata Space Available: 16.98 GB
Thin Pool Minimum Free Space: 208.9 GB
Udev Sync Supported: true
Deferred Removal Enabled: true
Deferred Deletion Enabled: true
Deferred Deleted Device Count: 0
Library Version: 1.02.107-RHEL7 (2015-10-14)
Logging Driver: journald
Cgroup Driver: systemd
// 原来的警告已经没有了,并且data space 最大为2TB说明已经成功

本文作者 : WGY
原文链接 : http://geeklive.cn/2019/01/30/docker_install/undefined/docker_install/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
留下足迹