使用 environment 控制環境變數
在說明 Port forwarding 時,有個範例是同個 image 開啟多個 container。實務上通常是更複雜的情境,比方說同個 image 開多個 container 且要使用不同的 DB 連線設定,當然這可以透過 volume 解決,但如果今天要管理上百個 container 與上百份設定,volume 的做法反而很難管理。
這時有另一個選擇是使用 --environment|-e
選項。
-e
用法很簡單,直接給 key=value
即可,它會設定到環境變數裡:
# 查看原本的 env |
不同的程式語言則會有不同的方法取得環境變數,以下使用 PHP 與 node.js 為例
# PHP |
如何應用 environment?
直接使用 DockerHub 上的 image 作為範例,會比較有感覺。這裡用 Percona 做範例,文件裡面有提到很多 environment 可以搭配設定。
首先先示範 MYSQL_ROOT_PASSWORD
,它會在 Percona 啟動的時候設定 root 帳號的密碼:
# Terminal 1 |
MYSQL_DATABASE
則是啟動後建立對應名稱的資料庫,注意 client 最後執行 show databases;
後的結果:
# Terminal 1 |
MYSQL_USER
和 MYSQL_PASSWORD
可以設定 root 以外的新帳號和密碼,同時給予 MYSQL_DATABASE
所有存取權限。
這裡注意 client 指令的帳號密碼跟剛不大一樣了。
# Terminal 1 |
最後的範例是,搭配連結 container 所學,使用 phpMyAdmin 連結 Percona:
# Terminal 1,使用 MYSQL_ROOT_PASSWORD 與 MYSQL_DATABASE |
指令說明
docker run
選項補充
-e|--env
設定該 container 的環境變數
今日自我回顧
今天的環境變數使用方法很單純,但應用可以千變萬化。上面四個範例都使用了 Percona image,搭配 Docker 的隔離特性與環境變數功能,可以同時提供四種不同設定的 container。
- 使用
-e
設定 container 的環境變數 - 參考 image 說明,搭配
-e
選項,改變 container 的行為