使用 Docker 搭建屬於你自己的 Go Playground
本篇文章將介紹如何通過容器來部署屬於你自己的 Go Playground。
Go Playground 是 Golang 團隊推出的在線語言工具,不論是對於初學者而言,還是對 Golang 開發者來説,它都不失為一個簡單好用的神器。
但由於種種原因,國內部分用户使用這個功能可能會遇到一些網絡問題,而無法使用這個服務;以及出於運行代碼包含一些“隱私”,而無奈放棄這個服務。
寫在前面
這個週末花了一些時間,對 Golang 官方 Go Playground 項目 進行了一些調整,讓項目能夠輕鬆的在 GCE 環境之外的普通 Docker 容器環境中運行起來,讓我們能夠在本地快速驗證各種 Golang 代碼片段。
調整後的項目有哪些特點呢:
faketime go.dev
完整的項目代碼,我已經上傳到了 GitHub,如果你需要的話, 可以自取 。
準備工作
想要使用這個項目非常簡單,準備工作只有三步:準備 Docker 環境、下載容器鏡像、準備容器編排文件。
準備 Docker 環境
我們需要先完成 Docker 運行環境的安裝,如果你的本地環境中已經安裝了 Docker,那麼可以跳過這個小節,閲讀後面的內容。
如果你是桌面運行環境,可以訪問官網 下載安裝文件 ,如果你使用的是服務端環境,可以參考這篇文章中的“更簡單的 Docker 安裝”,來完成 Docker 環境的準備。
獲取必要的容器鏡像
在 Docker 環境就緒之後,我們需要執行下面的命令,來獲取必要的容器鏡像:
docker pull soulteary/golang-playground:web-1.18.4 docker pull soulteary/golang-playground:sandbox-1.18.4 docker pull soulteary/golang-playground:actuator-1.18.4 docker pull memcached:1.6.15-alpine
準備容器編排文件
在鏡像文件就緒之後,我們需要先編寫一個容器編排文件,來定義各種容器服務該如何運行:
version: '3' services: sandbox: image: soulteary/golang-playground:sandbox-1.18.4 restart: always command: -mode=server -listen=0.0.0.0:80 -workers=1 -untrusted-container=soulteary/golang-playground:actuator-1.18.4 volumes: - /var/run/docker.sock:/var/run/docker.sock:ro networks: - playground depends_on: - memcached web: image: soulteary/golang-playground:web-1.18.4 restart: always environment: - SANDBOX_BACKEND_URL=http://sandbox:/run - MEMCACHED_ADDR=memcached:11211 ports: - 8080:8080 depends_on: - sandbox networks: - playground memcached: image: memcached:1.6.15-alpine command: memcached -m 64 networks: - playground networks: playground:
將上面的文件保存為 docker-compose.yml
之後,我們使用 docker-compose up -d
或 docker compose up -d
(新版本 Docker) 命令來啟動程序。
使用程序
在啟動程序之後,我們打開瀏覽器,訪問 http://localhost:8080
,就可以開始快捷的 Golang 之旅啦。
你可以在“代碼文本框”中自行輸入代碼,然後點擊“運行”,來讓代碼在容器中完成自動編譯、構建、鏈接、運行等一系列操作。
也可以使用頂部菜單欄的“內置示例”下拉框,來選擇某一個例子,學習如何使用 Golang 或者這個工具,比如:啟動並驗證 HTTP 服務器的返回、在一個編輯器中同時使用多個 Go 程序文件、如何編寫單元測試、如何使用併發來進行科學計算等等…
其他
如果你想了解 Go Playground 這個項目背後的“黑魔法”,可以閲讀 這篇官方博客 ,裏面詳細的介紹了項目的由來、如何模擬時鐘、避免死鎖、模擬文件系統、模擬網絡調用等。
**這些實現,是官方應用和目前開源社區裏的其他三方實現的主要差別。**換言之,如果不進行這些“tricks”,Playground 的計算結果的穩定性和結果的一致性其實存在比較大的挑戰。
當然,為了避免 DDoS 攻擊,官方還在實現中添加了 MemCached 組件,來緩存計算過程和結果。(支持 Sleep 這類異步輸出的日誌結果)
最後
關於 Go Playground 如何使用 Docker 進行本地化部署就聊到這裏。
我們下一篇文章再見。
–EOF
- 使用 Docker 搭建屬於你自己的 Go Playground
- 使用 Golang 正確處理五大互聯網註冊機構的 IP 數據
- 走進向量計算:從源碼編譯 OpenBLAS
- 正確處理全球五大互聯網註冊機構的 IP 數據
- 用讓新海誠本人驚訝的 AI 模型製作屬於你的動漫視頻
- 使用 Docker 來運行 HuggingFace 海量模型
- 聊聊代碼倉庫可視化:gource 篇
- 羣暉 DSM 7.1 折騰筆記:卸載內置程序
- Apple 老設備(系統)精簡記錄
- 搶先體驗 Ubuntu 22.04 Jammy Jellyfish
- 使用 Docker 搭建適用於 HomeLab 的輕量郵件網關
- 從零開始搭建個人書籤導航應用:Flare
- 使用 Docker 搭建適用於 HomeLab 的書籤導航
- 使用 Mastodon 搭建個人信息平台:調優篇
- 使用 Mastodon 搭建個人信息平台:前篇
- Flare 製作記錄:應用前後端性能優化
- 深入淺出 Golang 資源嵌入方案:前篇
- 裝在筆記本里的私有云環境:持續集成(上)
- 2021 歲末總結
- 定製你的技術雷達:後篇