使用docker搭建版本控制系统-SVN

简介: 快速搭建容器版本SVN

  • 作者简介:一名Linux运维工程师,主要分享自己遇到的学习过程与遇到的问题。 

    认识SVN

    image.png

    SVN的全称是Subversion,即版本控制系统。它是最流行的一个开放源代码的版本控制系统。作为一个开源的版本控制系统,Subversion管理着随时间改变的数据。这些数据放置在一个中央资料档案库(Repository)中。这个档案库很像一个普通的文件服务器,不过它会记住每一次文件的变动。这样就可以把档案恢复到旧的版本,或是浏览文件的变动历史。Subversion是一个通用的系统,可用来管理任何类型的文件,其中包括程序源码。
    SVN采用客户端/服务器体系,项目的各种版本都存储在服务器上,程序开发人员首先将从服务器上获得一份项目的最新版本,并将其复制到本机,然后在此基础上,每个开发人员可以在自己的客户端进行独立的开发工作,并且可以随时将新代码提交给服务器。当然也可以通过更新操作获取服务器上的最新代码,从而保持与其他开发者所使用版本的一致性。
    SVN的客户端有两类,一类是基于Web的WebSVN等,另一类是以Tortoise SVN为代表的客户端软件。前者需要Web服务器的支持,后者需要用户在本地安装客户端,两种都有免费的开源软件供使用。SVN存储版本数据也两种方式:BDB(一种事务安全型表类型)和FSFS(一种不需要数据库的存储系统)。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。

    优势

    1.存储

    SVN服务器既具有CVS所具有数据储存的优点,像是信息资源存储后会形成资源树结构,便于存储的同时,数据一般不会丢失,同时又拥有自己的特色。SVN是通过关系数据库及二进制的存储方式,同时解决了既往不能同时读写同一文件等问题,同时增添了自己特有的“零或一”原则。

    2.速度

    与人们初始的CVS相比,SVN在速度运行方面有很大提升。因为SVN服务器只支持少量的信息、资源传输,与其他系统相比,更支持的是离线模式,因此避免了网络拥挤现象的出现。

    3.安全性

    SVN是一种技术性更加安全的产品,实现了系统和控制两方面的结合。一方面可以将系统整体的安全功能有效地分布在分支系统中,进而保证分支系统能正常运行,从而使各分支系统能够互补,最终在系统整体性的安全性得以保障,通过均衡原则实现最终追求安全的目的。

    环境要求

    SVN与CVS一样,也是一个跨平台的软件,支持大多数常见的操作系统。例如Windows,Linux等。
    本文主要是用Linux做搭建环境。

    搭建过程

    OS:CentOS Linux release 7.9.2009 (Core)
    docker:Docker version 19.03.14, build 5eb3275
    如果不清楚如何安装docker,可查看 直达链接

    查找svn镜像

    [root@localhost ~]# docker search svn
    NAME                           DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
    garethflowers/svn-server       A simple Subversion server, using `svnserve`.   81                                      [OK]
    elleflorio/svn-server          Lightweight Docker container running an SVN …   76                                      
    krisdavison/svn-server         A pre-configured SVN source control server.     28                                      
    svnedge/app                    SVN Edge Official Release Image                 20                                      
    paulovsm/svn-server            Subversion + Apache + SVNAdmin                  10                                      
    nbrun/svn-client               Old SVN clients to work with old svn reposit…   5                                       
    ryandocker/svn2git             Docker wrapper around the svn2git tool.         4                                       
    atlassian/fisheye              Fisheye: search, monitor, and track across S…   4                                       
    jgsqware/svn-client            A Simple SVN client based on Alpine             3                                       [OK]
    polinux/svn2git                svn2git in a docekr (Alpine)                    2                                       [OK]
    aneesv/svn-client              Svn Client                                      2                                       [OK]
    yodamad/svn2git                Tool to help migration from SVN to Gitlab       2                                       
    ksaito1125/svn-resource-type   concourseのresource-typeです。 Subversionリ…         1                                       [OK]
    vertigo/svn2git                A minimalist container to use the (awesome) …   1                                       [OK]
    svnovikov/test                                                                 0                                       
    svnedge/devbuild               SVN Edge Development Build                      0                                       
    takanomasaki/svn-resource                                                      0                                       
    timimages/svn                                                                  0                                       
    svnbadrinath/hello_world                                                       0                                       
    marouen13/svn-mar              an svn image                                    0                                       
    0urob0r0s/svndaemon            Container agent for a simple, repo-based con…   0                                       
    yukinagae/svn-to-git                                                           0                                       [OK]
    crazymax/svn2git-mirror        Mirror SVN repositories to Git periodically     0                                       
    kurento/svn-client                                                             0                                       
    cycletime/svn-test             SVN Server with Test Data
    

    下载 garethflowers/svn-server

    [root@localhost ~]# docker pull docker.io/garethflowers/svn-server
    Using default tag: latest
    latest: Pulling from garethflowers/svn-server
    2408cc74d12b: Pull complete 
    f454a8fbcebf: Pull complete 
    3c76ba5eee8a: Pull complete 
    Digest: sha256:e97746b18bf7eddbfc5024221212ceb18436addc59adc711a3b13f29fe0dce2a
    Status: Downloaded newer image for garethflowers/svn-server:latest
    docker.io/garethflowers/svn-server:latest
    

    查看images

    [root@localhost ~]# docker images
    REPOSITORY                               TAG                 IMAGE ID            CREATED             SIZE
    garethflowers/svn-server                 latest              2a8481254cd2        6 months ago        14.7MB
    

    启动容器

    #先创建宿主机的数据存储目录
    [root@localhost ~]# mkdir /usr/local/data
    docker run --restart always --name svn -d -v /usr/local/dev/svn/repo:/var/opt/svn -p 3690:3690 garethflowers/svn-server
    #启动容器
    [root@localhost ~]# docker run --restart always --name svn -d -v /usr/local/data/:/var/opt/svn -p 3690:3690 garethflowers/svn-server
    8a9304411bf397bcadcbf965eace9ab3db7636480d7f83a87e3ae838e5b4e68f
    
    • --restart always:代表自启动
    • --name svn:代表容器名是svn
    • -d:后台启动
    • -v /usr/local/data/:/var/opt/svn:挂载数据目录
    • -p 3690:3690:将容器内部3690映射到宿主机3690

      查看容器

    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE                                                  COMMAND                  CREATED             STATUS                   PORTS                                            NAMES
    8a9304411bf3        garethflowers/svn-server                               "/usr/bin/svnserve -…"   2 minutes ago       Up 2 minutes (healthy)   0.0.0.0:3690->3690/tcp                           svn
    

    进入容器内部,进行相关配置

    登录容器

    [root@localhost ~]# docker exec -it svn sh
    

    创建名为test的svn资源仓库

    /var/opt/svn # svnadmin create test
    

    查看目录结构

    /var/opt/svn/test # ls /var/opt/svn/test/
    README.txt  conf        db          format      hooks       locks
    

    配置修改

    进入刚刚创建的test资源仓库

    /var/opt/svn #  cd /var/opt/svn/test/conf
    /var/opt/svn/test/conf #
    

    基础配置修改

    /var/opt/svn/test/conf # vi svnserve.conf
    /var/opt/svn/test/conf # cat svnserve.conf |grep -rn -v ^#
    
    19:anon-access = none
    20:auth-access = write
    27:password-db = passwd
    36:authz-db = authz
    52:realm = test
    
    #配置详解
    anon-access = none             # 匿名用户不可读写,也可设置为只读 read
    auth-access = write            # 授权用户可写
    password-db = passwd           # 密码文件路径,相对于当前目录
    authz-db = authz               # 访问控制文件
    realm = /var/opt/svn/test       # 认证命名空间,会在认证提示界面显示,并作为凭证缓存的关键字,可以写仓库名称比如test
    

    权限文件修改

    密码文件修改

    /var/opt/svn/test/conf # vi passwd
    [users]
    # harry = harryssecret
    # sally = sallyssecret
    admin = test123456
    

    鉴权文件修改

    /var/opt/svn/test/conf # vi authz
    [groups]
    admin = admin   #前面是用户组admin,=后面的为用户admin
    
    [test:/]
    @admin = rw  #表示对test根目录有读写权限
    
    [test:/test1]
    @admin = rw  #表示对test目录下的test1有读写权限
    

    重启容器

    /var/opt/svn/test # exit
    [root@localhost ~]# docker restart svn
    svn
    

    安装客户端测试

    Windows验证

    tortoisesvn官网:https://tortoisesvn.net/downloads.html
    image.png

    image.png
    image.png

    自定义文件路径
    image.png
    image.png
    image.png

    输入设置的账号密码
    image.png

    image.png

    Liunx验证

    安装svn工具

    [root@localhost ~]# yum -y install svn
    

    查看资源仓库

    [root@localhost ~]# svn checkout svn://192.168.6.231:3690/test/test1
    Authentication realm: <svn://192.168.6.231:3690> test
    Password for 'root': 
    Authentication realm: <svn://192.168.6.231:3690> test
    Username: admin
    Password for 'admin': 
    
    -----------------------------------------------------------------------
    ATTENTION!  Your password for authentication realm:
    
       <svn://192.168.6.231:3690> test
    
    can only be stored to disk unencrypted!  You are advised to configure
    your system so that Subversion can store passwords encrypted, if
    possible.  See the documentation for details.
    
    You can avoid future appearances of this warning by setting the value
    of the 'store-plaintext-passwords' option to either 'yes' or 'no' in
    '/root/.subversion/servers'.
    -----------------------------------------------------------------------
    Store password unencrypted (yes/no)? yes
    Checked out revision 1.
    

    码字不易。如果文章对您有希望的话,请三连支持一波。
    如有问题,欢迎留言,一起探讨,感谢。
    也可关注早九晚十二微信公众号,看到留言后会第一时间回复。

相关文章
|
12天前
|
存储 Linux Docker
centos系统清理docker日志文件
通过以上方法,可以有效清理和管理CentOS系统中的Docker日志文件,防止日志文件占用过多磁盘空间。选择合适的方法取决于具体的应用场景和需求,可以结合手动清理、logrotate和调整日志驱动等多种方式,确保系统的高效运行。
13 2
|
1月前
|
人工智能 数据安全/隐私保护 虚拟化
Docker部署MaxKB详细步骤(window系统)
这篇文章详细介绍了如何在Windows系统上使用Docker部署MaxKB,并提供了从安装Docker到运行MaxKB容器的详细步骤,以及如何通过浏览器访问和配置MaxKB来使用ollama和llama3模型进行问答。
399 1
Docker部署MaxKB详细步骤(window系统)
|
1月前
|
Ubuntu jenkins 持续交付
Ubuntu系统 用docker安装jenkins
Ubuntu系统 用docker安装jenkins
|
3月前
|
缓存 Kubernetes 数据中心
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
在Docker中,如何控制容器占用系统资源(CPU,内存)的份额?
|
4月前
|
存储 关系型数据库 数据安全/隐私保护
【Docker实战项目】使用Docker部署Plik 临时文件上传系统
【7月更文挑战第23天】使用Docker部署Plik 临时文件上传系统
55 1
【Docker实战项目】使用Docker部署Plik 临时文件上传系统
|
3月前
|
关系型数据库 MySQL Linux
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
这篇文章提供了在Linux系统中使用Docker安装Mysql 5.7版本的详细过程和图解,包括安装指定版本、创建实例、启动、使用Navicat连接测试、文件挂载与端口映射、进入容器、配置文件修改以及重新启动容器等步骤。
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
|
3月前
|
数据可视化 应用服务中间件 nginx
使用Docker搭建网站流量可视化统计系统
使用Docker搭建网站流量可视化统计系统
|
3月前
|
Java BI 测试技术
【Docker项目实战】使用Docker部署SurveyKing调查问卷系统和考试系统
【8月更文挑战第5天】使用Docker部署SurveyKing调查问卷系统和考试系统
137 1
|
3月前
|
安全 Ubuntu Shell
深入挖掘Debian系统中安装Docker
【8月更文挑战第21天】在Debian系统中安装Docker需按步骤操作:首先确保软件包更新,执行`sudo apt update`并安装必要软件包支持HTTPS;接着添加Docker官方GPG密钥以验证包的完整性和安全性;然后设置Docker稳定版仓库,通过`tee`命令配置仓库文件;再更新软件包索引;最后安装Docker Engine并通过运行测试容器确认安装成功。此指南适用于多数Debian版本,如遇问题请查阅官方文档。
245 0
|
3月前
|
NoSQL 数据可视化 Linux
一文教会你如何在Linux系统中使用Docker安装Redis 、以及如何使用可视化工具连接【详细过程+图解】
这篇文章详细介绍了如何在Linux系统中使用Docker安装Redis,并提供了使用可视化工具连接Redis的步骤。内容包括安装Redis镜像、创建外部配置文件、映射文件和端口、启动和测试Redis实例、配置数据持久化存储,以及使用可视化工具连接和操作Redis数据库的过程。