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 映像中留下痕迹。不要将它们用于不打算保留的秘密
以上就是小编的分享,希望可以帮助到大家。