在一个 dockerfile 中,我们可以将多个 RUN 命令合并为一个 RUN 命令吗?

var*_*ble 4 docker dockerfile docker-run

我知道每个 RUN 命令都会创建一个层。假设我有以下 RUN 命令:

RUN python -m pip install --upgrade pip
RUN python -m pip install --upgrade setuptools
RUN pip install -r requirements.txt 
Run Code Online (Sandbox Code Playgroud)

我希望在一个运行命令中运行所有命令。下面这个可以用吗?

RUN python -m pip install --upgrade pip; python -m pip install --upgrade setuptools; pip install -r requirements.txt 
Run Code Online (Sandbox Code Playgroud)

如果我使用以下内容,则会出现错误“标记‘&&’在此版本中不是有效的语句分隔符。”:

RUN python -m pip install --upgrade pip && python -m pip install --upgrade setuptools && pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

UDI*_*SHI 10

是的,你可以,这是一个很好的做法

而不是这样做

RUN python -m pip install --upgrade pip
RUN python -m pip install --upgrade setuptools
RUN pip install -r requirements.txt 
Run Code Online (Sandbox Code Playgroud)

尝试这个

RUN python -m pip install --upgrade pip &&\
    python -m pip install --upgrade setuptools &&\
    pip install -r requirements.txt 
Run Code Online (Sandbox Code Playgroud)

这种方法的优点

Dockerfile 中的每条指令都会向 docker 镜像添加一个额外的层。指令和层的数量应保持在最低限度,因为它最终会影响构建性能和时间