docker已經用了兩年多了,從開始的簡單應用到如今的自動化部署,已經愈來愈感受到它的威力,今天把Hitchhiker部署完成後,看到了它與.net core項目有個相似的地方,就是對於多環境部署的時候都用到了環境變量,Hitchhiker的docker-compose.yml裏有對環境地址的設置(當前這個開源項目還有一些BUG,須要掛載一下/utils/index.js,去修改一下本身的端口,這個項目把它在了appconfig.json裏了,默認8080,大叔認識不如直接寫到環境變量裏,根據具體變量去實現端口的監聽不是更好嗎);在.net core裏一樣也是經過環境變量的設置來實現各個配置文件的加載的,這點二者是同時的,這也是一個趨勢!node
docker-compose.yml裏的環境變量mysql
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裏的環境變量!sql
程序中使用環境變量docker
這些環境變量在部署時設計後,程序的運行時裏,會有具體的體現,你設置什麼,它就獲取什麼,在不一樣的語言裏,使用環境變量的方法也是不一樣的,看下面的例子:數據庫
1 sh腳本使用它json
echo $DB_HOST
2 .netcore裏比較特殊服務器
只配置環境變量名稱,而後每一個環境變量對應一種配置文件,代碼裏只訪問配置文件便可(根據系統當前的環境變量去訪問對應的文件)app
environment:
- ASPNETCORE_ENVIRONMENT=Development
public Startup(IConfiguration configuration, IHostingEnvironment env) { ConfigFileHelper.Set(env: env); Configuration = configuration; }
.netcore裏也環境變量簡單化了,只須要設置三個默認的,固然也能夠本身擴展,三個默認的分別是Development,Staging和Producting.測試
3 nodejs裏使用它spa
console.log(process.env.APP_HOST)
經過講,讓咱們認識到了環境變量的魅力!
多環境部署,有它纔夠靈活!