2023 iT邦鐵人賽 Day 11 - 容器的環境變數

前言

在開發的過程中,我們會把很重要的資訊、secret key等,使用環境變數的方式,來對這些資訊進行保護,以免遭到外洩。

在 Docker 中也是一樣的,我們在使用容器時,也不希望映像檔裡暴露著各種重要資料,所以我們會由外部來提供這些資料,也就是在建立容器時,設置好相對應的環境變數。

環境變數

這裡就假設讀者都是有一定基礎的開發者,所以就不解釋環境變數是什麼了。

當我們想要啟動具有環境變數設定的容器時,我們必須要在建立該容器時,就設定好要帶入的環境變數。

設定環境變數的指令參數為 -e

1
docker run --name postgres_with_e -e POSTGRES_PASSWORD=mysecretpassword -d postgres

這是一個 postgresSQL 的容器, POSTGRES_PASSWORD 為內部的環境變數, mysecretpassword 為該環境變數的值。

如果我們不給予環境變數的話,就無法正常啟動:

1
2
3
docker run --name postgres_without_e -d postgres

docker container ls

這時應該看不到 postgres_without_e

如果我們去看他的 log:

1
docker container logs postgres_without_e

就會發現有錯誤訊息。

上述的說明主要是針對啟動時,必填環境變數的例子。

有時,我們使用 -e 在設定建立容器時的環境變數時,仍有以下原因:

  1. 功能開關: 像剛剛在 log 裡出現的訊息中有提到
1
You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all connections without a password.
  1. 切換模式:最簡單的例子就是切換 productiondevelopmenttest
1
-e RAILS_ENV=production

總結

花了不少天在介紹容器的相關指令,明天我們將會講解,如何把容器刪掉,容器刪掉又要注意些什麼?容器內的資料又何去何從?