作者发现很多讲“更改docker默认数据目录”的文章都没讲重点注意事项,如:复制或备份docker文件时一定要保留对象属性,否则会出现一些不可预知的问题,等。这也是为什么本文标题有提“rsync下载及安装”的原因。其实不使用rsync,使用cp -rp也可以实现
特别是对内网用户linux系统在内网中,本身没有安装rsync,又不能直接使用yum安装,这里提供相关下载链接
1、 rsync下载(macOS上需要使用下载工具下载,用于离线安装)
rsync-3.1.2-12.el7_9.x86_64.rpm
2、scp下载(用于离线安装)
ftp://ftp.icm.edu.pl/vol/rzm7/linux-centos-vault/7.1.1503/fasttrack/x86_64/Packages/scpio-1.5.2-13.el7.x86_64.rpm
3、docker下载(赠送,用于离线安装)
https://download.docker.com/linux/static/stable/x86_64/docker-27.5.1.tgz
4、docker扩展下载(赠送,用于离线安装)
https://download.docker.com/linux/static/stable/x86_64/docker-rootless-extras-27.5.1.tgz
文件拷贝说明 :
很多贴子提到rsync,其实可以不用rsync,cp就可以,scp也行,命令加个 -p参数就行:
-)cp拷贝/备份目录
# 拷贝文件(递归拷贝目录) -p 保留文件的属性,如权限、所有者和时间戳。
cp -rp /var/lib/docker /data2
-)scp拷贝/备份目录
# 拷贝文件(递归拷贝目录) -p 保留原文件的修改时间,访问时间和访问权限。
scp -rp /var/lib/docker /data2
-)rsync拷贝/备份目录
# 拷贝文件(递归拷贝目录),本地就不用z(压缩)了 -a 归档模式,递归并保留对象属性,等同于-rlptgoD。
rsync -rav /var/lib/docker /data2
OverlayFS、AUFS、Btrfs、DeviceMapper、VFS等。
1、OverlayFS:是一种通过在现有文件系统上叠加另一个文件系统来实现的文件系统类型,它可以将多个文件系统合并到一个统一的视图中。在Docker中,OverlayFS是默认的文件系统驱动程序,它支持在容器间共享文件。
2、AUFS(Advanced Multi-Layered Unification File System):是一种适用于Linux系统的文件系统类型,可以将多个目录合并成一个虚拟文件系统。在Docker中,AUFS是另一种常用的文件系统驱动程序,它支持在容器之间共享文件,但是在某些Linux发行版中,AUFS可能需要手动安装和配置。
3、Btrfs:是一种快速且可扩展的文件系统类型,支持快照、压缩和镜像等功能。在Docker中,Btrfs可以用于存储容器数据和镜像。
4、DeviceMapper:是一种基于LVM(逻辑卷管理器)的块设备映射工具,可以将多个物理存储设备组合成一个逻辑卷。在Docker中,DeviceMapper可以用于存储容器数据和镜像。
5、VFS:是一种简单的虚拟文件系统类型,适用于不支持OverlayFS和AUFS的Linux系统。在Docker中,VFS可以用于存储容器数据和镜像,但是它的性能较差,不适用于大规模的应用程序。
说明:
本文只针对最常用的OverlayFS文件系统类型(从Docker 17.05版本开始,overlay2
是默认的存储驱动,它提供了更好的性能和功能),修改docker默认存储目录
[docker@GZ**-PM153160 ~]$ df -lhT
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 126G 0 126G 0% /dev
tmpfs tmpfs 126G 0 126G 0% /dev/shm
tmpfs tmpfs 126G 786M 125G 1% /run
tmpfs tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/mapper/ctyunos-root ext4 69G 4.8G 61G 8% /
tmpfs tmpfs 126G 2.3M 126G 1% /tmp
/dev/sda1 ext4 976M 107M 803M 12% /boot
/dev/mapper/ctyunos-home ext4 1023G 3.0G 968G 1% /home
tmpfs tmpfs 26G 0 26G 0% /run/user/0
/dev/mapper/appvg-app xfs 1000G 7.1G 993G 1% /app
/dev/mapper/appvg-mylv1 xfs 2.0T 15G 2.0T 1% /data1
/dev/mapper/appvg-mylv2 ext4 3.1T 1.6G 3.0T 1% /data2
tmpfs tmpfs 26G 0 26G 0% /run/user/1002
docker默认数据目录:/var/lib/docker
现状:当前在“/”下,共只有69GB的空间
目标:将默认数据目录改为:/data2/docker (data2有 3.1TB 的空间, data2是一个LVM管理的逻辑卷)
LVM:相关知识可看作者的文章充电:
linux挂载新硬盘,查看硬盘,格式化分区,创建挂载点,挂载逻辑卷,普通方式挂载,LVM方式挂载,查看linux 磁盘卷组的剩余空间,创建指定大小的逻辑卷、使用剩余空间创建逻辑卷,ext4与xfs区别-CSDN博客
sudo systemctl stop docker
两种方案:
方案1、先备份再mv,使用mv的目标目录作为新的docker默认数据目录
方案2、直接复制,使用复制的目标目录作为新的docker默认数据目录
为了把原始的搞坏,保险起见,作者使用方案2:
[docker@GZ***-PM153160 data2]$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://docs.docker.com
Jan 29 18:59:49 GZ***-PM153160 dockerd[3773821]: time="2025-01-29T18:59:49.674027792+08:00" level=info msg="ignoring event" container=af23470926f8c230b46db6>
Jan 29 18:59:49 GZ***-PM153160 dockerd[3773821]: time="2025-01-29T18:59:49.682641241+08:00" level=warning msg="ShouldRestart failed, container will not be r>
Jan 29 19:00:11 GZ***-PM153160 systemd[1]: Stopping Docker Application Container Engine...
Jan 29 19:00:11 GZ***-PM153160 dockerd[3773821]: time="2025-01-29T19:00:11.718636717+08:00" level=info msg="Processing signal 'terminated'"
Jan 29 19:00:11 GZ***-PM153160 dockerd[3773821]: time="2025-01-29T19:00:11.719680476+08:00" level=info msg="stopping event stream following graceful shutdow>
Jan 29 19:00:11 GZ***-PM153160 dockerd[3773821]: time="2025-01-29T19:00:11.720000872+08:00" level=info msg="Daemon shutdown complete"
Jan 29 19:00:11 GZ***-PM153160 dockerd[3773821]: time="2025-01-29T19:00:11.720014427+08:00" level=info msg="stopping healthcheck following graceful shutdown>
Jan 29 19:00:11 GZ***-PM153160 dockerd[3773821]: time="2025-01-29T19:00:11.720093782+08:00" level=info msg="stopping event stream following graceful shutdow>
Jan 29 19:00:12 GZ***-PM153160 systemd[1]: docker.service: Succeeded.
Jan 29 19:00:12 GZ***-PM153160 systemd[1]: Stopped Docker Application Container Engine.
[docker@GZ***-PM153160 data2]$
[docker@GZ***-PM153160 data2]$
[docker@GZ***-PM153160 data2]$ sudo cp -rp /var/lib/docker /data2
[docker@GZ***-PM153160 data2]$
[docker@GZ***-PM153160 data2]$
修改docker配置文件
sudo vi /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "20m",
"max-file": "3"
},
"data-root": "/data2/docker",
"storage-driver": "overlay2"
}
默认目录:/var/lib/docker
注意:配置目录包含了docker关键字
sudo systemctl start docker
有些文章提的验证目录使用情况什么的其实是查看docker服务状态,如果状态有问题在第4步启动就会报错
[docker@GZ***-PM153160 data2]$ docker info
Client:
Version: 27.5.1
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc.)
Version: v0.9.1-beta3
Path: /usr/libexec/docker/cli-plugins/docker-app
buildx: Docker Buildx (Docker Inc.)
Version: v0.10.4-docker
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.27.1
Path: /usr/libexec/docker/cli-plugins/docker-compose
scan: Docker Scan (Docker Inc.)
Version: v0.23.0
Path: /usr/libexec/docker/cli-plugins/docker-scan
Server:
Containers: 4
Running: 2
Paused: 0
Stopped: 2
Images: 4
Server Version: 27.5.1
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
runc version: v1.2.4-0-g6c52b3f
init version: de40ad0
Security Options:
seccomp
Profile: builtin
Kernel Version: 4.19.90-2102.2.0.0062.ctl2.x86_64
Operating System: ctyunos 2.0.1
OSType: linux
Architecture: x86_64
CPUs: 40
Total Memory: 251.3GiB
Name: GZCRM-PM153160
ID: 71420b99-d634-413e-9223-4718d2e48124
Docker Root Dir: /data2/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.1
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
验证历史容器是否能正常启动,这一步很关键,很多文章没有提到,但经常会有人前面所有步骤都没有问题,但这一步有问题
[docker@GZ***-PM153160 docker-kafka]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5cd41f0611d1 1756e53f57e1 "/__cacert_entrypoin…" 2 days ago Up 5 seconds 0.0.0.0:19092->9092/tcp, [::]:19092->9092/tcp, 0.0.0.0:19093->9093/tcp, [::]:19093->9093/tcp smet-kafka
db867a1bae9a harbor.ta.com:30089/library/redis:7.4.0 "docker-entrypoint.s…" 3 days ago Up 8 minutes 0.0.0.0:6380->6379/tcp, [::]:6380->6379/tcp smet-redis
af23470926f8 c2b75a96e17e "/docker-entrypoint.…" 3 days ago Up 29 minutes 8080/tcp, 0.0.0.0:2182->2181/tcp, [::]:2182->2181/tcp, 0.0.0.0:2889->2888/tcp, [::]:2889->2888/tcp, 0.0.0.0:3889->3888/tcp, [::]:3889->3888/tcp smet-zookeeper
48ea6d74fc20 mysql:8.0.38 "docker-entrypoint.s…" 3 days ago Up 29 minutes 33060/tcp, 0.0.0.0:3307->3306/tcp, [::]:3307->3306/tcp mysql8.0.38
[docker@GZ***-PM153160 docker-kafka]$
注意:
1、如果原容器启动命令中带“ --restart always”参数,那么docker服务启动,容器就会自动启动
2、(否则)原容器启动命令中没有带“ --restart always”参数,需要手动启动
作者上面有两个容器是自动启动的(带“ --restart always”参数),有两个是手动启动的
此文章作者亲测验证,请大家放心参考~
# 查看文件系统类型(存储驱动)
docker info | grep Storage
如果喜欢我的文章,请帮我点赞,谢谢~