通过 dockerhub 或者 命令行运行 : docker search svn 查看 svn 的镜像
如命令行:
[root@SGP ~]# docker search svn
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
garethflowers/svn-server A simple Subversion server, using `svnserve`. 67 [OK]
elleflorio/svn-server Lightweight Docker container running an SVN … 51
krisdavison/svn-server A pre-configured SVN source control server. 26
svnedge/app SVN Edge Official Release Image 14
paulovsm/svn-server Subversion + Apache + SVNAdmin 9
。。。。。。。。。。。。。。。。。
由于我并不清楚 svn 服务相关的配置和端口以及工作目录,所以我选择的是 dockerhub 的方式进行查看,然后选择自己想要的版本
因为,通过 dockerhub 可以查看 镜像 的 tag 然后可以查看 Dockerfile ,从而得知相关配置信息
dockerhub 网址: https://hub.docker.com/ 搜索 : svn-server 关键词 ,结果如下图:
我先选择的的是 第二个:elleflorio/svn-server (此镜像有可视化设置界面,个人反而不喜欢,增加使用成本,后面补充了第二种方式)
然后点击进入 详情,----->> tags ---->> 选择你要的 tag (我选的 latest) ,然后可以看到 镜像相关的配置信息,工作目录,数据卷,暴露端口 等等信息,然后可进行 编写 docker 启动文件
此 Dockerfile 中 ,第二行 CMD ["/bin/sh"] ,并不是 bash,所以 运行此容器后,进入容器的命令并不是 bash 而是 sh
docker exec -it 容器名或者容器id sh 或者(compose 部署的) docker-compose exec 容器名或者容器id sh
>>>>>>>>>>>>>>>>>> 开干 <<<<<<<<<<<<<<<<<<<<
创建 工作目录:(我个人的 /opt/docker/svn/{data,config})
mkdir /opt/docker/svn/{data,config} -p
编写 docker-compose.yml 容器编排文件: (docker-compose.yml 文件在 /opt/dockr 路径下)
version: '3.0'
services:
iserver-svn:
image: elleflorio/svn-server:latest
container_name: iserver-svn
restart: always
privileged: true
ports:
# IP映射,格式为:宿主机IP:容器IP,3690是svn端口,443 和 80 是 扩展的可视化SVN管理页面端口,
- '3690:3690' - '3680:80' - '3643:443'、
# 容器数据卷挂载宿主机,实现持久化,此 镜像文件 elleflorio/svn-server 存在功能扩展,所以配置文件挂载较多,建议使用文章末尾的那个方法的镜像
volumes:
- './svn/data/:/home/svn/'
- './svn/config/passwd:/etc/subversion/passwd'
- './svn/config/subversion-access-control:/etc/subversion/subversion-access-control'
- './svn/config/httpd.conf:/etc/apache2/httpd.conf'
networks:
- iserver-network
networks:
# 首次运行需要提前创建网络 docker network create -d bridge iserver-network , 或者改为 false external: true driver: bridge
iserver-network:
external: true
driver: bridge
启动运行:(在 /opt/docker 路径下执行,和 docker-compose.yml 文件在同一路径下)
up -d 是静默模式启动,首次启动我想看以下日志,所以 我没有加 -d ,
docker-compose up iserver-svn
以下废话部分是为不熟悉 docker 的朋友提供的,高手请忽略,查看日志的方式,静默模式下启动查看日志 Docker --- 从入门到实践 | Docker 从入门到实践:
docker-compose logs -tf --tail 300 iserver-svn
或者
docker logs -tf --tail 300 iserver-svn
-t : 代表显示时间 f (没记错的话是, flow 跟随,追随,也就是实时打印)
--tail 300 显示尾巴 300 行
iserver-svn 容器名称,docker-compose 方式启动的,如果不加容器名,则是显示 compose 中编排的所有的容器的日志信息
第一个 SVN 镜像:garethflowers/svn-server
由于镜像 elleflorio/svn-server 的对 SVN 镜像了封装,加入了可视化界面( 容器内为 80 端口 ),加入了权限相关的可视化界面处理,增加了使用成本。
以下提供了 garethflowers/svn-server 镜像的部署方式,且后续的权限,配置 均以 镜像 garethflowers/svn-server 为例
docker 普通运行: ( 此镜像 启动无启动日志输出,启动是会误以为卡主了 )
docker run --name my-svn -d -v /opt/docker/svn/data:/var/opt/svn -v /opt/docker/svn/config:/var/svn/config -p 3690:3690 garethflowers/svn-server
docker-compose 方式:( 此镜像 启动无启动日志输出,启动是会误以为卡主了 )
version: '3.0'
services:
# docker run --name my-svn -d -v /opt/docker/svn/data:/var/opt/svn -v /opt/docker/svn/config:/var/svn/config -p 3690:3690 garethflowers/svn-server
iserver-svn:
image: garethflowers/svn-server:latest
container_name: iserver-svn
restart: always
privileged: true
ports:
- '3690:3690'
volumes:
- './svn/data/:/var/opt/svn/'
- './svn/config:/var/svn/config'
networks:
- iserver-network
networks:
# 首次运行需要提前创建网络 docker network create -d bridge iserver-network , 或者改为 false external: true driver: bridge
iserver-network:
external: true
driver: bridge
SVN 服务权限相关配置
SVN 权限核心配置文件就是四个:
1、密码配置文件: passwd
2、权限分配配置文件 authz (可以包含分组信息管理)
3、分组信息管理文件: groups (可选的,若配置此文件,则 authz 文件中的 [groups] 将失效)
4、SVN 项目配置文件: svnserver.conf ,每创建一个项目,将自动生成 路径为: 你项目的路径/conf/svnserver.conf
抽取全局权限文件统一管理:
配置文件挂载到宿主机,方便修改:
1、passwd: 用户名密码 配置文件
# 用户名密码设置
[users]
# 超级管理员
admin = admin_NB
# 技术部人员信息 (张三李四)
zhangsan= zhangsn@8888
lisi = lisi@8888
# 运营部人员信息
xxx = xxx@8888
2、authz:授权文件
[aliases]
joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
###################################### 分组管理用户(可以直接到下一步 groups 文件中单独管理) #########################
[groups]
# 全体人员
All_MEMBER = admin,zhangsan,lisi
# 技术研发部
YanFaBu = zhangsan,lisi
########################################### 权限分配 r 读,w 写###############################################
# 管理员所有项目都具备读写权限
[/]
admin = rw
# 运营部的 svn 项目文件 只有运营部的人员具备读取读写权限,其他人无权限
[运营部:/]
@YunYingBu = rw
# 技术研发部的 SVN 项目文件,只有技术研发部分组用户具有读写权限
[技术部:/]
@YanFaBu = rw
# 给某某某这个用户名分配只读的权限
某某某 = r
[行政部:/]
@XinZhengBu = rw
# 随手创建一个 test ,所有用户可以 读,不可写
[test:/]
@All_MEMBER = r
# 或者可以这样配置,所有人可以访问
* =
可选的,如果以上第二步中,authz 文件中已经配置了 [groups] 则无需单独提去出来一个 groups 文件,但是如果 独立提去出 groups 文件了,则 authz 中的 [groups] 将失效
[groups]
# 全体人员
All_Member = admin,zhangsan,lisi
# 技术研发部
YanFaBu = xuganglei,zhangsan,lisi
# 运营部
YunYingBu = zhangsan,lisi
# 行政部
XinZhengBu = zhangsan
# 财务部
CaiWuBu = xxxxx,xxx,xxx,xxx,xxxx
创建项目:
具体使用如下:( 以创建一个部门:技术部为例 )
1、进入容器: iserver-svn
docker exec -it iserver-svn(你容器的名称或ID) /bin/sh
# (/bin/sh 可简化 sh) 或 在 docker-compose.yml 文件路劲
docker-compose exec iserver-svn sh
**2、创建项目:**在容器中的工作目录:/var/opt/svn/ 执行命令创建一个项目(这里我以创建部门为例,我使用的是中文,建议使用英文,使用中文感觉很愚蠢,不知道后续为不会有问题)
/var/opt/svn # pwd
/var/opt/svn
/var/opt/svn # svnadmin create 技术部(这个是你的项目名称,建议使用英文名)
**3、配置文件配置:**创建完项目之后,后续的操作可以在容器内操作,也可以直接在 宿主机上操作
创建完成的项目结构如下,
/var/opt/svn/技术部 # ls
README.txt conf db format hooks locks
配置文件就在 conf 路径下:(其实刚创建好的时候还有两个配置文件的,passwd、authz 因为我的权限文件统一管理在外层,所以被我删除了)
/var/opt/svn/技术部/conf # ls
hooks-env.tmpl svnserve.conf
svnserve.conf 主要配置的内容如下:
[general] # 配置 匿名用户 / 授权用户 读写权限,read 读权限,write 写权限,none 表示什么权限都没有 anon-access = none auth-access = write # 配置用户密码文件,便于管理,我的是抽取到了全局配置中进行管理 password-db = /var/svn/config/passwd # 用户权限配置文件 authz-db = /var/svn/config/authz # 用户分组管理文件,这个配置是可选的,可以将分组配置信息配置到 authz 文件中 groups-db = /var/svn/config/groups # 项目的路径 realm = /opt/xxx/xxx 可以是路径的形式 realm = 技术部
至此,一个项目就配置完成了
连接: svn://ip:port/项目名称 ;比如 :svn://192.168.1.188:3690/技术部