Уже есть официальные изображения bash для всех версий, поэтому вы можете просто:
docker run -it bash:4.4 -c 'whatevs'
Или:
docker run -it bash:3.2 -c 'whatevs'
Если по какой-то причине выневозможно использовать официальные образы, для создания одного изображения с двумя версиями bash, вероятно, потребуется установить хотя бы одну из исходных текстов.Например, вы можете начать с ubuntu:18.04
, который имеет bash 4.4.19, а затем собрать и установить другую версию в /usr/local
.
Если вы хотите собрать и установить Bash самостоятельно, выВам понадобится:
- Функциональная среда разработки (компилятор C,
make
, autoconf
и т. д.) - Исходники bash
Это действительно отличная ситуация для использования многоступенчатой сборки , так как вам не обязательно, чтобы эта среда сборки загромождала окончательный образ.Вот один из способов решения этой проблемы:
##
## Build bash 3
##
FROM ubuntu:18.04 as bash_3
ARG bash_3_version=3.2.57
RUN apt-get update
RUN apt-get -y install build-essential curl bison
WORKDIR /tmp
RUN curl -o bash-${bash_3_version}.tar.gz \
http://ftp.gnu.org/gnu/bash/bash-${bash_3_version}.tar.gz
RUN tar xf bash-${bash_3_version}.tar.gz
WORKDIR /tmp/bash-${bash_3_version}
RUN ./configure --prefix=/opt/bash3
RUN make EXEEXT=3
RUN make install EXEEXT=3
##
## Build bash 4
##
FROM ubuntu:18.04 as bash_4
ARG bash_4_version=4.4.18
RUN apt-get update
RUN apt-get -y install build-essential curl bison
WORKDIR /tmp
RUN curl -o bash-${bash_4_version}.tar.gz \
http://ftp.gnu.org/gnu/bash/bash-${bash_4_version}.tar.gz
RUN tar xf bash-${bash_4_version}.tar.gz
WORKDIR /tmp/bash-${bash_4_version}
RUN ./configure --prefix=/opt/bash4
RUN make EXEEXT=4
RUN make install EXEEXT=4
##
## Build the final image
##
FROM ubuntu:18.04
ENV PATH=/opt/bash4/bin:/opt/bash3/bin:/bin:/usr/bin:/usr/local/bin
COPY --from=bash_3 /opt/bash3 /opt/bash3
COPY --from=bash_4 /opt/bash4 /opt/bash4
Если вы используете это для создания образа с именем basher
, вы можете ...
$ docker run -it --rm basher bash3 --version
GNU bash, version 3.2.57(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
И:
$ docker run -it --rm basher bash4 --version
GNU bash, version 4.4.18(1)-release (x86_64-unknown-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.