什麼是 Docker#
Docker 就像一個中央食堂,匯集了來自世界各地開發者的預製菜。你想要運行什麼程序,就選擇相應的預製菜,就像點餐一樣簡單。
這些預製菜包含了程序運行所需的一切,包括軟體庫、工具和配置,就像一個完整的運行時環境。Docker 就像一個微波爐,只需將預製菜放進去,啟動加熱,就能輕鬆運行程序。
無論是開源軟體還是其他複雜程序,Docker 都能讓你一鍵啟動,無需擔心繁瑣的配置和環境搭建。
Docker 安裝#
Docker 有桌面客戶端,安裝相對而言比較簡單,Win 系統需要開啟 Hyper-V,下一步到完成。打開客戶端沒有報錯就表示安裝成功。
如果安裝過程遇到奇奇怪怪問題,有時需要考慮是否安裝的 win 盜版且阉割系統導致。
Docker 應用#
Docker 就像一個巨大的軟體倉庫,裡面存放著各種預製好的軟體包,就像微信小程序一樣,下載並運行就能使用。
我個人用到 Docker 有三個應用,Memos,Lobehub 和 Planka。
Lobehub 目前我使用過最好 Ai 集成工具之一,支持 Vercel 部署。本地如果安裝 Ollma,安裝一個 Docker 版 Lobe-Chat 是順其自然的事情。
Memos 輕量級筆記服務,像 Flomo 輕鬆捕捉和分享你的精彩想法,可以當做離線朋友圈使用。
有些比較散碎文字,記錄在 Memos,當可以構成一篇文章時,將碎片轉到 Obsidian 整合創作。
這款 Trello 開源版的看板工具 Planka,旨在滿足個人和團隊的項目管理需求。它具有與 Trello 類似的功能,包括看板、列表和卡片,但它是自托管的,這意味著你可以完全控制您的數據和隱私。
Docker 小技巧#
我不需要熟練使用 Docker 桌面客戶端,通常我只是打開,看看容器是否啟動,僅此而已。
大部分操作使用命令,然而在我實際工作中,使用它們不超過五條。
我嘗試使用客戶端,比如刪除,拉取等操作,能用,但不好用,容易出現各種小問題。
我個人琢磨最佳方式:幾條常用命令 + 客戶端可視化相結合。
Docker 拉取並啟動項目
以 lobehub 為例,在開發者 GitHub 項目中找到 Docker 安裝鏈接。
第一條命令,拉取鏡像👇
Docker pull lobehub/lobe-chat
打開 CMD,複製粘貼鏈接地址,敲回車。
項目安裝好之後,需要啟動,即 下載鏡像 → 啟動容器
。汽車需要啟動才會動,如果你不想推它上路的話。
第二條命令,啟動容器👇
Docker run -d -p 3210:3210 lobehub/lobe-chat
Docker 方便之處在於提升 lucky 值,對於普通人而言,Docker 已經降低了使用需要各種系統環境及各種配置的難點。
通常兩條命令即可完成一個項目拉取,啟動。
此時打開 Docker 桌面客戶端,看看容器是否正常啟動,點擊鏈接就能用啦🎉
離線使用 Memos 記錄閃念,用 LobeHut + Ollama 大模型進行文本生成和翻譯,用 Planka 整理計劃。
通過將本地端口映射到公網,並使用內網穿透技術,你可以從任何地方(家裡、手機、其他電腦)訪問你的 Docker 項目。
如果你想從辦公室以外的地方訪問你的 Docker 項目,你需要使用內網穿透,並且你的辦公室電腦必須始終開機。
我習慣在本地使用 Docker,如果需要外網訪問,則會使用 Vercel 或其他免費雲端部署方案。
Docker 項目更新和卸載
Docker 核心價值在於免費,離線,安全。但它也有一個很大的劣勢,項目更新,數據遷移等問題。
比如項目上游有更新,Docker 如何同步?當你需要換電腦時,本機存在項目數據該如何遷移到另外一台電腦?如何乾淨清爽卸載項目?
當項目上游有更新,通常會在項目應用內提示。先把容器停止移除,然後在鏡像上拉取上游更新到本地,重新部署,啟動容器。
停止移除容器,我們可以在 Docker 客戶端操作,也可以使用命令,使用命令你需要知道容器名稱。
使用客戶端停止刪除容器,簡單直觀,看圖標就曉得了。
使用命令行停止刪除容器,先看看有哪些容器,確定下容器名稱,再停止刪除。
Docker ps -a
停止並刪除容器命令,以 memos 為例。
Docker stop memos & Docker rm memos
客戶端和命令操作都可以,兩者取其一。
同樣更新項目鏡像方式可以使用桌面客戶端按鈕或者使用命令。
如使用命令就是上文中的第一條拉取命令。
如使用客戶端更新,點擊該鏡像文件的 Pull。
當下載新版本之後,舊版本鏡像可以刪除(Docker 鏡像 pull 後生成新鏡像而不是覆蓋原有鏡像)
現在我們需要重新啟動容器,記住,這個操作不要使用客戶端方式,請使用命令啟動容器,比如上文中的第二條啟動容器命令。
如此一來,項目就更新到最新版本與上游同步,通常舊的記錄都會在,建議更新前備份數據。比如 memos 有筆記導出功能。
讓項目容器隨 Docker 啟動而啟動
一切順利的話,想必你已經愉快玩耍起來了。
當你下班關機,第二天開機之後發現,有些程序無法運行。那是因為容器沒有隨著 Docker 啟動而啟動。
此時手動打開 Docker 客戶端,選擇容器,點擊啟動按鈕即可。但每次開機都要手動點火,未免太麻煩,希望容器可以隨 Docker 一起啟動。
兩條命令搞定。
首先我們需要判斷該容器是否設置為開機自啟,如果是為 “Always”,如不是為 “no”,以 memos 為例👇
Docker inspect -f "{{ .HostConfig.RestartPolicy.Name }}" memos
如果是 no,就執行下一條命令,設置隨機啟動。
Docker update --restart always memos
然後再運行上一條命令,檢查是否設置成功,“Always” 即成功設置。
Docker 命令擴展#
隨著 Docker 使用的深入,越來越多的命令和操作會讓人感到困惑。若不能將這些命令和操作有效地組織起來,就會形成碎片化的知識,導致 Docker 難以掌握和使用。
我個人處理方式,把命令分門別類保存。這不,使用 Docker 搭建的 Planka 不就派上用場了嗎。
在 Docker 搭建項目,應當是日常使用頻率較高的應用。
此外,定期清理不必要的鏡像和容器至關重要。鏡像是容器的底層基礎,而容器則是運行中的實例。過多的未使用鏡像和容器會佔用大量存儲空間,並可能減慢系統速度。
因此,避免安裝了很多不常用的項目,造成無端消耗電腦性能。