docker基础:非root用户操作并将数据目录进行nfs mount

news/2024/11/23 10:02:42/

本文记录一下如何使用非root用户进行docker操作,并将数据目录从其他机器进行nfs mount。

场景说明

安装docker所在机器由于磁盘空间不足,将数据目录/var/lib/docker进行mount,使用别的机器的空间。在一些企业中由于标准虚机的大小可能已经规范,会产生类似的问题。

环境模拟

hostip用途软件安装进程启动
host118192.168.163.118安装了docker的机器docker与nfs-utilssystemctl start docker
host131192.168.163.131NFS服务器,提供docker的数据目录的空间nfs-utils与rpcbindsystemctl start rpcbind 与systemctl start nfs
  • docker非root用户的安装设定方式可参看
    https://liumiaocn.blog.csdn.net/article/details/88651955

  • nfs mount操作具体可参看
    https://blog.csdn.net/liumiaocn/article/details/71157568

事前准备

NFS服务器

事前准备

使用非root用户appman进行操作,事先准备该用户与sudo权限

[root@host131 ~]# useradd appman
[root@host131 ~]# passwd appman
Changing password for user appman.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@host131 ~]# vi /etc/sudoers
[root@host131 ~]# grep appman /etc/sudoers
appman	ALL=(ALL) 	ALL
[root@host131 ~]#

创建用于mount的目录

创建/opt/lib/docker目录用于mount,可以看到此目录所在卷仍有一些使用空间。

[appman@host131 ~]$ id
uid=1000(appman) gid=1000(appman) groups=1000(appman) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[appman@host131 ~]$ sudo mkdir -p /opt/lib/docker
[sudo] password for appman: 
[appman@host131 ~]$ sudo ls -l /opt/lib/docker
total 0
[appman@host131 ~]$ sudo ls -ld /opt/lib/docker
drwxr-xr-x. 2 root root 6 Feb 16 12:58 /opt/lib/docker
[appman@host131 ~]$ df /opt/lib/docker
Filesystem              1K-blocks    Used Available Use% Mounted on
/dev/mapper/centos-root  17811456 1304176  16507280   8% /
[appman@host131 ~]$ 

注:本文mount源使用了root所在卷,这不是一个好的习惯,仅用于示例使用方式。

设定NFS服务器侧exports

[appman@host131 ~]$ cat /etc/exports
[appman@host131 ~]$ ls -l /etc/exports
-rw-r--r--. 1 root root 0 Jun  7  2013 /etc/exports
[appman@host131 ~]$ sudo vi /etc/exports
[sudo] password for appman: 
[appman@host131 ~]$ cat /etc/exports
/opt/lib/docker 192.168.163.118(rw,sync,no_root_squash)
[appman@host131 ~]$ 
[appman@host131 ~]$ sudo exportfs
[appman@host131 ~]$

确认nfs

[appman@host131 ~]$ sudo showmount -e localhost
Export list for localhost:
/opt/lib/docker 192.168.163.118
[appman@host131 ~]$ 

docker服务所在机器

事前准备

停下原有docker服务,为了显示此目录为nfs mount之后的目录,演示时删除了原有内容,请根据需要进行备份

[appman@host118 ~]$ id
uid=1003(appman) gid=1003(appman) groups=1003(appman),1004(docker) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[appman@host118 ~]$ sudo ls -l /var/lib/docker
[sudo] password for appman: 
total 0
drwx------. 2 root root  6 Mar 12 08:52 containers
drwx------. 3 root root 21 Mar 12 08:52 image
drwxr-x---. 3 root root 19 Mar 12 08:52 network
drwx------. 2 root root  6 Mar 12 08:52 overlay
drwx------. 4 root root 32 Mar 12 08:52 plugins
drwx------. 2 root root  6 Mar 12 08:52 swarm
drwx------. 2 root root  6 Mar 12 08:52 tmp
drwx------. 2 root root  6 Mar 12 08:52 trust
drwx------. 2 root root 25 Mar 12 08:52 volumes
[appman@host118 ~]$ systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Active: active (running) since Tue 2019-03-12 08:52:19 CST; 53min agoDocs: http://docs.docker.comMain PID: 7641 (dockerd)CGroup: /system.slice/docker.service├─7641 /usr/bin/dockerd -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock --selinux-enabled=false --log-opt max-size=1g...└─7644 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeo...
[appman@host118 ~]$ systemctl stop docker
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
[appman@host118 ~]$ sudo rm -rf /var/lib/docker
[appman@host118 ~]$ 

创建挂载点

[appman@host118 ~]$ sudo ls -l /var/lib/docker
ls: cannot access /var/lib/docker: No such file or directory
[appman@host118 ~]$ sudo mkdir -p /var/lib/docker
[appman@host118 ~]$ sudo ls -l /var/lib/docker
total 0
[appman@host118 ~]$

执行挂载

可以使用如下一次性方式进行挂载

mount命令:mount -t nfs 192.168.163.131:/opt/lib/docker /var/lib/docker

但建议写到fstab中,避免因重启导致问题

[appman@host118 ~]$ grep docker /etc/fstab
[appman@host118 ~]$ sudo vi /etc/fstab
[appman@host118 ~]$ grep docker /etc/fstab
192.168.163.131:/opt/lib/docker /var/lib/docker nfs rw
[appman@host118 ~]$ df /var/lib/docker
Filesystem              1K-blocks     Used Available Use% Mounted on
/dev/mapper/centos-root  36805060 34040224   2764836  93% /
[appman@host118 ~]$
  • 确认是否可进行挂载
[appman@host118 ~]$ showmount -e 192.168.163.131
Export list for 192.168.163.131:
/opt/lib/docker 192.168.163.118
[appman@host118 ~]$
  • 执行挂载
[appman@host118 ~]$ sudo mount /var/lib/docker
[sudo] password for appman: 
[appman@host118 ~]$ df /var/lib/docker
Filesystem                      1K-blocks    Used Available Use% Mounted on
192.168.163.131:/opt/lib/docker  17811456 1304064  16507392   8% /var/lib/docker
[appman@host118 ~]$ ls -l /var/lib/docker
total 0
[appman@host118 ~]$ 
  • 启动docker
[appman@host118 ~]$ systemctl start docker
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password: 
==== AUTHENTICATION COMPLETE ===
[appman@host118 ~]$ docker version
Client:Version:      1.13.1API version:  1.26Go version:   go1.7.5Git commit:   092cba3Built:        Wed Feb  8 08:47:51 2017OS/Arch:      linux/amd64Server:Version:      1.13.1API version:  1.26 (minimum version 1.12)Go version:   go1.7.5Git commit:   092cba3Built:        Wed Feb  8 08:47:51 2017OS/Arch:      linux/amd64Experimental: false
[appman@host118 ~]$ 
[appman@host118 ~]$ ls -l /var/lib/docker
ls: cannot open directory /var/lib/docker: Permission denied
[appman@host118 ~]$ sudo ls -l /var/lib/docker
total 0
drwx------. 2 root root  6 Feb 17 02:01 containers
drwx------. 3 root root 21 Feb 17 02:01 image
drwxr-x---. 3 root root 19 Feb 17 02:01 network
drwx------. 2 root root  6 Feb 17 02:01 overlay
drwx------. 4 root root 32 Feb 17 02:01 plugins
drwx------. 2 root root  6 Feb 17 02:01 swarm
drwx------. 2 root root  6 Feb 17 02:01 tmp
drwx------. 2 root root  6 Feb 17 02:01 trust
drwx------. 2 root root 25 Feb 17 02:01 volumes
[appman@host118 ~]$
  • 同样此时确认NFS服务器的/opt/lib/docker目录,也会发现刚刚生成的内容
[appman@host131 ~]$ sudo ls /opt/lib/docker
containers  image  network  overlay  plugins  swarm  tmp  trust  volumes
[appman@host131 ~]$ 
  • 使用docker load验证一下docker动作
    如下所示,动作可以正常执行。
[appman@host118 ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[appman@host118 ~]$ docker load -i /tmp/alpine.tar
503e53e365f3: Loading layer [==================================================>] 5.793 MB/5.793 MB
Loaded image: alpine:3.9
[appman@host118 ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
alpine              3.9                 caf27325b298        5 weeks ago         5.52 MB
[appman@host118 ~]$

总结

虽然验证了这种方式,建议不要做的这么纠结。


http://www.ppmy.cn/news/408751.html

相关文章

如何使用powershell批量创建office 365账号

首先,对powershell做一个简单介绍。 当前powershell有四版本,分别为1.0,2.0,3.0 ,4.0 如果您的系统是window7或者Windows Server 2008,那么PowerShell 2.0已经内置了,可以升级为3.0,4.0。如果您…

网络原理知识点汇总

OSI七层模型 vs. TCP/IP 五层模型(有时候也说四层)及各层协议 七层:物理层:为数据端设备提供传送数据的通路, IEEE802 数据链路层:提供介质访问和链路管理, ARP,MTU 网络层&#xf…

【OpenStack(Train版)安装部署(十)】之img格式cirros镜像创建多实例分析

文章目录 本文章由公号【开发小鸽】发布!欢迎关注!!!1.制作qcow2格式的镜像2.img格式镜像创建实例3.img格式同时创建多个实例4.通过server实例创建新的镜像5.通过日志分析一个server实例的创建过程(1)nova-…

Git:一文阐述常见命令的使用

前言 为什么写这篇Git文章? 在日常的需求开发中,发现部分同学不太熟悉Git命令,往往是通过idea自带的一些工具来执行简单的Git命令,遇到一些突发问题的时候,往往不知所措。 简单来说,就是Git基础知识匮乏…

业务可视化-让你的流程图“Run“起来(4.实际业务场景测试)

🚀 优质资源分享 🚀 学习路线指引(点击解锁)知识定位人群定位🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一…

windows各个原版系统下载集锦 MS-DOS Windows 3.1 Windows NT Windows 98等

windows各个原版系统下载集锦 MS-DOS Windows 3.1 Windows NT Windows 98等[@more@] MS-DOS 6.0 (English) 文件名 EN_MSDOS60.exe 邮寄日期 (UTC): 10/12/2000 9:36:00 PM SHA1: 877B0B8E391ED07CB83214CB09E8F3B10C4B206F ISO/CRC: E859A6AB ed2k://|file|EN_MSDOS60.ex…

区位码、国标码、机内码、字型码

转载于http://lyj.fj61.net/show.aspx?id517&cid81 一、区位码 区位码是一个四位的十进制数,前两位叫做区码(01-94),后两位叫做位码(01-94)。汉字与符号组成一个9494的矩阵。在此方阵中,每一行称为一个“区”,每一列称为一…

Failed to create Spark client for Spark session/30041Code

记录排错历程 问题简介:根据尚硅谷数仓4.0学习集群运行了一段时间,可以正常使用spark运行,出现阶段运行情况的红色框,但是不知道为什么突然有一次,返回30041code,无法运行创建spark session。 第一种情况&…