Docker volume 调研
资料
关注问题
- 容器重启之后,用户信息、授权信息不丢失
- 新容器可以从 volume 读入用户信息、授权信息
操作
- 创建:
docker volume create my-vol - 查看列表:
docker volume ls - 查看详情:
docker volume inspect my-vol - 删除:
docker volume rm my-vol - 使用:
docker run --mount source=my-vol,destination=/my-vol
共享
k8s pvc调研
资料
基于 docker volume 和 k8s pvc 的文件共享方案
目标
- 用户可以做基础的文件管理:增删改查
- 用户可以共享文件到组,或者取消共享
- 容器重建之后用户信息、权限信息不丢失
- 支持docker volume
- 支持k8s pvc
当前方案
- 使用docker volume或k8s pvc存储用户文件
- 将用户信息、权限信息持久化
- /etc/passwd:用户名
- /etc/group:组名
- /etc/shadow:密码
- ACL授权信息默认存放在文件系统元数据区
主要操作
创建用户
adduser -D username
授权
- 用户:
setfacl -m u:username:rwx filename - 组:
setfacl -m g:groupname:rwx filename
取消授权
- 用户:
setfacl -x u:username filename - 组:
setfacl -x g:groupname filename
依赖
- OS用户管理命令:adduser/deluser
- OS组管理命令:addgroup/delgroup
- OS成员与组的关系管理命令:addgroup/delgroup
- ACL相关命令:setfacl/getfacl
验证
基于alpine-3.8镜像,安装acl工具,以docker volume为例(k8s pvc步骤基本一致)挂载docker volume: alpine-acl-vol到容器目录:/alpine-acl-vol
启动容器
docker run -d --name alpine-acl --mount source=alpine-acl-vol,destination=/alpine-acl-vol alpine-acl:1.0.0
创建用户
docker exec -ti alpine-acl shadduser -D jonnyadduser -D jack
创建文件
cd /alpine-acl-vol # 进入 docker volume 所在路径touch f-root f-jonny f-jack
授权
chown jonny:jonny f-jonnychown jack:jack f-jackchmod 640 f-root r-jonny f-jacksetfacl -m u:jonny:r f-jack
权限检查
su jonnycat f-jonny # 正常cat f-jack # 正常,因为之前setfacl设置过exitsu jackcat f-jack # 正常cat f-jonny # 无权限exit
备份用户、组信息
# 目录:/alpine-acl-volmkdir user-infocd user-infocp /etc/passwd . # 用户信息cp /etc/group . # 组信息cp /etc/shadow . # 密码信息
重建容器
docker rm -f alpine-acldocker run -d --name alpine-acl --mount source=alpine-acl-vol,destination=/alpine-acl-vol alpine-acl:1.0.0
同步用户、组
cp /alpine-acl-vol/* /etc
重新做权限检查
结果和之前一致
