docker env是什么,讓我們一起了解一下?
Linux系統里的env命令可以顯示當前用戶的環境變量,還可以用來在指定環境變量下執行其他命令。
Dockerfile中的ENV指令用以定義鏡像的環境變量。示例如下:
RUN?set?-ex?&&?apt-get?update?&&?apt-get?install?-y?iputils-ping ENV?PATH?/usr/local/bin:$PATH ENV?LANG?C.UTF-8 ENV?TERM?xterm ENV?PYTHON_VERSION?3.5.3 ENV?name1=ping?name2=on_ip CMD?$name1?$name2
說明:定義環境變量的同時,可以引用已經定義的環境變量。
在ENV指令中,可以直接引用如下環境變量:
HOME,用戶主目錄
HOSTNAME,默認容器的主機名
PATH,
TERM,默認xterm
ARG 和 ENV 可用性是什么?
在使用Docker時,我們區分了兩種不同類型的變量–ARG和ENV。
ARG也被稱為構建時變量。它們只在Docker文件中用ARG指令 "宣布 "的那一刻起可用,直到鏡像被構建。運行中的容器不能訪問ARG變量的值。這也適用于CMD和ENTRYPOINT指令,它們只是告訴容器在默認情況下應該運行什么。如果你告訴Dockerfile期待各種ARG變量(沒有默認值),但在運行構建指令時卻沒有提供任何ARG變量,就會出現錯誤信息。
然而,ARG值可以在鏡像建立后,通過查看鏡像的docker歷史,很容易被檢查出來。因此,他們是敏感數據的一個糟糕選擇。
ENV變量在構建過程中也是可用的,只要你用ENV指令引入它們。然而,與ARG不同的是,它們也可以被從最終鏡像中啟動的容器所訪問。
常見的誤解有什么?
1、.env 文件僅在使用docker-compose.yml 文件時的預處理步驟中使用。美元符號變量(如 $HI)被替換為同一目錄中名為“.env”的文件中包含的值。
2、ARG僅在構建 Docker 映像(RUN 等)期間可用,而不是在創建映像并從其啟動容器之后(ENTRYPOINT、CMD)。您可以使用 ARG 值來設置 ENV 值來解決這個問題。
3、ENV值可用于容器,但在 Docker 構建期間也可使用 RUN 樣式的命令,從引入它們的行開始。
4、如果您使用 bash (RUN export VARI=5 && …) 在中間容器中設置環境變量,它將不會在下一個命令中持續存在。有辦法解決這個問題。
5、env_file是一種將許多環境變量一次性傳遞給單個命令的便捷方式。這不應與.env文件混淆。
6、設置 ARG 和 ENV 值會在 Docker 映像中留下痕跡。不要將它們用于不打算保留的秘密
以上就是小編的分享,希望可以幫助到大家。?