В файле Docker, можем ли мы иметь несколько команд RUN в одной команде RUN? - PullRequest
0 голосов
/ 20 января 2020

Я понимаю, что каждая команда RUN создает слой. Предположим, у меня есть следующие команды RUN:

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

I wi sh для запуска всей команды в одной команде запуска. Можно ли использовать нижеследующее «ОК»?

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

Ответы [ 3 ]

2 голосов
/ 20 января 2020

Да, вы можете, и это хорошая практика

Вместо этого

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. Количество инструкций и слоев должно быть сведено к минимуму, поскольку это в конечном итоге влияет на производительность и время сборки

1 голос
/ 20 января 2020

Да, можно комбинировать команды 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 
0 голосов
/ 20 января 2020

Рекомендуется комбинировать несколько операторов RUN, поскольку это уменьшает количество созданных слоев

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

...