借鑒博客: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
。。。