0

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

RUN python -m pip install --upgrade pip
RUN python -m pip install --upgrade setuptools
RUN pip install -r requirements.txt 

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

RUN python -m pip install --upgrade pip; python -m pip install --upgrade setuptools; pip install -r requirements.txt 

如果我使用以下内容,那么它会给我一个错误“令牌'&&'不是此版本中的有效语句分隔符。”:

RUN python -m pip install --upgrade pip && python -m pip install --upgrade setuptools && pip install -r requirements.txt
4

3 回答 3

3

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

而不是这样做

RUN python -m pip install --upgrade pip
RUN python -m pip install --upgrade setuptools
RUN pip install -r requirements.txt 

尝试这个

RUN python -m pip install --upgrade pip &&\
    python -m pip install --upgrade setuptools &&\
    pip install -r requirements.txt 

这种方法的优点

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

于 2020-01-20T06:53:39.137 回答
1

是的,可以组合 RUN 命令,它也会减少 docker 映像中的层数!

RUN python -m pip install --upgrade pip && python -m pip install --upgrade setuptools && pip install -r requirements.txt

应该做!

更新:请尝试此命令。

RUN python -m pip install --upgrade pip && python -m pip install --upgrade setuptools && pip install -r requirements.txt 
于 2020-01-20T05:54:47.107 回答
0

鼓励合并多个 RUN 语句,因为它减少了创建的层数

见:https ://github.com/mysql/mysql-docker/blob/mysql-server/5.7/Dockerfile

于 2020-01-20T06:34:25.187 回答