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 sh
adduser -D jonny
adduser -D jack
创建文件
cd /alpine-acl-vol # 进入 docker volume 所在路径
touch f-root f-jonny f-jack
授权
chown jonny:jonny f-jonny
chown jack:jack f-jack
chmod 640 f-root r-jonny f-jack
setfacl -m u:jonny:r f-jack
权限检查
su jonny
cat f-jonny # 正常
cat f-jack # 正常,因为之前setfacl设置过
exit
su jack
cat f-jack # 正常
cat f-jonny # 无权限
exit
备份用户、组信息
# 目录:/alpine-acl-vol
mkdir user-info
cd user-info
cp /etc/passwd . # 用户信息
cp /etc/group . # 组信息
cp /etc/shadow . # 密码信息
重建容器
docker rm -f alpine-acl
docker run -d --name alpine-acl --mount source=alpine-acl-vol,destination=/alpine-acl-vol alpine-acl:1.0.0
同步用户、组
cp /alpine-acl-vol/* /etc
重新做权限检查
结果和之前一致