docker已經用了兩年多了,從開始的簡單應用到現在的自動化部署,已經越來越感覺到它的威力,今天把Hitchhiker部署完成後,看到了它與.net core項目有個類似的地方,就是對於多環境部署的時候都用到了環境變數,Hitchhiker的docker-compose.yml里有對環境地址的設置( ...
docker已經用了兩年多了,從開始的簡單應用到現在的自動化部署,已經越來越感覺到它的威力,今天把Hitchhiker部署完成後,看到了它與.net core項目有個類似的地方,就是對於多環境部署的時候都用到了環境變數,Hitchhiker的docker-compose.yml里有對環境地址的設置(當前這個開源項目還有一些BUG,需要掛載一下/utils/index.js,去修改一下自己的埠,這個項目把它在了appconfig.json里了,預設8080,大叔認識不如直接寫到環境變數里,根據具體變數去實現埠的監聽不是更好嗎);在.net core里同樣也是通過環境變數的設置來實現各個配置文件的載入的,這點兩者是同時的,這也是一個趨勢!
docker-compose.yml里的環境變數
services: hitchhiker: image: lind/ddd container_name: lind/ddd:v1.0 environment: - DB_HOST=lind-mysql - APP_HOST=http://127.0.0.1 - APP_Port=8080
上面代碼里,聲明瞭三個環境變數,用戶在部署時,根據具體環境去填寫信息,如本地測試用的是127.0.0.1和8080,資料庫伺服器名是lind-mysql,而在stage和prod環境可能有其它的配置,根據具體的情況去配置它,這就是部署文件yml里的環境變數!
程式中使用環境變數
這些環境變數在部署時設計後,程式的運行時里,會有具體的體現,你設置什麼,它就獲取什麼,在不同的語言里,使用環境變數的方法也是不同的,看下麵的例子:
1 sh腳本使用它
echo $DB_HOST
2 .netcore里比較特殊
只配置環境變數名稱,然後每個環境變數對應一種配置文件,代碼里只訪問配置文件即可(根據系統當前的環境變數去訪問對應的文件)
environment:
- ASPNETCORE_ENVIRONMENT=Development
public Startup(IConfiguration configuration, IHostingEnvironment env) { ConfigFileHelper.Set(env: env); Configuration = configuration; }
.netcore里也環境變數簡單化了,只需要設置三個預設的,當然也可以自己擴展,三個預設的分別是Development,Staging和Producting.
3 nodejs里使用它
console.log(process.env.APP_HOST)
通過講,讓我們認識到了環境變數的魅力!
多環境部署,有它才夠靈活!