如何避免Dockerfile中的值为P @ 55w0rd的冗余?
FROM microsoft/mssql-server-linux:2017-latest as sqlbase
WORKDIR /usr/src/app
COPY ./sql-scripts /usr/src/app
ENV MSSQL_SA_PASSWORD=P@55w0rd
ENV ACCEPT_EULA=Y
RUN /opt/mssql/bin/sqlservr --accept-eula & sleep 10 \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'P@55w0rd' -i ./init.sql \
&& pkill sqlservr
一般来说,我不会直接在Dockerfile上输入任何密码,原因有两个:
在这种特殊情况下(这似乎是非生产案例)。一起使用ENV和ARG将是最好的方法:
ARG MSQL_SERVER_VERSION=2017-latest
FROM microsoft/mssql-server-linux:$MSQL_SERVER_VERSION as sqlbase
WORKDIR /usr/src/app
COPY ./sql-scripts /usr/src/app
ARG MSSQL_SA_PASSWORD=P@55w0rd
ENV MSSQL_SA_PASSWORD $MSSQL_SA_PASSWORD
ENV ACCEPT_EULA=Y
RUN /opt/mssql/bin/sqlservr --accept-eula & sleep 10 \
&& /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $MSSQL_SA_PASSWORD -i ./init.sql \
&& pkill sqlservr
将MSSQL_SA_PASSWORD
作为ARG
并将其值分配给MSSQL_SA_PASSWORD
环境变量使您的Dockerfile更加灵活。这也允许您在RUN
命令中使用它以避免冗余。
您可以了解更多关于ENV
,ARG
(及其范围)如何在Dockerfile reference中工作的信息。
您可以在Dockerfile中使用ENV
或ARG
:
对于ex,您可以使用如下所示的Dockerfile中的ARG:
FROM busybox
ARG user
USER $user
当你使用ARG
时,你必须在构建docker镜像时传递值:
docker build --build-arg user=what_user
你也可以在Dockerfile中使用如下所示的ENV:
FROM ubuntu
ENV CONT_IMG_VER hello
RUN echo $CONT_IMG_VER
您可以参考this获取更多信息。