docker如何搭建samba共享目录
作者:北极的企鹅88
文章介绍了如何使用Docker搭建一个Samba共享文件系统,首先安装了Docker容器,然后下载并拉取了Samba镜像,在本地创建了一个目录用于挂载,启动容器并添加了SMB用户名和密码,验证挂载成功,最后总结了主要参数
需求
- 因项目需要共享文件夹来传输数据。
- 正好接触docker,所以想用docker来搭建samba共享文件
- 系统:Centos7.6
1、安装docker容器
1.1 首先下载docker rpm包
container-selinux-2.107-1.el7_6.noarch.rpm containerd.io-1.2.6-3.3.el7.x86_64.rpm docker-ce-cli-19.03.8-3.el7.x86_64.rpm docker-ce-19.03.8-3.el7.x86_64.rpm
1.2 安装docker
将上面四个rpm包放入服务器中,分别执行下面命令 sudo rpm -ivh container-selinux-2.107-1.el7_6.noarch.rpm sudo rpm -ivh containerd.io-1.2.6-3.3.el7.x86_64.rpm sudo rpm -ivh docker-ce-cli-19.03.8-3.el7.x86_64.rpm sudo rpm -ivh docker-ce-19.03.8-3.el7.x86_64.rpm // 设置开机自启 sudo systemctl enable docker //启动docker容器 sudo systemctl start docker
1.3 验证是否安装成功
sudo systemctl status docker // 应返回running状态: ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Sun 2020-06-28 12:43:59 CST; 18s ago Docs: https://docs.docker.com Main PID: 30655 (dockerd) Tasks: 29 Memory: 51.6M CGroup: /system.slice/docker.service └─30655 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/con... 或者 sudo docker ps 应当返回一个空的列表 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2、下载samba镜像
2.1 首先在服务器中查找docker版的samba
// 查找使用最多的samba容器镜像 sudo docker search samba
2.2 pull samba 容器镜像
sudo docker pull dperson/samba
3、在本地创建个目录,以便于容器挂载
mkdir /hdddata/shared //在/home目录下创建shared目录 chmod 777 /hdddata/shared //修改shared权限,不修改的话连接进去会提示没有权限写入数据
4、启动镜像
docker run -it --name samba -p 139:139 -p 445:445 -v /hdddata/shared:/mount -d dperson/samba -u "centos;1qaz@WSX" -s "shared;/mount;yes;no;no;all;none"
"shared;/mount;yes;no;no;all;none" 参数说明:
分别是:
shared
:共享文件夹的名称(shared);/mount
:共享在samba容器中的路径(/mount);yes
:共享名称对所有工作组用户可见;no
:不是只读(也就是说可写);no
:不允许guest用户;all
:指定共享的所有权用户;none
:指定共享的超级用户;- 指定具有写权限的用户;
5、启动镜像进入容器内部,添加smb用户名和密码
进入容器内部 sudo docker exec -it 容器ID /bin/bash 添加smb用户名和密码 运行sudo smbpasswd -a centos命令添加用户,并设置密码为1qaz@WSX
6、验证挂载
sudo mount -t cifs -o rw,vers=2.0,dir_mode=0777,file_mode=0666,username=centos,password=1qaz@WSX,iocharset=utf8 //114.325.5.23/shared/ /hdddata/sharedEmpty
参数说明:
centos
:用户名1qaz@WSX
:密码114.325.5.23
:改成部署samba容器的ipshared
: 不变,需要挂载的名称,即步骤4的共享文件夹的名称,并不是路径(shared);
7、Github主要参数说明
以下是Github参数介绍: sudo docker run -it --rm dperson/samba -h Usage: samba.sh [-opt] [command] Options (fields in '[]' are optional, '<>' are required): -h This help -c "<from:to>" setup character mapping for file/directory names required arg: "<from:to>" character mappings separated by ',' -G "<section;parameter>" Provide generic section option for smb.conf required arg: "<section>" - IE: "share" required arg: "<parameter>" - IE: "log level = 2" -g "<parameter>" Provide global option for smb.conf required arg: "<parameter>" - IE: "log level = 2" -i "<path>" Import smbpassword required arg: "<path>" - full file path in container -n Start the 'nmbd' daemon to advertise the shares -p Set ownership and permissions on the shares -r Disable recycle bin for shares -S Disable SMB2 minimum version -s "<name;/path>[;browse;readonly;guest;users;admins;writelist;comment]" Configure a share required arg: "<name>;</path>" <name> is how it's called for clients <path> path to share NOTE: for the default values, just leave blank [browsable] default:'yes' or 'no' [readonly] default:'yes' or 'no' [guest] allowed default:'yes' or 'no' NOTE: for user lists below, usernames are separated by ',' [users] allowed default:'all' or list of allowed users [admins] allowed default:'none' or list of admin users [writelist] list of users that can write to a RO share [comment] description of share -u "<username;password>[;ID;group;GID]" Add a user required arg: "<username>;<passwd>" <username> for user <password> for user [ID] for user [group] for user [GID] for group -w "<workgroup>" Configure the workgroup (domain) samba should use required arg: "<workgroup>" <workgroup> for samba -W Allow access wide symbolic links -I Add an include option at the end of the smb.conf required arg: "<include file path>" <include file path> in the container, e.g. a bind mount 例子:Start an instance creating users and shares: sudo docker run -it -p 139:139 -p 445:445 -d dperson/samba -p \ -u "example1;badpass" \ -u "example2;badpass" \ -s "public;/share" \ -s "users;/srv;no;no;no;example1,example2" \ -s "example1 private share;/example1;no;no;no;example1" \ -s "example2 private share;/example2;no;no;no;example2"
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。