通過 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: behelpful-svn: image: elleflorio/svn-server:latest container_name: behelpful-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: - behelpful-network networks: behelpful-network: # 首次運行需要提前創建網絡 docker network create -d bridge behelpful-network , 或者改為 false external: true driver: bridge
啟動運行:(在 /opt/docker 路徑下執行,和 docker-compose.yml 文件在同一路徑下)
up -d 是靜默模式啟動,首次啟動我想看以下日志,所以 我沒有加 -d ,
docker-compose up behelpful-svn
以下廢話部分是為不熟悉 docker 的朋友提供的,高手請忽略,查看日志的方式,靜默模式下啟動查看日志 https://vuepress.mirror.docker-practice.com/:
docker-compose logs -tf --tail 300 behelpful-svn
或者
docker logs -tf --tail 300 behelpful-svn
-t : 代表顯示時間 f (沒記錯的話是, flow 跟隨,追隨,也就是實時打印)
--tail 300 顯示尾巴 300 行
behelpful-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 behelpful-svn: image: garethflowers/svn-server:latest container_name: behelpful-svn restart: always privileged: true ports: - '3690:3690' volumes: - './svn/data/:/var/opt/svn/' - './svn/config:/var/svn/config' networks: - behelpful-network networks: behelpful-network: # docker network create -d bridge behelpful-network external: false 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 # 或者可以這樣配置,所有人可以訪問 * =
3、用戶分組管理配置:
可選的,如果以上第二步中,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、進入容器: behelpful-svn
docker exec -it behelpful-svn(你容器的名稱或ID) /bin/sh (/bin/sh 可簡化 sh)
或 在 docker-compose.yml 文件路勁
docker-compose exec behelpful-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/技術部