更改docker默认数据目录,修改docker默认存储目录/var/lib/docker,docker常用文件系统类型,docker默认数据目录迁移,docker离线下载地址,rsync离线下载及安装

前言

       作者发现很多讲“更改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

docker常用文件系统类型

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

修改docker默认数据目录步骤

step1: 停止docker服务

sudo systemctl stop docker

step2: 备份/复制/迁移默认数据目录

两种方案:

方案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]$ 

step3: 修改docker默认数据目录配置

修改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关键字

step4: 启动docker服务

sudo systemctl start docker

step5: 查看效果

有些文章提的验证目录使用情况什么的其实是查看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

step6: 验证历史容器

验证历史容器是否能正常启动,这一步很关键,很多文章没有提到,但经常会有人前面所有步骤都没有问题,但这一步有问题

[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的存储驱动

# 查看文件系统类型(存储驱动)
docker info | grep Storage

如果喜欢我的文章,请帮我点赞,谢谢~  

你可能感兴趣的:(docker,Linux,存储,docker,容器,运维,修改docker默认存储目录,更改docker默认数据目录,docker默认数据目录迁移,rsync离线下载及安装)