借鉴博客:https://www.cnblogs.com/daryl-blog/p/11369577.html
1、使用docker命令下载svn镜像
//搜索svn镜像 docker search svn //下载第一个镜像:docker.io/garethflowers/svn-server docker pull docker.io/garethflowers/svn-server
操作图如下:
2、运行svn容器,并配置宿主机映射
2.1、先在/usr/local目录下建一个dev/svn/repo目录,把docker中的svn容器仓库目录映射在宿主机上/usr/local/dev/svn/repo
目录我已经创建好了,如下:
2.2、使用docker命令映射目录,并启动svn容器
//docker运行svn命令
docker run --restart always --name svn -d -v /usr/local/dev/svn/repo:/var/opt/svn -p 3690:3690 garethflowers/svn-server
简析
- /root/dockers/svn为宿主机的文件目录,/var/opt/svn为容器内的文件目录
- --restart always命令可以实现容器在宿主机开机时自启动
- -p 3690:3690表示将宿主机的3690端口映射到容器的3690端口,此端口为svn服务的默认端口,可以根据需要自行修改
成功如下:
3、进入svn容器,创建账户和配置
//进入svn容器
docker exec -it svn /bin/sh
3.2创建名称为svn的资源仓库
svnadmin create svn
//上行代码创建了一个svn仓库目录,进去会有几个文件:README.txt conf db format hooks locks
成功如下图
修改svn目录中的文件配置,命令:vi svnserve.conf
文件配置内容如下: anon-access = none # 匿名用户不可读写,也可设置为只读 read auth-access = write # 授权用户可写 password-db = passwd # 密码文件路径,相对于当前目录 authz-db = authz # 访问控制文件 realm = /var/opt/svn/svn # 认证命名空间,会在认证提示界面显示,并作为凭证缓存的关键字,可以写仓库名称比如svn
(我这里注释中文显示不出来,应该是docker配置编码问题,我懒得配置了,就没写上中文注释)
操作图如下:
修改passwd、和authz文件,没有这两文件直接创建并修改:vi passwd 和 vi authz
passwd文件内容如下:
[users] # harry = harryssecret # sally = sallyssecret admin = 123456 authz文件内容如下:
[groups] owner = admin [/] # / 表示所有仓库 admin = rw # 用户 admin 在所有仓库拥有读写权限 [svn:/] # 表示以下用户在仓库 svn 的所有目录有相应权限 @owner = rw # 表示 owner 组下的用户拥有读写权限
操作图内容如下:
4、将容器内生成的资源库repository拷贝到宿主机的对应目录下,因为容器一旦重启,这些信息就会丢失,所以应该持久化到宿主机的文件系统中。
#借鉴命令:docker cp 容器ID:/var/opt/svn/repository/ /opt/data/svn/repo
//本人真实路径命令拷贝
docker cp 4245e47be88e:/var/opt/svn/svn/ /usr/local/dev/svn/repo
//重启svn容器 或命令:
docker restart 容器ID
或
docker restart svn
4、退出容器:exit,然后将容器内生成的资源库repository拷贝到宿主机的对应目录下,因为容器一旦重启,这些信息就会丢失,所以应该持久化到宿主机的文件系统中
docker cp 容器ID:/var/opt/svn/repository/ /opt/data/svn/repo
//再重启svn容器
docker restart svn 或 docker restart 容器ID
5、使用命令,看成功否:
svn co svn://127.0.0.1:3690/svn
。。。