docker是目前使用很廣泛的容器技術,它不同於虛擬機器,docker使用了linux核心提供的命名空間和cgroups等技術,利用沙箱機制,將不同容器的執行環境進行了隔離,保證了軟體系統在部署上的封裝和安全。
docker在提供部署安全性的同時,也在改變著我們開發的方式。在以前的系統中,為了方便對系統的配置進行修改,我們常常將系統可配置的引數放置在配置檔案或者資料庫中。但是,有些配置,比如資料庫的主機,使用者名稱及密碼等資訊,由於每個開發者開發環境搭建不同,可能需要每次檢出**後對配置檔案進行必要的設定。即便開發團隊統一了開發使用的環境,如果我們需要將**交給其他公司使用或者進行開源時,還是需要隱藏自己**中的一些配置資訊,避免一些不安全的事件發生。
使用docker之後,我們可以使用docker的環境變數來處理這個問題,而結合上k8s後,我們還可以使用configmap進一步對配置進行封裝。例如mysql的docker就引出了多個環境變數,我們在建立容器的時候按照需求對環境變數進行配置,就可以對資料庫的root使用者密碼以及埠等多個資訊進行配置,真正將系統的配置延遲到部署時進行。
docker對環境變數的定義和初始化在dockerfile中進行定義,也就是說,在製作docker映象時進行定義,我編寫了乙個簡單的dockerfile,內容如下:
from alpine:latest
env my_program_name ""
env my_program_version ""
workdir /
copy main /
entrypoint [ "/main" ]
我們基於alpine的最新版本映象進行新映象的配置。定義了兩個環境變數,初始值為空,乙個是my_program_name,代表程式名稱,乙個叫my_program_version,代表程式版本。之後設定了工作目錄為根目錄,將乙個main可執行檔案複製到映象的根目錄,將映象的entrypoint設定為了main。main是用golang編寫的乙個簡單程式:
package main
import (
"fmt"
"os"
)func main()
使用go build編譯之後,將生成的main可執行檔案複製到dockerfile所在的目錄下即可。docker新增的環境變數會被寫入映象的環境變數中,所以我們的go程式只需要讀取系統的環境變數就可以取到docker執行容器時動態傳入的環境變數。接下來進入dockerfile所在目錄,執行下面命令製作映象:
docker build -t yjp/env .
我們製作了乙個名為yjp/env的映象。下面我們來試一下,執行如下命令啟動容器:
docker run --rm yjp/env
由於我們沒有傳遞環境變數,容器執行的輸出為:
name:
version:
然後我們再次執行,這次通過docker run的-e選項傳遞環境變數:
docker run --rm -e my_program_name main -e my_program_version 1.0 yjp/env
這次容器的執行結果為:
name: main
version: 1.0
這樣,就實現了通過執行容器時動態傳入環境變數並在程式中使用環境變數。使用這種方式,我們可以為不同的容器使用不同的環境變數,對我們的程式進行配置,而不必擔心暴露系統的配置資訊。
環境變數 Vue 環境變數的使用
文章背景 開發過程中經常遇到這樣的問題 相同的 部署到不同環境時需要使用不同的變數 比如介面網域名稱變數 serve 在測試環境和生產環境使用的是不同的網域名稱。這種情況下如果在 裡定義變數,打包部署前再修改 切換成不同的值再打包不利於 的維護,也很繁瑣。這時候利用環境變數來實現,在不用每次打包前改...
環境變數使用
在安裝軟體的過程中,經常用到環境變數,這裡記錄環境變數相關的一些操作 1 進入環境變數 路徑 電腦右鍵 屬性 高階系統設定 環境變數 我們主要編輯系統變數,任何使用者都可共享 使用者變數只作用於對應賬號 2 path編輯系統變數視窗不一樣 以 開頭,所有變數在同一行 不以 開頭,所有變數不在同一行 ...
docker新增新的環境變數 Docker環境變數
環境變數 環境變數通常在與您正在使用的基本映像關聯的dockerfile中設定。也有docker為每個新容器自動設定的環境變數。您可以指定其他變數,並使用 e或 env選項重新定義docker設定的變數。在docker執行配置中,您可以使用 環境變數 environment variables 欄位...