![]()
2016年SchemaSpy最后一次重大更新時,Docker還沒成為開發標配。8年后這個組合意外翻紅——用容器跑數據庫文檔生成,成了DBA(數據庫管理員)和架構師的新偷懶姿勢。
一個.jar文件+三行命令,把Oracle、PostgreSQL、MySQL的表結構變成可交互的網頁。不用裝Java環境,不用配環境變量,甚至不用懂SchemaSpy的Java源碼。這大概是"基礎設施即代碼"理念最無聊的落地場景,但省下的時間夠你多喝兩杯咖啡。
Step 1:準備文件夾結構
打開終端,先造個窩:
mkdir schemaspy-doc && cd schemaspy-doc
mkdir drivers output
drivers放數據庫驅動,output是生成的HTML文檔出口。這種"輸入-處理-輸出"的目錄設計,像極了流水線車間的工位布局——SchemaSpy的作者顯然有工業時代的審美潔癖。
Step 2:塞進驅動和配置
以Oracle為例,去官網扒下ojdbc11.jar扔進drivers/。然后寫schemaspy.properties,這是整個流程唯一需要動腦子的地方:
schemaspy.t=orathin-service
schemaspy.driver=oracle.jdbc.OracleDriver
schemaspy.host=server_or_ip
schemaspy.port=1521
schemaspy.db=db_name
schemaspy.u=database_user
schemaspy.p=database_password
schemaspy.schema=schema_name
schemaspy.norows=true
schemaspy.noviews=true
schemaspy.cat=%
schemaspy.t這個參數最坑人。它控制數據庫類型,寫錯直接報錯。不確定該填什么?跑這行命令查說明書:
docker run --rm schemaspy/schemaspy -dbHelp
輸出會列出所有支持的數據庫類型:PostgreSQL用pgsql,MySQL用mysql,SQL Server用mssql……像一本翻譯對照詞典,專治各種拼寫焦慮。
Step 3:Docker一鍵跑
Linux/macOS用戶復制粘貼:
![]()
docker run --rm \
-v "$(pwd)/schemaspy.properties:/schemaspy.properties" \
-v "$(pwd)/output:/output" \
-v "$(pwd)/drivers:/drivers" \
schemaspy/schemaspy
Windows用戶注意反斜杠變反引號:
docker run --rm `
-v "${PWD}/schemaspy.properties:/schemaspy.properties" `
-v "${PWD}/output:/output" `
-v "${PWD}/drivers:/drivers" `
schemaspy/schemaspy
三個-v掛載點分別對應:配置文件、輸出目錄、驅動目錄。--rm參數讓容器跑完即焚,不留下尸體。這種"用完即走"的設計,比傳統Java應用的安裝-配置-卸載流程清爽十倍。
本地數據庫有個陷阱。如果你在schemaspy.properties里寫localhost,容器會指向自己而非宿主機。解法是把host改成host.docker.internal——這是Docker Desktop提供的魔法DNS,專門解決"容器找媽媽"的問題。
Step 4:驗收成果
命令跑完,打開output/index.html。你會看到:
表結構關系圖(ER圖)、字段類型與注釋、主外鍵關聯線、索引清單。所有信息支持點擊跳轉,比數據庫客戶端的Schema瀏覽器直觀得多。
SchemaSpy的界面設計停留在Bootstrap 3時代,但功能沒過期。對于需要向非技術同事解釋數據庫結構的場景——比如產品經理問"這個字段干嘛用的"——直接甩個鏈接過去,比截圖+箭頭高效。
為什么現在才火?
SchemaSpy 2004年發布,比GitHub還老。早年部署需要Java環境、配置CLASSPATH、處理驅動版本沖突,勸退九成用戶。Docker把這堆臟活包進鏡像,暴露的只有三個掛載點和一行命令。
這種"老工具+新包裝"的組合近年頻繁出現:FFmpeg用Docker封裝成視頻處理服務,Pandoc變成文檔轉換API,甚至LaTeX都有人做成容器化編譯流水線。核心邏輯一致——把20年的技術債,轉化為5分鐘的上手體驗。
Oracle官方有SQL Developer Data Modeler,功能更強但啟動慢、授權復雜。PostgreSQL的pgAdmin自帶ER圖,但樣式丑且不支持批量導出。SchemaSpy的競爭力不在功能深度,而在"無侵入":不碰數據庫權限,只讀元數據,生成靜態HTML可隨處托管。
GitHub上schemaspy/schemaspy鏡像的拉取量過去一年漲了340%,Issue區最常見的問題是"怎么連云數據庫"。AWS RDS、Azure SQL、阿里云RDS的文檔生成需求,正在把這個老工具拖進云原生時代。
有個細節值得玩味:SchemaSpy的配置文件至今用.properties格式,而非YAML或JSON。這種"復古"選擇反而降低了學習成本——任何經歷過Java Web開發的人都看得懂,不需要查Docker Compose的縮進規則。
生成文檔后,有人把output目錄丟進Nginx做內部知識庫,有人用GitHub Pages托管公開項目的Schema,還有人集成進CI流水線,每次數據庫變更自動更新文檔。靜態HTML的兼容性,給了這些玩法空間。
工具鏈的演進常有這樣的悖論:越底層的工具生命周期越長,但使用門檻越高;越上層的工具體驗越好,但淘汰速度越快。Docker扮演的角色,是把底層工具的壽命延長到上層工具的周期里——SchemaSpy活了20年,大概還能再活20年。
你上次手動整理數據庫文檔是什么時候?如果超過三個月,可能該試試這個三分鐘的偷懶方案了。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.