├── 17 ├── Dockerfile └── slim │ └── Dockerfile ├── 18 ├── Dockerfile ├── onbuild │ └── Dockerfile ├── slim │ └── Dockerfile └── x32 │ └── Dockerfile ├── 19 ├── Dockerfile ├── onbuild │ └── Dockerfile ├── slim │ └── Dockerfile └── x32 │ └── Dockerfile ├── 20 ├── Dockerfile └── slim │ └── Dockerfile ├── 21 ├── Dockerfile └── slim │ └── Dockerfile ├── 22 ├── Dockerfile └── slim │ └── Dockerfile ├── 23 ├── Dockerfile └── slim │ └── Dockerfile ├── 24 ├── Dockerfile ├── alpine │ └── Dockerfile └── slim │ └── Dockerfile ├── 25 ├── Dockerfile ├── alpine │ └── Dockerfile └── slim │ └── Dockerfile ├── 26 ├── Dockerfile ├── alpine │ └── Dockerfile └── slim │ └── Dockerfile ├── 27 ├── Dockerfile ├── alpine │ └── Dockerfile └── slim │ └── Dockerfile ├── 28 ├── Dockerfile ├── alpine │ └── Dockerfile └── slim │ └── Dockerfile ├── .github └── workflows │ └── erlang.yaml ├── LICENSE.txt ├── R15 ├── Dockerfile └── onbuild │ └── Dockerfile ├── R16 ├── Dockerfile └── onbuild │ └── Dockerfile ├── README.md ├── elixir └── Dockerfile ├── generate-stackbrew-library.sh └── master ├── Dockerfile └── alpine └── Dockerfile /.github/workflows/erlang.yaml: -------------------------------------------------------------------------------- 1 | name: erlang 2 | 3 | on: [push, pull_request, workflow_dispatch] 4 | 5 | jobs: 6 | docker: 7 | runs-on: ubuntu-latest 8 | strategy: 9 | matrix: 10 | otp: ['DIR=master', 'DIR=master VARIANT=alpine', 11 | 'DIR=28', 'DIR=28 VARIANT=slim', 'DIR=28 VARIANT=alpine', 12 | 'DIR=27', 'DIR=27 VARIANT=slim', 'DIR=27 VARIANT=alpine', 13 | 'DIR=26', 'DIR=26 VARIANT=slim', 'DIR=26 VARIANT=alpine', 14 | 'DIR=25', 'DIR=25 VARIANT=slim', 'DIR=25 VARIANT=alpine', 15 | 'DIR=24', 'DIR=24 VARIANT=slim', 'DIR=24 VARIANT=alpine'] 16 | fail-fast: false 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Build 20 | run: | 21 | ${{ matrix.otp }} 22 | git clone https://github.com/docker-library/official-images.git ~/official-images 23 | cd "$DIR" 24 | eval $(awk '/OTP_VERSION=/ { sub(/@/, "-", $2); print $2; exit }' ${VARIANT:-.}/Dockerfile) 25 | image="erlang:${OTP_VERSION}${VARIANT:+-$VARIANT}" 26 | docker build --pull -t "$image" "${VARIANT:-.}" 27 | ~/official-images/test/run.sh "$image" 28 | docker images 29 | -------------------------------------------------------------------------------- /17/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:jessie 2 | 3 | ENV OTP_VERSION="17.5.6.9" 4 | 5 | # We'll install the build dependencies for erlang-odbc along with the erlang 6 | # build process: 7 | RUN set -xe \ 8 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-$OTP_VERSION.tar.gz" \ 9 | && OTP_DOWNLOAD_SHA256="70d9d0a08969f4c51c78088f8c6b7da22a4806b1fd258a9fff1408f56553f378" \ 10 | && runtimeDeps='libodbc1' \ 11 | && buildDeps='unixodbc-dev' \ 12 | && apt-get update \ 13 | && apt-get install -y --no-install-recommends $runtimeDeps \ 14 | && apt-get install -y --no-install-recommends $buildDeps \ 15 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 16 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 17 | && mkdir -p /usr/src/otp-src \ 18 | && tar -xzf otp-src.tar.gz -C /usr/src/otp-src --strip-components=1 \ 19 | && rm otp-src.tar.gz \ 20 | && cd /usr/src/otp-src \ 21 | && ./otp_build autoconf \ 22 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 23 | && ./configure --build="$gnuArch" \ 24 | && make -j$(nproc) \ 25 | && make install \ 26 | && find /usr/local -name examples | xargs rm -rf \ 27 | && apt-get purge -y --auto-remove $buildDeps \ 28 | && rm -rf /usr/src/otp-src /var/lib/apt/lists/* 29 | 30 | CMD ["erl"] 31 | -------------------------------------------------------------------------------- /17/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:jessie 2 | 3 | ENV OTP_VERSION="17.5.6.9" 4 | 5 | # We'll install the build dependencies, and purge them on the last step to make 6 | # sure our final image contains only what we've just built: 7 | RUN set -xe \ 8 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-$OTP_VERSION.tar.gz" \ 9 | && OTP_DOWNLOAD_SHA256="70d9d0a08969f4c51c78088f8c6b7da22a4806b1fd258a9fff1408f56553f378" \ 10 | && runtimeDeps=' \ 11 | libodbc1 \ 12 | libssl1.0.0 \ 13 | ' \ 14 | && buildDeps=' \ 15 | curl \ 16 | ca-certificates \ 17 | autoconf \ 18 | dpkg-dev \ 19 | gcc \ 20 | make \ 21 | libncurses-dev \ 22 | unixodbc-dev \ 23 | libssl-dev \ 24 | ' \ 25 | && apt-get update \ 26 | && apt-get install -y --no-install-recommends $runtimeDeps \ 27 | && apt-get install -y --no-install-recommends $buildDeps \ 28 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 29 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 30 | && mkdir -p /usr/src/otp-src \ 31 | && tar -xzf otp-src.tar.gz -C /usr/src/otp-src --strip-components=1 \ 32 | && rm otp-src.tar.gz \ 33 | && cd /usr/src/otp-src \ 34 | && ./otp_build autoconf \ 35 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 36 | && ./configure --build="$gnuArch" \ 37 | && make -j$(nproc) \ 38 | && make install \ 39 | && find /usr/local -name examples | xargs rm -rf \ 40 | && apt-get purge -y --auto-remove $buildDeps \ 41 | && rm -rf /usr/src/otp-src /var/lib/apt/lists/* 42 | 43 | CMD ["erl"] 44 | -------------------------------------------------------------------------------- /18/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:stretch 2 | 3 | ENV OTP_VERSION="18.3.4.11" 4 | 5 | # We'll install the build dependencies for erlang-odbc along with the erlang 6 | # build process: 7 | RUN set -xe \ 8 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 9 | && OTP_DOWNLOAD_SHA256="94f84e8ca0db0dcadd3411fa7a05dd937142b6ae830255dc341c30b45261b01a" \ 10 | && runtimeDeps='libodbc1 \ 11 | libsctp1 \ 12 | libssl1.0-dev \ 13 | libwxgtk3.0' \ 14 | && buildDeps='unixodbc-dev \ 15 | libsctp-dev \ 16 | libwxgtk3.0-dev' \ 17 | && apt-get update \ 18 | && apt-get install -y --no-install-recommends $runtimeDeps \ 19 | && apt-get install -y --no-install-recommends $buildDeps \ 20 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 21 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 22 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 23 | && mkdir -vp $ERL_TOP \ 24 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 25 | && rm otp-src.tar.gz \ 26 | && ( cd $ERL_TOP \ 27 | && ./otp_build autoconf \ 28 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 29 | && ./configure --build="$gnuArch" \ 30 | && make -j$(nproc) \ 31 | && make install ) \ 32 | && find /usr/local -name examples | xargs rm -rf \ 33 | && apt-get purge -y --auto-remove $buildDeps \ 34 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 35 | 36 | CMD ["erl"] 37 | 38 | # extra useful tools here: rebar & rebar3 39 | 40 | ENV REBAR_VERSION="2.6.4" 41 | 42 | RUN set -xe \ 43 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 44 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 45 | && mkdir -p /usr/src/rebar-src \ 46 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 47 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 48 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 49 | && rm rebar-src.tar.gz \ 50 | && cd /usr/src/rebar-src \ 51 | && ./bootstrap \ 52 | && install -v ./rebar /usr/local/bin/ \ 53 | && rm -rf /usr/src/rebar-src 54 | 55 | ENV REBAR3_VERSION="3.7.4" 56 | 57 | RUN set -xe \ 58 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 59 | && REBAR3_DOWNLOAD_SHA256="3747ef351999caec65304839ecd9324ac8eec8c38210fb43dc598e3caed0a2c0" \ 60 | && mkdir -p /usr/src/rebar3-src \ 61 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 62 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 63 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 64 | && rm rebar3-src.tar.gz \ 65 | && cd /usr/src/rebar3-src \ 66 | && HOME=$PWD ./bootstrap \ 67 | && install -v ./rebar3 /usr/local/bin/ \ 68 | && rm -rf /usr/src/rebar3-src 69 | -------------------------------------------------------------------------------- /18/onbuild/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM erlang:18 2 | 3 | RUN mkdir -p /usr/src/app 4 | WORKDIR /usr/src/app 5 | 6 | ONBUILD COPY rebar.config /usr/src/app/ 7 | ONBUILD RUN rebar3 update 8 | ONBUILD COPY . /usr/src/app 9 | ONBUILD RUN rebar3 release 10 | 11 | CMD [ "rebar3", "shell" ] 12 | -------------------------------------------------------------------------------- /18/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:stretch 2 | 3 | ENV OTP_VERSION="18.3.4.11" 4 | 5 | # We'll install the build dependencies, and purge them on the last step to make 6 | # sure our final image contains only what we've just built: 7 | RUN set -xe \ 8 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 9 | && OTP_DOWNLOAD_SHA256="94f84e8ca0db0dcadd3411fa7a05dd937142b6ae830255dc341c30b45261b01a" \ 10 | && fetchDeps=' \ 11 | curl \ 12 | ca-certificates' \ 13 | && apt-get update \ 14 | && apt-get install -y --no-install-recommends $fetchDeps \ 15 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 16 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 17 | && runtimeDeps=' \ 18 | libodbc1 \ 19 | libssl1.0.2 \ 20 | libsctp1 \ 21 | ' \ 22 | && buildDeps=' \ 23 | autoconf \ 24 | dpkg-dev \ 25 | gcc \ 26 | g++ \ 27 | make \ 28 | libncurses-dev \ 29 | unixodbc-dev \ 30 | libssl1.0-dev \ 31 | libsctp-dev \ 32 | ' \ 33 | && apt-get install -y --no-install-recommends $runtimeDeps \ 34 | && apt-get install -y --no-install-recommends $buildDeps \ 35 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 36 | && mkdir -vp $ERL_TOP \ 37 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 38 | && rm otp-src.tar.gz \ 39 | && ( cd $ERL_TOP \ 40 | && ./otp_build autoconf \ 41 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 42 | && ./configure --build="$gnuArch" --enable-sctp \ 43 | && make -j$(nproc) \ 44 | && make install ) \ 45 | && find /usr/local -name examples | xargs rm -rf \ 46 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 47 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 48 | 49 | CMD ["erl"] 50 | -------------------------------------------------------------------------------- /18/x32/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | #FROM buildpack-deps:x32 3 | #FROM gentoo-x32 4 | FROM buildpack-deps-x32:jessie 5 | 6 | ENV OTP_VERSION="18.3" 7 | 8 | # We'll install the build dependencies for erlang-odbc along with the erlang 9 | # build process: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-$OTP_VERSION.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="8d5436faf37a1273c1b8529c4f02c28af0eccde31e52d474cb740b012d5da7e6" \ 13 | && OTP_X32_PATCH="https://github.com/erlang/otp/commit/f7987aa9b.patch" \ 14 | && buildDeps='unixodbc-dev' \ 15 | && apt-get update \ 16 | && apt-get install -y --no-install-recommends $buildDeps \ 17 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 18 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 19 | && mkdir -p /usr/src/otp-src \ 20 | && tar -xzf otp-src.tar.gz -C /usr/src/otp-src --strip-components=1 \ 21 | && rm otp-src.tar.gz \ 22 | && cd /usr/src/otp-src \ 23 | && curl -fSL $OTP_X32_PATCH | patch -p1 \ 24 | && ./otp_build autoconf \ 25 | && ./configure \ 26 | && make -j$(nproc) \ 27 | && make install \ 28 | && find /usr/local -name examples | xargs rm -rf \ 29 | && rm -rf /usr/src/otp-src /var/lib/apt/lists/* 30 | 31 | CMD ["erl"] 32 | -------------------------------------------------------------------------------- /19/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:stretch 2 | 3 | ENV OTP_VERSION="19.3.6.13" 4 | 5 | # We'll install the build dependencies for erlang-odbc along with the erlang 6 | # build process: 7 | RUN set -xe \ 8 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 9 | && OTP_DOWNLOAD_SHA256="11a914176a33068226644f4e999ecc6e965ab1c60a324d90020f164641631fae" \ 10 | && runtimeDeps='libodbc1 \ 11 | libsctp1 \ 12 | libssl1.0-dev \ 13 | libwxgtk3.0' \ 14 | && buildDeps='unixodbc-dev \ 15 | libsctp-dev \ 16 | libwxgtk3.0-dev' \ 17 | && apt-get update \ 18 | && apt-get install -y --no-install-recommends $runtimeDeps \ 19 | && apt-get install -y --no-install-recommends $buildDeps \ 20 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 21 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 22 | && mkdir -p /usr/src/otp-src \ 23 | && tar -xzf otp-src.tar.gz -C /usr/src/otp-src --strip-components=1 \ 24 | && rm otp-src.tar.gz \ 25 | && cd /usr/src/otp-src \ 26 | && ./otp_build autoconf \ 27 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 28 | && ./configure --build="$gnuArch" \ 29 | --enable-dirty-schedulers \ 30 | && make -j$(nproc) \ 31 | && make install \ 32 | && find /usr/local -name examples | xargs rm -rf \ 33 | && apt-get purge -y --auto-remove $buildDeps \ 34 | && rm -rf /usr/src/otp-src /var/lib/apt/lists/* 35 | 36 | CMD ["erl"] 37 | 38 | # extra useful tools here: rebar & rebar3 39 | 40 | ENV REBAR_VERSION="2.6.4" 41 | 42 | RUN set -xe \ 43 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 44 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 45 | && mkdir -p /usr/src/rebar-src \ 46 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 47 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 48 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 49 | && rm rebar-src.tar.gz \ 50 | && cd /usr/src/rebar-src \ 51 | && ./bootstrap \ 52 | && install -v ./rebar /usr/local/bin/ \ 53 | && rm -rf /usr/src/rebar-src 54 | 55 | ENV REBAR3_VERSION="3.15.2" 56 | 57 | RUN set -xe \ 58 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 59 | && REBAR3_DOWNLOAD_SHA256="11b6bead835421a276e287562588580b63ac1c8dcb0e3c51f674887e4ab395cd" \ 60 | && mkdir -p /usr/src/rebar3-src \ 61 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 62 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 63 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 64 | && rm rebar3-src.tar.gz \ 65 | && cd /usr/src/rebar3-src \ 66 | && HOME=$PWD ./bootstrap \ 67 | && install -v ./rebar3 /usr/local/bin/ \ 68 | && rm -rf /usr/src/rebar3-src 69 | -------------------------------------------------------------------------------- /19/onbuild/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM erlang:19 2 | 3 | RUN mkdir -p /usr/src/app 4 | WORKDIR /usr/src/app 5 | 6 | ONBUILD COPY rebar.config /usr/src/app/ 7 | ONBUILD RUN rebar3 update 8 | ONBUILD COPY . /usr/src/app 9 | ONBUILD RUN rebar3 release 10 | 11 | CMD [ "rebar3", "shell" ] 12 | -------------------------------------------------------------------------------- /19/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:stretch 2 | 3 | ENV OTP_VERSION="19.3.6.13" \ 4 | REBAR3_VERSION="3.15.2" 5 | 6 | # We'll install the build dependencies, and purge them on the last step to make 7 | # sure our final image contains only what we've just built: 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="11a914176a33068226644f4e999ecc6e965ab1c60a324d90020f164641631fae" \ 11 | && runtimeDeps=' \ 12 | libodbc1 \ 13 | libssl1.0.2 \ 14 | libsctp1 \ 15 | libwxgtk3.0 \ 16 | ' \ 17 | && buildDeps=' \ 18 | curl \ 19 | ca-certificates \ 20 | autoconf \ 21 | dpkg-dev \ 22 | gcc \ 23 | g++ \ 24 | make \ 25 | libncurses-dev \ 26 | unixodbc-dev \ 27 | libssl1.0-dev \ 28 | libsctp-dev \ 29 | ' \ 30 | && apt-get update \ 31 | && apt-get install -y --no-install-recommends $runtimeDeps \ 32 | && apt-get install -y --no-install-recommends $buildDeps \ 33 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 34 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 35 | && mkdir -p /usr/src/otp-src \ 36 | && tar -xzf otp-src.tar.gz -C /usr/src/otp-src --strip-components=1 \ 37 | && rm otp-src.tar.gz \ 38 | && cd /usr/src/otp-src \ 39 | && ./otp_build autoconf \ 40 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 41 | && ./configure --build="$gnuArch" \ 42 | --enable-dirty-schedulers \ 43 | && make -j$(nproc) \ 44 | && make install \ 45 | && find /usr/local -name examples | xargs rm -rf \ 46 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 47 | && REBAR3_DOWNLOAD_SHA256="11b6bead835421a276e287562588580b63ac1c8dcb0e3c51f674887e4ab395cd" \ 48 | && mkdir -p /usr/src/rebar3-src \ 49 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 50 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 51 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 52 | && rm rebar3-src.tar.gz \ 53 | && cd /usr/src/rebar3-src \ 54 | && HOME=$PWD ./bootstrap \ 55 | && install -v ./rebar3 /usr/local/bin/ \ 56 | && rm -rf /usr/src/rebar3-src \ 57 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 58 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 59 | 60 | CMD ["erl"] 61 | -------------------------------------------------------------------------------- /19/x32/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | #FROM buildpack-deps:x32 3 | #FROM gentoo-x32 4 | FROM buildpack-deps-x32:jessie 5 | 6 | ENV OTP_VERSION="19.0-rc0@e038cbe" 7 | 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_SHA1=48186302a5031033aad4e1b8b7a676554d4c3bbb \ 10 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/${OTP_VERSION##*@}.tar.gz" \ 11 | && curl -fSL -o otp-src.tar.gz $OTP_DOWNLOAD_URL \ 12 | && echo "$OTP_DOWNLOAD_SHA1 otp-src.tar.gz" | sha1sum -c - \ 13 | && mkdir -p /usr/src/otp-src \ 14 | && tar -xzC /usr/src/otp-src --strip-components=1 -f otp-src.tar.gz \ 15 | && rm otp-src.tar.gz \ 16 | && cd /usr/src/otp-src \ 17 | && curl -fSL https://github.com/erlang/otp/commit/f7987aa9b.patch | patch -p1 \ 18 | && ./otp_build autoconf \ 19 | && ./configure \ 20 | && make -j$(nproc) \ 21 | && make install \ 22 | && find /usr/local -name examples | xargs rm -rf \ 23 | && rm -rf /usr/src/otp-src 24 | 25 | CMD ["erl"] 26 | -------------------------------------------------------------------------------- /20/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:buster 2 | 3 | ENV OTP_VERSION="20.3.8.26" 4 | 5 | # We'll install the build dependencies for erlang-odbc along with the erlang 6 | # build process: 7 | RUN set -xe \ 8 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 9 | && OTP_DOWNLOAD_SHA256="dce78b60938a48b887317e5222cff946fd4af36666153ab2f0f022aa91755813" \ 10 | && runtimeDeps='libodbc1 \ 11 | libsctp1 \ 12 | libwxgtk3.0' \ 13 | && buildDeps='unixodbc-dev \ 14 | libsctp-dev \ 15 | libwxgtk3.0-dev' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $runtimeDeps \ 18 | && apt-get install -y --no-install-recommends $buildDeps \ 19 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 20 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 21 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 22 | && mkdir -vp $ERL_TOP \ 23 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 24 | && rm otp-src.tar.gz \ 25 | && ( cd $ERL_TOP \ 26 | && ./otp_build autoconf \ 27 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 28 | && ./configure --build="$gnuArch" \ 29 | && make -j$(nproc) \ 30 | && make install ) \ 31 | && find /usr/local -name examples | xargs rm -rf \ 32 | && apt-get purge -y --auto-remove $buildDeps \ 33 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 34 | 35 | CMD ["erl"] 36 | 37 | # extra useful tools here: rebar & rebar3 38 | 39 | ENV REBAR_VERSION="2.6.4" 40 | 41 | RUN set -xe \ 42 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 43 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 44 | && mkdir -p /usr/src/rebar-src \ 45 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 46 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 47 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 48 | && rm rebar-src.tar.gz \ 49 | && cd /usr/src/rebar-src \ 50 | && ./bootstrap \ 51 | && install -v ./rebar /usr/local/bin/ \ 52 | && rm -rf /usr/src/rebar-src 53 | 54 | ENV REBAR3_VERSION="3.15.2" 55 | 56 | RUN set -xe \ 57 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 58 | && REBAR3_DOWNLOAD_SHA256="11b6bead835421a276e287562588580b63ac1c8dcb0e3c51f674887e4ab395cd" \ 59 | && mkdir -p /usr/src/rebar3-src \ 60 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 61 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 62 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 63 | && rm rebar3-src.tar.gz \ 64 | && cd /usr/src/rebar3-src \ 65 | && HOME=$PWD ./bootstrap \ 66 | && install -v ./rebar3 /usr/local/bin/ \ 67 | && rm -rf /usr/src/rebar3-src 68 | -------------------------------------------------------------------------------- /20/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | ENV OTP_VERSION="20.3.8.26" \ 4 | REBAR3_VERSION="3.15.2" 5 | 6 | # We'll install the build dependencies, and purge them on the last step to make 7 | # sure our final image contains only what we've just built: 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="dce78b60938a48b887317e5222cff946fd4af36666153ab2f0f022aa91755813" \ 11 | && fetchDeps=' \ 12 | curl \ 13 | ca-certificates' \ 14 | && apt-get update \ 15 | && apt-get install -y --no-install-recommends $fetchDeps \ 16 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 17 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 18 | && runtimeDeps=' \ 19 | libodbc1 \ 20 | libssl1.1 \ 21 | libsctp1 \ 22 | ' \ 23 | && buildDeps=' \ 24 | autoconf \ 25 | dpkg-dev \ 26 | gcc \ 27 | g++ \ 28 | make \ 29 | libncurses-dev \ 30 | unixodbc-dev \ 31 | libssl-dev \ 32 | libsctp-dev \ 33 | ' \ 34 | && apt-get install -y --no-install-recommends $runtimeDeps \ 35 | && apt-get install -y --no-install-recommends $buildDeps \ 36 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 37 | && mkdir -vp $ERL_TOP \ 38 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 39 | && rm otp-src.tar.gz \ 40 | && ( cd $ERL_TOP \ 41 | && ./otp_build autoconf \ 42 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 43 | && ./configure --build="$gnuArch" \ 44 | && make -j$(nproc) \ 45 | && make install ) \ 46 | && find /usr/local -name examples | xargs rm -rf \ 47 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 48 | && REBAR3_DOWNLOAD_SHA256="11b6bead835421a276e287562588580b63ac1c8dcb0e3c51f674887e4ab395cd" \ 49 | && mkdir -p /usr/src/rebar3-src \ 50 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 51 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 52 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 53 | && rm rebar3-src.tar.gz \ 54 | && cd /usr/src/rebar3-src \ 55 | && HOME=$PWD ./bootstrap \ 56 | && install -v ./rebar3 /usr/local/bin/ \ 57 | && rm -rf /usr/src/rebar3-src \ 58 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 59 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 60 | 61 | CMD ["erl"] 62 | -------------------------------------------------------------------------------- /21/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:buster 2 | 3 | ENV OTP_VERSION="21.3.8.24" \ 4 | REBAR3_VERSION="3.15.2" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies for erlang-odbc along with the erlang 9 | # build process: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="90017fe0b844cf3ba7dc9faf7f6f690050f3138f3d3f7532a9343174f5f9febc" \ 13 | && runtimeDeps='libodbc1 \ 14 | libsctp1 \ 15 | libwxgtk3.0' \ 16 | && buildDeps='unixodbc-dev \ 17 | libsctp-dev \ 18 | libwxgtk3.0-dev' \ 19 | && apt-get update \ 20 | && apt-get install -y --no-install-recommends $runtimeDeps \ 21 | && apt-get install -y --no-install-recommends $buildDeps \ 22 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 23 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 24 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 25 | && mkdir -vp $ERL_TOP \ 26 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 27 | && rm otp-src.tar.gz \ 28 | && ( cd $ERL_TOP \ 29 | && ./otp_build autoconf \ 30 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 31 | && ./configure --build="$gnuArch" \ 32 | && make -j$(nproc) \ 33 | && make install ) \ 34 | && find /usr/local -name examples | xargs rm -rf \ 35 | && apt-get purge -y --auto-remove $buildDeps \ 36 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 37 | 38 | CMD ["erl"] 39 | 40 | # extra useful tools here: rebar & rebar3 41 | 42 | ENV REBAR_VERSION="2.6.4" 43 | 44 | RUN set -xe \ 45 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 46 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 47 | && mkdir -p /usr/src/rebar-src \ 48 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 49 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 50 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 51 | && rm rebar-src.tar.gz \ 52 | && cd /usr/src/rebar-src \ 53 | && ./bootstrap \ 54 | && install -v ./rebar /usr/local/bin/ \ 55 | && rm -rf /usr/src/rebar-src 56 | 57 | RUN set -xe \ 58 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 59 | && REBAR3_DOWNLOAD_SHA256="11b6bead835421a276e287562588580b63ac1c8dcb0e3c51f674887e4ab395cd" \ 60 | && mkdir -p /usr/src/rebar3-src \ 61 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 62 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 63 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 64 | && rm rebar3-src.tar.gz \ 65 | && cd /usr/src/rebar3-src \ 66 | && HOME=$PWD ./bootstrap \ 67 | && install -v ./rebar3 /usr/local/bin/ \ 68 | && rm -rf /usr/src/rebar3-src 69 | -------------------------------------------------------------------------------- /21/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | ENV OTP_VERSION="21.3.8.24" \ 4 | REBAR3_VERSION="3.15.2" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies, and purge them on the last step to make 9 | # sure our final image contains only what we've just built: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="90017fe0b844cf3ba7dc9faf7f6f690050f3138f3d3f7532a9343174f5f9febc" \ 13 | && fetchDeps=' \ 14 | curl \ 15 | ca-certificates' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $fetchDeps \ 18 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 19 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 20 | && runtimeDeps=' \ 21 | libodbc1 \ 22 | libssl1.1 \ 23 | libsctp1 \ 24 | ' \ 25 | && buildDeps=' \ 26 | autoconf \ 27 | dpkg-dev \ 28 | gcc \ 29 | g++ \ 30 | make \ 31 | libncurses-dev \ 32 | unixodbc-dev \ 33 | libssl-dev \ 34 | libsctp-dev \ 35 | ' \ 36 | && apt-get install -y --no-install-recommends $runtimeDeps \ 37 | && apt-get install -y --no-install-recommends $buildDeps \ 38 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 39 | && mkdir -vp $ERL_TOP \ 40 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 41 | && rm otp-src.tar.gz \ 42 | && ( cd $ERL_TOP \ 43 | && ./otp_build autoconf \ 44 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 45 | && ./configure --build="$gnuArch" \ 46 | && make -j$(nproc) \ 47 | && make install ) \ 48 | && find /usr/local -name examples | xargs rm -rf \ 49 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 50 | && REBAR3_DOWNLOAD_SHA256="11b6bead835421a276e287562588580b63ac1c8dcb0e3c51f674887e4ab395cd" \ 51 | && mkdir -p /usr/src/rebar3-src \ 52 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 53 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 54 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 55 | && rm rebar3-src.tar.gz \ 56 | && cd /usr/src/rebar3-src \ 57 | && HOME=$PWD ./bootstrap \ 58 | && install -v ./rebar3 /usr/local/bin/ \ 59 | && rm -rf /usr/src/rebar3-src \ 60 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 61 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 62 | 63 | CMD ["erl"] 64 | -------------------------------------------------------------------------------- /22/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:buster 2 | 3 | ENV OTP_VERSION="22.3.4.27" \ 4 | REBAR3_VERSION="3.18.0" \ 5 | REBAR_VERSION="2.6.4" 6 | 7 | LABEL org.opencontainers.image.version=$OTP_VERSION 8 | 9 | # We'll install the build dependencies for erlang-odbc along with the erlang 10 | # build process: 11 | RUN set -xe \ 12 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 13 | && OTP_DOWNLOAD_SHA256="0fb5dc388a4d6f1c7c0e250b5a44466727f35794b0566cad4190cd7c68ca5062" \ 14 | && runtimeDeps='libodbc1 \ 15 | libsctp1 \ 16 | libwxgtk3.0' \ 17 | && buildDeps='unixodbc-dev \ 18 | libsctp-dev \ 19 | libwxgtk3.0-dev' \ 20 | && apt-get update \ 21 | && apt-get install -y --no-install-recommends $runtimeDeps \ 22 | && apt-get install -y --no-install-recommends $buildDeps \ 23 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 24 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 25 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 26 | && mkdir -vp $ERL_TOP \ 27 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 28 | && rm otp-src.tar.gz \ 29 | && ( cd $ERL_TOP \ 30 | && ./otp_build autoconf \ 31 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 32 | && ./configure --build="$gnuArch" \ 33 | && make -j$(nproc) \ 34 | && make install ) \ 35 | && find /usr/local -name examples | xargs rm -rf \ 36 | && apt-get purge -y --auto-remove $buildDeps \ 37 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 38 | 39 | CMD ["erl"] 40 | 41 | # extra useful tools here: rebar & rebar3 42 | 43 | RUN set -xe \ 44 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 45 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 46 | && mkdir -p /usr/src/rebar-src \ 47 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 48 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 49 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 50 | && rm rebar-src.tar.gz \ 51 | && cd /usr/src/rebar-src \ 52 | && ./bootstrap \ 53 | && install -v ./rebar /usr/local/bin/ \ 54 | && rm -rf /usr/src/rebar-src 55 | 56 | RUN set -xe \ 57 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 58 | && REBAR3_DOWNLOAD_SHA256="cce1925d33240d81d0e4d2de2eef3616d4c17b0532ed004274f875e6607d25d2" \ 59 | && mkdir -p /usr/src/rebar3-src \ 60 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 61 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 62 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 63 | && rm rebar3-src.tar.gz \ 64 | && cd /usr/src/rebar3-src \ 65 | && HOME=$PWD ./bootstrap \ 66 | && install -v ./rebar3 /usr/local/bin/ \ 67 | && rm -rf /usr/src/rebar3-src 68 | -------------------------------------------------------------------------------- /22/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | ENV OTP_VERSION="22.3.4.27" \ 4 | REBAR3_VERSION="3.18.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies, and purge them on the last step to make 9 | # sure our final image contains only what we've just built: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="0fb5dc388a4d6f1c7c0e250b5a44466727f35794b0566cad4190cd7c68ca5062" \ 13 | && fetchDeps=' \ 14 | curl \ 15 | ca-certificates' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $fetchDeps \ 18 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 19 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 20 | && runtimeDeps=' \ 21 | libodbc1 \ 22 | libssl1.1 \ 23 | libsctp1 \ 24 | ' \ 25 | && buildDeps=' \ 26 | autoconf \ 27 | dpkg-dev \ 28 | gcc \ 29 | g++ \ 30 | make \ 31 | libncurses-dev \ 32 | unixodbc-dev \ 33 | libssl-dev \ 34 | libsctp-dev \ 35 | ' \ 36 | && apt-get install -y --no-install-recommends $runtimeDeps \ 37 | && apt-get install -y --no-install-recommends $buildDeps \ 38 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 39 | && mkdir -vp $ERL_TOP \ 40 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 41 | && rm otp-src.tar.gz \ 42 | && ( cd $ERL_TOP \ 43 | && ./otp_build autoconf \ 44 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 45 | && ./configure --build="$gnuArch" \ 46 | && make -j$(nproc) \ 47 | && make install ) \ 48 | && find /usr/local -name examples | xargs rm -rf \ 49 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 50 | && REBAR3_DOWNLOAD_SHA256="cce1925d33240d81d0e4d2de2eef3616d4c17b0532ed004274f875e6607d25d2" \ 51 | && mkdir -p /usr/src/rebar3-src \ 52 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 53 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 54 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 55 | && rm rebar3-src.tar.gz \ 56 | && cd /usr/src/rebar3-src \ 57 | && HOME=$PWD ./bootstrap \ 58 | && install -v ./rebar3 /usr/local/bin/ \ 59 | && rm -rf /usr/src/rebar3-src \ 60 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 61 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 62 | 63 | CMD ["erl"] 64 | -------------------------------------------------------------------------------- /23/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:buster 2 | 3 | ENV OTP_VERSION="23.3.4.20" \ 4 | REBAR3_VERSION="3.20.0" \ 5 | REBAR_VERSION="2.6.4" 6 | 7 | LABEL org.opencontainers.image.version=$OTP_VERSION 8 | 9 | # We'll install the build dependencies for erlang-odbc along with the erlang 10 | # build process: 11 | RUN set -xe \ 12 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 13 | && OTP_DOWNLOAD_SHA256="887859a686f3278e2a60435713ade724f97e6222cb7693a5f37c6a894ac42f8e" \ 14 | && runtimeDeps='libodbc1 \ 15 | libsctp1 \ 16 | libwxgtk3.0' \ 17 | && buildDeps='unixodbc-dev \ 18 | libsctp-dev \ 19 | libwxgtk3.0-dev' \ 20 | && apt-get update \ 21 | && apt-get install -y --no-install-recommends $runtimeDeps \ 22 | && apt-get install -y --no-install-recommends $buildDeps \ 23 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 24 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 25 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 26 | && mkdir -vp $ERL_TOP \ 27 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 28 | && rm otp-src.tar.gz \ 29 | && ( cd $ERL_TOP \ 30 | && ./otp_build autoconf \ 31 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 32 | && ./configure --build="$gnuArch" \ 33 | && make -j$(nproc) \ 34 | && make -j$(nproc) docs DOC_TARGETS=chunks \ 35 | && make install install-docs DOC_TARGETS=chunks ) \ 36 | && find /usr/local -name examples | xargs rm -rf \ 37 | && apt-get purge -y --auto-remove $buildDeps \ 38 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 39 | 40 | CMD ["erl"] 41 | 42 | # extra useful tools here: rebar & rebar3 43 | 44 | RUN set -xe \ 45 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 46 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 47 | && mkdir -p /usr/src/rebar-src \ 48 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 49 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 50 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 51 | && rm rebar-src.tar.gz \ 52 | && cd /usr/src/rebar-src \ 53 | && ./bootstrap \ 54 | && install -v ./rebar /usr/local/bin/ \ 55 | && rm -rf /usr/src/rebar-src 56 | 57 | RUN set -xe \ 58 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 59 | && REBAR3_DOWNLOAD_SHA256="53ed7f294a8b8fb4d7d75988c69194943831c104d39832a1fa30307b1a8593de" \ 60 | && mkdir -p /usr/src/rebar3-src \ 61 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 62 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 63 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 64 | && rm rebar3-src.tar.gz \ 65 | && cd /usr/src/rebar3-src \ 66 | && HOME=$PWD ./bootstrap \ 67 | && install -v ./rebar3 /usr/local/bin/ \ 68 | && rm -rf /usr/src/rebar3-src 69 | -------------------------------------------------------------------------------- /23/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:buster 2 | 3 | ENV OTP_VERSION="23.3.4.20" \ 4 | REBAR3_VERSION="3.20.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies, and purge them on the last step to make 9 | # sure our final image contains only what we've just built: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="887859a686f3278e2a60435713ade724f97e6222cb7693a5f37c6a894ac42f8e" \ 13 | && fetchDeps=' \ 14 | curl \ 15 | ca-certificates' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $fetchDeps \ 18 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 19 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 20 | && runtimeDeps=' \ 21 | libodbc1 \ 22 | libssl1.1 \ 23 | libsctp1 \ 24 | ' \ 25 | && buildDeps=' \ 26 | autoconf \ 27 | dpkg-dev \ 28 | gcc \ 29 | g++ \ 30 | make \ 31 | libncurses-dev \ 32 | unixodbc-dev \ 33 | libssl-dev \ 34 | libsctp-dev \ 35 | ' \ 36 | && apt-get install -y --no-install-recommends $runtimeDeps \ 37 | && apt-get install -y --no-install-recommends $buildDeps \ 38 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 39 | && mkdir -vp $ERL_TOP \ 40 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 41 | && rm otp-src.tar.gz \ 42 | && ( cd $ERL_TOP \ 43 | && ./otp_build autoconf \ 44 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 45 | && ./configure --build="$gnuArch" \ 46 | && make -j$(nproc) \ 47 | && make install ) \ 48 | && find /usr/local -name examples | xargs rm -rf \ 49 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 50 | && REBAR3_DOWNLOAD_SHA256="53ed7f294a8b8fb4d7d75988c69194943831c104d39832a1fa30307b1a8593de" \ 51 | && mkdir -p /usr/src/rebar3-src \ 52 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 53 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 54 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 55 | && rm rebar3-src.tar.gz \ 56 | && cd /usr/src/rebar3-src \ 57 | && HOME=$PWD ./bootstrap \ 58 | && install -v ./rebar3 /usr/local/bin/ \ 59 | && rm -rf /usr/src/rebar3-src \ 60 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 61 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 62 | 63 | CMD ["erl"] 64 | -------------------------------------------------------------------------------- /24/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:bullseye 2 | 3 | ENV OTP_VERSION="24.3.4.17" \ 4 | REBAR3_VERSION="3.23.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies for erlang-odbc along with the erlang 9 | # build process: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="35f88a3af4d4885c5c17bcb8611da2d19f0626faa277392cd39c445254c015a2" \ 13 | && runtimeDeps='libodbc1 \ 14 | libsctp1 \ 15 | libwxgtk3.0 \ 16 | libwxgtk-webview3.0-gtk3-0v5' \ 17 | && buildDeps='unixodbc-dev \ 18 | libsctp-dev \ 19 | libwxgtk-webview3.0-gtk3-dev' \ 20 | && apt-get update \ 21 | && apt-get install -y --no-install-recommends $runtimeDeps \ 22 | && apt-get install -y --no-install-recommends $buildDeps \ 23 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 24 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 25 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 26 | && mkdir -vp $ERL_TOP \ 27 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 28 | && rm otp-src.tar.gz \ 29 | && ( cd $ERL_TOP \ 30 | && ./otp_build autoconf \ 31 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 32 | && ./configure --build="$gnuArch" \ 33 | && make -j$(nproc) \ 34 | && make -j$(nproc) docs DOC_TARGETS=chunks \ 35 | && make install install-docs DOC_TARGETS=chunks ) \ 36 | && find /usr/local -name examples | xargs rm -rf \ 37 | && apt-get purge -y --auto-remove $buildDeps \ 38 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 39 | 40 | CMD ["erl"] 41 | 42 | # extra useful tools here: rebar & rebar3 43 | 44 | ENV REBAR_VERSION="2.6.4" 45 | 46 | RUN set -xe \ 47 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 48 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 49 | && mkdir -p /usr/src/rebar-src \ 50 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 51 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 52 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 53 | && rm rebar-src.tar.gz \ 54 | && cd /usr/src/rebar-src \ 55 | && ./bootstrap \ 56 | && install -v ./rebar /usr/local/bin/ \ 57 | && rm -rf /usr/src/rebar-src 58 | 59 | RUN set -xe \ 60 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 61 | && REBAR3_DOWNLOAD_SHA256="00646b692762ffd340560e8f16486dbda840e1546749ee5a7f58feeb77e7b516" \ 62 | && mkdir -p /usr/src/rebar3-src \ 63 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 64 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 65 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 66 | && rm rebar3-src.tar.gz \ 67 | && cd /usr/src/rebar3-src \ 68 | && HOME=$PWD ./bootstrap \ 69 | && install -v ./rebar3 /usr/local/bin/ \ 70 | && rm -rf /usr/src/rebar3-src 71 | -------------------------------------------------------------------------------- /24/alpine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.20 2 | 3 | ENV OTP_VERSION="24.3.4.17" \ 4 | REBAR3_VERSION="3.23.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="35f88a3af4d4885c5c17bcb8611da2d19f0626faa277392cd39c445254c015a2" \ 11 | && REBAR3_DOWNLOAD_SHA256="00646b692762ffd340560e8f16486dbda840e1546749ee5a7f58feeb77e7b516" \ 12 | && apk add --no-cache --virtual .fetch-deps \ 13 | curl \ 14 | ca-certificates \ 15 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 16 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 17 | && apk add --no-cache --virtual .build-deps \ 18 | dpkg-dev dpkg \ 19 | gcc \ 20 | g++ \ 21 | libc-dev \ 22 | linux-headers \ 23 | make \ 24 | autoconf \ 25 | ncurses-dev \ 26 | openssl-dev \ 27 | unixodbc-dev \ 28 | lksctp-tools-dev \ 29 | tar \ 30 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 31 | && mkdir -vp $ERL_TOP \ 32 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 33 | && rm otp-src.tar.gz \ 34 | && ( cd $ERL_TOP \ 35 | && ./otp_build autoconf \ 36 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 37 | && ./configure --build="$gnuArch" \ 38 | && make -j$(getconf _NPROCESSORS_ONLN) \ 39 | && make install ) \ 40 | && rm -rf $ERL_TOP \ 41 | && find /usr/local -regex '/usr/local/lib/erlang/\(lib/\|erts-\).*/\(man\|doc\|obj\|c_src\|emacs\|info\|examples\)' | xargs rm -rf \ 42 | && find /usr/local -name src | xargs -r find | grep -v '\.hrl$' | xargs rm -v || true \ 43 | && find /usr/local -name src | xargs -r find | xargs rmdir -vp || true \ 44 | && scanelf --nobanner -E ET_EXEC -BF '%F' --recursive /usr/local | xargs -r strip --strip-all \ 45 | && scanelf --nobanner -E ET_DYN -BF '%F' --recursive /usr/local | xargs -r strip --strip-unneeded \ 46 | && runDeps="$( \ 47 | scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ 48 | | tr ',' '\n' \ 49 | | sort -u \ 50 | | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ 51 | )" \ 52 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 53 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 54 | && echo "${REBAR3_DOWNLOAD_SHA256} rebar3-src.tar.gz" | sha256sum -c - \ 55 | && mkdir -p /usr/src/rebar3-src \ 56 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 57 | && rm rebar3-src.tar.gz \ 58 | && cd /usr/src/rebar3-src \ 59 | && HOME=$PWD ./bootstrap \ 60 | && install -v ./rebar3 /usr/local/bin/ \ 61 | && rm -rf /usr/src/rebar3-src \ 62 | && apk add --virtual .erlang-rundeps \ 63 | $runDeps \ 64 | lksctp-tools \ 65 | ca-certificates \ 66 | && apk del .fetch-deps .build-deps 67 | 68 | CMD ["erl"] 69 | -------------------------------------------------------------------------------- /24/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:bullseye 2 | 3 | ENV OTP_VERSION="24.3.4.17" \ 4 | REBAR3_VERSION="3.23.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies, and purge them on the last step to make 9 | # sure our final image contains only what we've just built: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="35f88a3af4d4885c5c17bcb8611da2d19f0626faa277392cd39c445254c015a2" \ 13 | && fetchDeps=' \ 14 | curl \ 15 | ca-certificates' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $fetchDeps \ 18 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 19 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 20 | && runtimeDeps=' \ 21 | libodbc1 \ 22 | libssl1.1 \ 23 | libsctp1 \ 24 | ' \ 25 | && buildDeps=' \ 26 | autoconf \ 27 | dpkg-dev \ 28 | gcc \ 29 | g++ \ 30 | make \ 31 | libncurses-dev \ 32 | unixodbc-dev \ 33 | libssl-dev \ 34 | libsctp-dev \ 35 | ' \ 36 | && apt-get install -y --no-install-recommends $runtimeDeps \ 37 | && apt-get install -y --no-install-recommends $buildDeps \ 38 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 39 | && mkdir -vp $ERL_TOP \ 40 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 41 | && rm otp-src.tar.gz \ 42 | && ( cd $ERL_TOP \ 43 | && ./otp_build autoconf \ 44 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 45 | && ./configure --build="$gnuArch" \ 46 | && make -j$(nproc) \ 47 | && make install ) \ 48 | && find /usr/local -name examples | xargs rm -rf \ 49 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 50 | && REBAR3_DOWNLOAD_SHA256="00646b692762ffd340560e8f16486dbda840e1546749ee5a7f58feeb77e7b516" \ 51 | && mkdir -p /usr/src/rebar3-src \ 52 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 53 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 54 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 55 | && rm rebar3-src.tar.gz \ 56 | && cd /usr/src/rebar3-src \ 57 | && HOME=$PWD ./bootstrap \ 58 | && install -v ./rebar3 /usr/local/bin/ \ 59 | && rm -rf /usr/src/rebar3-src \ 60 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 61 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 62 | 63 | CMD ["erl"] 64 | -------------------------------------------------------------------------------- /25/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:bullseye 2 | 3 | ENV OTP_VERSION="25.3.2.20" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies for erlang-odbc along with the erlang 9 | # build process: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="513bd9d2fc9c792984314feead5d971bb19e6ee531b4e208d4d4fd30774523f6" \ 13 | && runtimeDeps='libodbc1 \ 14 | libsctp1 \ 15 | libwxgtk3.0 \ 16 | libwxgtk-webview3.0-gtk3-0v5' \ 17 | && buildDeps='unixodbc-dev \ 18 | libsctp-dev \ 19 | libwxgtk-webview3.0-gtk3-dev' \ 20 | && apt-get update \ 21 | && apt-get install -y --no-install-recommends $runtimeDeps \ 22 | && apt-get install -y --no-install-recommends $buildDeps \ 23 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 24 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 25 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 26 | && mkdir -vp $ERL_TOP \ 27 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 28 | && rm otp-src.tar.gz \ 29 | && ( cd $ERL_TOP \ 30 | && ./otp_build autoconf \ 31 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 32 | && ./configure --build="$gnuArch" \ 33 | && make -j$(nproc) \ 34 | && make -j$(nproc) docs DOC_TARGETS=chunks \ 35 | && make install install-docs DOC_TARGETS=chunks ) \ 36 | && find /usr/local -name examples | xargs rm -rf \ 37 | && apt-get purge -y --auto-remove $buildDeps \ 38 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 39 | 40 | CMD ["erl"] 41 | 42 | # extra useful tools here: rebar & rebar3 43 | 44 | ENV REBAR_VERSION="2.6.4" 45 | 46 | RUN set -xe \ 47 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 48 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 49 | && mkdir -p /usr/src/rebar-src \ 50 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 51 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 52 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 53 | && rm rebar-src.tar.gz \ 54 | && cd /usr/src/rebar-src \ 55 | && ./bootstrap \ 56 | && install -v ./rebar /usr/local/bin/ \ 57 | && rm -rf /usr/src/rebar-src 58 | 59 | RUN set -xe \ 60 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 61 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 62 | && mkdir -p /usr/src/rebar3-src \ 63 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 64 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 65 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 66 | && rm rebar3-src.tar.gz \ 67 | && cd /usr/src/rebar3-src \ 68 | && HOME=$PWD ./bootstrap \ 69 | && install -v ./rebar3 /usr/local/bin/ \ 70 | && rm -rf /usr/src/rebar3-src 71 | -------------------------------------------------------------------------------- /25/alpine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.20 2 | 3 | ENV OTP_VERSION="25.3.2.20" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="513bd9d2fc9c792984314feead5d971bb19e6ee531b4e208d4d4fd30774523f6" \ 11 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 12 | && apk add --no-cache --virtual .fetch-deps \ 13 | curl \ 14 | ca-certificates \ 15 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 16 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 17 | && apk add --no-cache --virtual .build-deps \ 18 | dpkg-dev dpkg \ 19 | gcc \ 20 | g++ \ 21 | libc-dev \ 22 | linux-headers \ 23 | make \ 24 | autoconf \ 25 | ncurses-dev \ 26 | openssl-dev \ 27 | unixodbc-dev \ 28 | lksctp-tools-dev \ 29 | tar \ 30 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 31 | && mkdir -vp $ERL_TOP \ 32 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 33 | && rm otp-src.tar.gz \ 34 | && ( cd $ERL_TOP \ 35 | && ./otp_build autoconf \ 36 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 37 | && ./configure --build="$gnuArch" \ 38 | && make -j$(getconf _NPROCESSORS_ONLN) \ 39 | && make install ) \ 40 | && rm -rf $ERL_TOP \ 41 | && find /usr/local -regex '/usr/local/lib/erlang/\(lib/\|erts-\).*/\(man\|doc\|obj\|c_src\|emacs\|info\|examples\)' | xargs rm -rf \ 42 | && find /usr/local -name src | xargs -r find | grep -v '\.hrl$' | xargs rm -v || true \ 43 | && find /usr/local -name src | xargs -r find | xargs rmdir -vp || true \ 44 | && scanelf --nobanner -E ET_EXEC -BF '%F' --recursive /usr/local | xargs -r strip --strip-all \ 45 | && scanelf --nobanner -E ET_DYN -BF '%F' --recursive /usr/local | xargs -r strip --strip-unneeded \ 46 | && runDeps="$( \ 47 | scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ 48 | | tr ',' '\n' \ 49 | | sort -u \ 50 | | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ 51 | )" \ 52 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 53 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 54 | && echo "${REBAR3_DOWNLOAD_SHA256} rebar3-src.tar.gz" | sha256sum -c - \ 55 | && mkdir -p /usr/src/rebar3-src \ 56 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 57 | && rm rebar3-src.tar.gz \ 58 | && cd /usr/src/rebar3-src \ 59 | && HOME=$PWD ./bootstrap \ 60 | && install -v ./rebar3 /usr/local/bin/ \ 61 | && rm -rf /usr/src/rebar3-src \ 62 | && apk add --virtual .erlang-rundeps \ 63 | $runDeps \ 64 | lksctp-tools \ 65 | ca-certificates \ 66 | && apk del .fetch-deps .build-deps 67 | 68 | CMD ["erl"] 69 | -------------------------------------------------------------------------------- /25/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:bullseye 2 | 3 | ENV OTP_VERSION="25.3.2.20" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies, and purge them on the last step to make 9 | # sure our final image contains only what we've just built: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="513bd9d2fc9c792984314feead5d971bb19e6ee531b4e208d4d4fd30774523f6" \ 13 | && fetchDeps=' \ 14 | curl \ 15 | ca-certificates' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $fetchDeps \ 18 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 19 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 20 | && runtimeDeps=' \ 21 | libodbc1 \ 22 | libssl1.1 \ 23 | libsctp1 \ 24 | ' \ 25 | && buildDeps=' \ 26 | autoconf \ 27 | dpkg-dev \ 28 | gcc \ 29 | g++ \ 30 | make \ 31 | libncurses-dev \ 32 | unixodbc-dev \ 33 | libssl-dev \ 34 | libsctp-dev \ 35 | ' \ 36 | && apt-get install -y --no-install-recommends $runtimeDeps \ 37 | && apt-get install -y --no-install-recommends $buildDeps \ 38 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 39 | && mkdir -vp $ERL_TOP \ 40 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 41 | && rm otp-src.tar.gz \ 42 | && ( cd $ERL_TOP \ 43 | && ./otp_build autoconf \ 44 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 45 | && ./configure --build="$gnuArch" \ 46 | && make -j$(nproc) \ 47 | && make install ) \ 48 | && find /usr/local -name examples | xargs rm -rf \ 49 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 50 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 51 | && mkdir -p /usr/src/rebar3-src \ 52 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 53 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 54 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 55 | && rm rebar3-src.tar.gz \ 56 | && cd /usr/src/rebar3-src \ 57 | && HOME=$PWD ./bootstrap \ 58 | && install -v ./rebar3 /usr/local/bin/ \ 59 | && rm -rf /usr/src/rebar3-src \ 60 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 61 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 62 | 63 | CMD ["erl"] 64 | -------------------------------------------------------------------------------- /26/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:bookworm 2 | 3 | ENV OTP_VERSION="26.2.5.11" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies for erlang-odbc along with the erlang 9 | # build process: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="2eef7aac690a6cedfe0e6a20fc2d700db3490b4e4249683c0e5b812ad71304ed" \ 13 | && runtimeDeps='libodbc1 \ 14 | libsctp1 \ 15 | libwxgtk3.2-1 \ 16 | libwxgtk-webview3.2-1' \ 17 | && buildDeps='unixodbc-dev \ 18 | libsctp-dev \ 19 | libwxgtk-webview3.2-dev' \ 20 | && apt-get update \ 21 | && apt-get install -y --no-install-recommends $runtimeDeps \ 22 | && apt-get install -y --no-install-recommends $buildDeps \ 23 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 24 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 25 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 26 | && mkdir -vp $ERL_TOP \ 27 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 28 | && rm otp-src.tar.gz \ 29 | && ( cd $ERL_TOP \ 30 | && ./otp_build autoconf \ 31 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 32 | && ./configure --build="$gnuArch" \ 33 | && make -j$(nproc) \ 34 | && make -j$(nproc) docs DOC_TARGETS=chunks \ 35 | && make install install-docs DOC_TARGETS=chunks ) \ 36 | && find /usr/local -name examples | xargs rm -rf \ 37 | && apt-get purge -y --auto-remove $buildDeps \ 38 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 39 | 40 | CMD ["erl"] 41 | 42 | # extra useful tools here: rebar & rebar3 43 | 44 | ENV REBAR_VERSION="2.6.4" 45 | 46 | RUN set -xe \ 47 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 48 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 49 | && mkdir -p /usr/src/rebar-src \ 50 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 51 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 52 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 53 | && rm rebar-src.tar.gz \ 54 | && cd /usr/src/rebar-src \ 55 | && ./bootstrap \ 56 | && install -v ./rebar /usr/local/bin/ \ 57 | && rm -rf /usr/src/rebar-src 58 | 59 | RUN set -xe \ 60 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 61 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 62 | && mkdir -p /usr/src/rebar3-src \ 63 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 64 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 65 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 66 | && rm rebar3-src.tar.gz \ 67 | && cd /usr/src/rebar3-src \ 68 | && HOME=$PWD ./bootstrap \ 69 | && install -v ./rebar3 /usr/local/bin/ \ 70 | && rm -rf /usr/src/rebar3-src 71 | -------------------------------------------------------------------------------- /26/alpine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.20 2 | 3 | ENV OTP_VERSION="26.2.5.11" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="2eef7aac690a6cedfe0e6a20fc2d700db3490b4e4249683c0e5b812ad71304ed" \ 11 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 12 | && apk add --no-cache --virtual .fetch-deps \ 13 | curl \ 14 | ca-certificates \ 15 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 16 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 17 | && apk add --no-cache --virtual .build-deps \ 18 | dpkg-dev dpkg \ 19 | gcc \ 20 | g++ \ 21 | libc-dev \ 22 | linux-headers \ 23 | make \ 24 | autoconf \ 25 | ncurses-dev \ 26 | openssl-dev \ 27 | unixodbc-dev \ 28 | lksctp-tools-dev \ 29 | tar \ 30 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 31 | && mkdir -vp $ERL_TOP \ 32 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 33 | && rm otp-src.tar.gz \ 34 | && ( cd $ERL_TOP \ 35 | && ./otp_build autoconf \ 36 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 37 | && ./configure --build="$gnuArch" \ 38 | && make -j$(getconf _NPROCESSORS_ONLN) \ 39 | && make install ) \ 40 | && rm -rf $ERL_TOP \ 41 | && find /usr/local -regex '/usr/local/lib/erlang/\(lib/\|erts-\).*/\(man\|doc\|obj\|c_src\|emacs\|info\|examples\)' | xargs rm -rf \ 42 | && find /usr/local -name src | xargs -r find | grep -v '\.hrl$' | xargs rm -v || true \ 43 | && find /usr/local -name src | xargs -r find | xargs rmdir -vp || true \ 44 | && scanelf --nobanner -E ET_EXEC -BF '%F' --recursive /usr/local | xargs -r strip --strip-all \ 45 | && scanelf --nobanner -E ET_DYN -BF '%F' --recursive /usr/local | xargs -r strip --strip-unneeded \ 46 | && runDeps="$( \ 47 | scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ 48 | | tr ',' '\n' \ 49 | | sort -u \ 50 | | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ 51 | )" \ 52 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 53 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 54 | && echo "${REBAR3_DOWNLOAD_SHA256} rebar3-src.tar.gz" | sha256sum -c - \ 55 | && mkdir -p /usr/src/rebar3-src \ 56 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 57 | && rm rebar3-src.tar.gz \ 58 | && cd /usr/src/rebar3-src \ 59 | && HOME=$PWD ./bootstrap \ 60 | && install -v ./rebar3 /usr/local/bin/ \ 61 | && rm -rf /usr/src/rebar3-src \ 62 | && apk add --virtual .erlang-rundeps \ 63 | $runDeps \ 64 | lksctp-tools \ 65 | ca-certificates \ 66 | && apk del .fetch-deps .build-deps 67 | 68 | CMD ["erl"] 69 | -------------------------------------------------------------------------------- /26/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:bookworm 2 | 3 | ENV OTP_VERSION="26.2.5.11" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies, and purge them on the last step to make 9 | # sure our final image contains only what we've just built: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/OTP-${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="2eef7aac690a6cedfe0e6a20fc2d700db3490b4e4249683c0e5b812ad71304ed" \ 13 | && fetchDeps=' \ 14 | curl \ 15 | ca-certificates' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $fetchDeps \ 18 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 19 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 20 | && runtimeDeps=' \ 21 | libodbc1 \ 22 | libssl3 \ 23 | libsctp1 \ 24 | ' \ 25 | && buildDeps=' \ 26 | autoconf \ 27 | dpkg-dev \ 28 | gcc \ 29 | g++ \ 30 | make \ 31 | libncurses-dev \ 32 | unixodbc-dev \ 33 | libssl-dev \ 34 | libsctp-dev \ 35 | ' \ 36 | && apt-get install -y --no-install-recommends $runtimeDeps \ 37 | && apt-get install -y --no-install-recommends $buildDeps \ 38 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 39 | && mkdir -vp $ERL_TOP \ 40 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 41 | && rm otp-src.tar.gz \ 42 | && ( cd $ERL_TOP \ 43 | && ./otp_build autoconf \ 44 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 45 | && ./configure --build="$gnuArch" \ 46 | && make -j$(nproc) \ 47 | && make install ) \ 48 | && find /usr/local -name examples | xargs rm -rf \ 49 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 50 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 51 | && mkdir -p /usr/src/rebar3-src \ 52 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 53 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 54 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 55 | && rm rebar3-src.tar.gz \ 56 | && cd /usr/src/rebar3-src \ 57 | && HOME=$PWD ./bootstrap \ 58 | && install -v ./rebar3 /usr/local/bin/ \ 59 | && rm -rf /usr/src/rebar3-src \ 60 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 61 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 62 | 63 | CMD ["erl"] 64 | -------------------------------------------------------------------------------- /27/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:bookworm 2 | 3 | ENV OTP_VERSION="27.3.4" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies for erlang-odbc along with the erlang 9 | # build process: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/releases/download/OTP-${OTP_VERSION}/otp_src_${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="c3a0a0b51df08f877eed88378f3d2da7026a75b8559803bd78071bb47cd4783b" \ 13 | && runtimeDeps='libodbc1 \ 14 | libsctp1 \ 15 | libwxgtk3.2 \ 16 | libwxgtk-webview3.2-dev ' \ 17 | && buildDeps='unixodbc-dev \ 18 | libsctp-dev ' \ 19 | && apt-get update \ 20 | && apt-get install -y --no-install-recommends $runtimeDeps \ 21 | && apt-get install -y --no-install-recommends $buildDeps \ 22 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 23 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 24 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 25 | && mkdir -vp $ERL_TOP \ 26 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 27 | && rm otp-src.tar.gz \ 28 | && ( cd $ERL_TOP \ 29 | && ./otp_build autoconf \ 30 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 31 | && ./configure --build="$gnuArch" \ 32 | && make -j$(nproc) \ 33 | && make -j$(nproc) docs DOC_TARGETS=chunks \ 34 | && make install install-docs DOC_TARGETS=chunks ) \ 35 | && find /usr/local -name examples | xargs rm -rf \ 36 | && apt-get purge -y --auto-remove $buildDeps \ 37 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 38 | 39 | CMD ["erl"] 40 | 41 | # extra useful tools here: rebar & rebar3 42 | 43 | ENV REBAR_VERSION="2.6.4" 44 | 45 | RUN set -xe \ 46 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 47 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 48 | && mkdir -p /usr/src/rebar-src \ 49 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 50 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 51 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 52 | && rm rebar-src.tar.gz \ 53 | && cd /usr/src/rebar-src \ 54 | && ./bootstrap \ 55 | && install -v ./rebar /usr/local/bin/ \ 56 | && rm -rf /usr/src/rebar-src 57 | 58 | RUN set -xe \ 59 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 60 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 61 | && mkdir -p /usr/src/rebar3-src \ 62 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 63 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 64 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 65 | && rm rebar3-src.tar.gz \ 66 | && cd /usr/src/rebar3-src \ 67 | && HOME=$PWD ./bootstrap \ 68 | && install -v ./rebar3 /usr/local/bin/ \ 69 | && rm -rf /usr/src/rebar3-src 70 | -------------------------------------------------------------------------------- /27/alpine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.21 2 | 3 | ENV OTP_VERSION="27.3.4" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/releases/download/OTP-${OTP_VERSION}/otp_src_${OTP_VERSION}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="c3a0a0b51df08f877eed88378f3d2da7026a75b8559803bd78071bb47cd4783b" \ 11 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 12 | && apk add --no-cache --virtual .fetch-deps \ 13 | curl \ 14 | ca-certificates \ 15 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 16 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 17 | && apk add --no-cache --virtual .build-deps \ 18 | dpkg-dev dpkg \ 19 | gcc \ 20 | g++ \ 21 | libc-dev \ 22 | linux-headers \ 23 | make \ 24 | autoconf \ 25 | ncurses-dev \ 26 | openssl-dev \ 27 | unixodbc-dev \ 28 | lksctp-tools-dev \ 29 | tar \ 30 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 31 | && mkdir -vp $ERL_TOP \ 32 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 33 | && rm otp-src.tar.gz \ 34 | && ( cd $ERL_TOP \ 35 | && ./otp_build autoconf \ 36 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 37 | && ./configure --build="$gnuArch" \ 38 | && make -j$(getconf _NPROCESSORS_ONLN) \ 39 | && make install ) \ 40 | && rm -rf $ERL_TOP \ 41 | && find /usr/local -regex '/usr/local/lib/erlang/\(lib/\|erts-\).*/\(man\|doc\|obj\|c_src\|emacs\|info\|examples\)' | xargs rm -rf \ 42 | && find /usr/local -name src | xargs -r find | grep -v '\.hrl$' | xargs rm -v || true \ 43 | && find /usr/local -name src | xargs -r find | xargs rmdir -vp || true \ 44 | && scanelf --nobanner -E ET_EXEC -BF '%F' --recursive /usr/local | xargs -r strip --strip-all \ 45 | && scanelf --nobanner -E ET_DYN -BF '%F' --recursive /usr/local | xargs -r strip --strip-unneeded \ 46 | && runDeps="$( \ 47 | scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ 48 | | tr ',' '\n' \ 49 | | sort -u \ 50 | | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ 51 | )" \ 52 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 53 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 54 | && echo "${REBAR3_DOWNLOAD_SHA256} rebar3-src.tar.gz" | sha256sum -c - \ 55 | && mkdir -p /usr/src/rebar3-src \ 56 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 57 | && rm rebar3-src.tar.gz \ 58 | && cd /usr/src/rebar3-src \ 59 | && HOME=$PWD ./bootstrap \ 60 | && install -v ./rebar3 /usr/local/bin/ \ 61 | && rm -rf /usr/src/rebar3-src \ 62 | && apk add --virtual .erlang-rundeps \ 63 | $runDeps \ 64 | lksctp-tools \ 65 | ca-certificates \ 66 | && apk del .fetch-deps .build-deps 67 | 68 | CMD ["erl"] 69 | -------------------------------------------------------------------------------- /27/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:bookworm 2 | 3 | ENV OTP_VERSION="27.3.4" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies, and purge them on the last step to make 9 | # sure our final image contains only what we've just built: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/releases/download/OTP-${OTP_VERSION}/otp_src_${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="c3a0a0b51df08f877eed88378f3d2da7026a75b8559803bd78071bb47cd4783b" \ 13 | && fetchDeps=' \ 14 | curl \ 15 | ca-certificates' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $fetchDeps \ 18 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 19 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 20 | && runtimeDeps=' \ 21 | libodbc1 \ 22 | libssl3 \ 23 | libsctp1 \ 24 | ' \ 25 | && buildDeps=' \ 26 | autoconf \ 27 | dpkg-dev \ 28 | gcc \ 29 | g++ \ 30 | make \ 31 | libncurses-dev \ 32 | unixodbc-dev \ 33 | libssl-dev \ 34 | libsctp-dev \ 35 | ' \ 36 | && apt-get install -y --no-install-recommends $runtimeDeps \ 37 | && apt-get install -y --no-install-recommends $buildDeps \ 38 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 39 | && mkdir -vp $ERL_TOP \ 40 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 41 | && rm otp-src.tar.gz \ 42 | && ( cd $ERL_TOP \ 43 | && ./otp_build autoconf \ 44 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 45 | && ./configure --build="$gnuArch" \ 46 | && make -j$(nproc) \ 47 | && make install ) \ 48 | && find /usr/local -name examples | xargs rm -rf \ 49 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 50 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 51 | && mkdir -p /usr/src/rebar3-src \ 52 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 53 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 54 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 55 | && rm rebar3-src.tar.gz \ 56 | && cd /usr/src/rebar3-src \ 57 | && HOME=$PWD ./bootstrap \ 58 | && install -v ./rebar3 /usr/local/bin/ \ 59 | && rm -rf /usr/src/rebar3-src \ 60 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 61 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 62 | 63 | CMD ["erl"] 64 | -------------------------------------------------------------------------------- /28/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:bookworm 2 | 3 | ENV OTP_VERSION="28.0" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies for erlang-odbc along with the erlang 9 | # build process: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/releases/download/OTP-${OTP_VERSION}/otp_src_${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="71b5bf16e5b7b5d9fae98576c87aceac447964aaa3b4b457a5f60906839af92c" \ 13 | && runtimeDeps='libodbc1 \ 14 | libsctp1 \ 15 | libwxgtk3.2 \ 16 | libwxgtk-webview3.2-dev ' \ 17 | && buildDeps='unixodbc-dev \ 18 | libsctp-dev ' \ 19 | && apt-get update \ 20 | && apt-get install -y --no-install-recommends $runtimeDeps \ 21 | && apt-get install -y --no-install-recommends $buildDeps \ 22 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 23 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 24 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 25 | && mkdir -vp $ERL_TOP \ 26 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 27 | && rm otp-src.tar.gz \ 28 | && ( cd $ERL_TOP \ 29 | && ./otp_build autoconf \ 30 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 31 | && ./configure --build="$gnuArch" \ 32 | && make -j$(nproc) \ 33 | && make -j$(nproc) docs DOC_TARGETS=chunks \ 34 | && make install install-docs DOC_TARGETS=chunks ) \ 35 | && find /usr/local -name examples | xargs rm -rf \ 36 | && apt-get purge -y --auto-remove $buildDeps \ 37 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 38 | 39 | CMD ["erl"] 40 | 41 | # extra useful tools here: rebar & rebar3 42 | 43 | ENV REBAR_VERSION="2.6.4" 44 | 45 | RUN set -xe \ 46 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 47 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 48 | && mkdir -p /usr/src/rebar-src \ 49 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 50 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 51 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 52 | && rm rebar-src.tar.gz \ 53 | && cd /usr/src/rebar-src \ 54 | && ./bootstrap \ 55 | && install -v ./rebar /usr/local/bin/ \ 56 | && rm -rf /usr/src/rebar-src 57 | 58 | RUN set -xe \ 59 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 60 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 61 | && mkdir -p /usr/src/rebar3-src \ 62 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 63 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 64 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 65 | && rm rebar3-src.tar.gz \ 66 | && cd /usr/src/rebar3-src \ 67 | && HOME=$PWD ./bootstrap \ 68 | && install -v ./rebar3 /usr/local/bin/ \ 69 | && rm -rf /usr/src/rebar3-src 70 | -------------------------------------------------------------------------------- /28/alpine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.21 2 | 3 | ENV OTP_VERSION="28.0" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/releases/download/OTP-${OTP_VERSION}/otp_src_${OTP_VERSION}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="71b5bf16e5b7b5d9fae98576c87aceac447964aaa3b4b457a5f60906839af92c" \ 11 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 12 | && apk add --no-cache --virtual .fetch-deps \ 13 | curl \ 14 | ca-certificates \ 15 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 16 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 17 | && apk add --no-cache --virtual .build-deps \ 18 | dpkg-dev dpkg \ 19 | gcc \ 20 | g++ \ 21 | libc-dev \ 22 | linux-headers \ 23 | make \ 24 | autoconf \ 25 | ncurses-dev \ 26 | openssl-dev \ 27 | unixodbc-dev \ 28 | lksctp-tools-dev \ 29 | tar \ 30 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 31 | && mkdir -vp $ERL_TOP \ 32 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 33 | && rm otp-src.tar.gz \ 34 | && ( cd $ERL_TOP \ 35 | && ./otp_build autoconf \ 36 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 37 | && ./configure --build="$gnuArch" \ 38 | && make -j$(getconf _NPROCESSORS_ONLN) \ 39 | && make install ) \ 40 | && rm -rf $ERL_TOP \ 41 | && find /usr/local -regex '/usr/local/lib/erlang/\(lib/\|erts-\).*/\(man\|doc\|obj\|c_src\|emacs\|info\|examples\)' | xargs rm -rf \ 42 | && find /usr/local -name src | xargs -r find | grep -v '\.hrl$' | xargs rm -v || true \ 43 | && find /usr/local -name src | xargs -r find | xargs rmdir -vp || true \ 44 | && scanelf --nobanner -E ET_EXEC -BF '%F' --recursive /usr/local | xargs -r strip --strip-all \ 45 | && scanelf --nobanner -E ET_DYN -BF '%F' --recursive /usr/local | xargs -r strip --strip-unneeded \ 46 | && runDeps="$( \ 47 | scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ 48 | | tr ',' '\n' \ 49 | | sort -u \ 50 | | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ 51 | )" \ 52 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 53 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 54 | && echo "${REBAR3_DOWNLOAD_SHA256} rebar3-src.tar.gz" | sha256sum -c - \ 55 | && mkdir -p /usr/src/rebar3-src \ 56 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 57 | && rm rebar3-src.tar.gz \ 58 | && cd /usr/src/rebar3-src \ 59 | && HOME=$PWD ./bootstrap \ 60 | && install -v ./rebar3 /usr/local/bin/ \ 61 | && rm -rf /usr/src/rebar3-src \ 62 | && apk add --virtual .erlang-rundeps \ 63 | $runDeps \ 64 | lksctp-tools \ 65 | ca-certificates \ 66 | && apk del .fetch-deps .build-deps 67 | 68 | CMD ["erl"] 69 | -------------------------------------------------------------------------------- /28/slim/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:bookworm 2 | 3 | ENV OTP_VERSION="28.0" \ 4 | REBAR3_VERSION="3.24.0" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | # We'll install the build dependencies, and purge them on the last step to make 9 | # sure our final image contains only what we've just built: 10 | RUN set -xe \ 11 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/releases/download/OTP-${OTP_VERSION}/otp_src_${OTP_VERSION}.tar.gz" \ 12 | && OTP_DOWNLOAD_SHA256="71b5bf16e5b7b5d9fae98576c87aceac447964aaa3b4b457a5f60906839af92c" \ 13 | && fetchDeps=' \ 14 | curl \ 15 | ca-certificates' \ 16 | && apt-get update \ 17 | && apt-get install -y --no-install-recommends $fetchDeps \ 18 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 19 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 20 | && runtimeDeps=' \ 21 | libodbc1 \ 22 | libssl3 \ 23 | libsctp1 \ 24 | ' \ 25 | && buildDeps=' \ 26 | autoconf \ 27 | dpkg-dev \ 28 | gcc \ 29 | g++ \ 30 | make \ 31 | libncurses-dev \ 32 | unixodbc-dev \ 33 | libssl-dev \ 34 | libsctp-dev \ 35 | ' \ 36 | && apt-get install -y --no-install-recommends $runtimeDeps \ 37 | && apt-get install -y --no-install-recommends $buildDeps \ 38 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%%@*}" \ 39 | && mkdir -vp $ERL_TOP \ 40 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 41 | && rm otp-src.tar.gz \ 42 | && ( cd $ERL_TOP \ 43 | && ./otp_build autoconf \ 44 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 45 | && ./configure --build="$gnuArch" \ 46 | && make -j$(nproc) \ 47 | && make install ) \ 48 | && find /usr/local -name examples | xargs rm -rf \ 49 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 50 | && REBAR3_DOWNLOAD_SHA256="391b0eaa2825bb427fef1e55a0d166493059175f57a33b00346b84a20398216c" \ 51 | && mkdir -p /usr/src/rebar3-src \ 52 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 53 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 54 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 55 | && rm rebar3-src.tar.gz \ 56 | && cd /usr/src/rebar3-src \ 57 | && HOME=$PWD ./bootstrap \ 58 | && install -v ./rebar3 /usr/local/bin/ \ 59 | && rm -rf /usr/src/rebar3-src \ 60 | && apt-get purge -y --auto-remove $buildDeps $fetchDeps \ 61 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 62 | 63 | CMD ["erl"] 64 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | -------------------------------------------------------------------------------- /R15/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:jessie 2 | 3 | ENV OTP_VERSION R15B03-1 4 | 5 | ENV LANG C.UTF-8 6 | 7 | RUN set -xe \ 8 | && OTP_DOWNLOAD_URL=http://www.erlang.org/download/otp_src_$OTP_VERSION.tar.gz \ 9 | && OTP_DOWNLOAD_MD5=eccd1e6dda6132993555e088005019f2 \ 10 | && curl -SL $OTP_DOWNLOAD_URL -o otp-src.tar.gz \ 11 | && echo "$OTP_DOWNLOAD_MD5 otp-src.tar.gz" | md5sum -c - \ 12 | && mkdir -p /usr/src/otp-src \ 13 | && tar -xzC /usr/src/otp-src --strip-components=1 -f otp-src.tar.gz \ 14 | && rm otp-src.tar.gz \ 15 | && cd /usr/src/otp-src \ 16 | && ./configure \ 17 | && make -j$(nproc) \ 18 | && make install \ 19 | && find /usr/local -name examples | xargs rm -rf \ 20 | && rm -rf /usr/src/otp-src 21 | 22 | CMD ["erl"] 23 | -------------------------------------------------------------------------------- /R15/onbuild/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM erlang:R15 2 | -------------------------------------------------------------------------------- /R16/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:jessie 2 | 3 | ENV OTP_VERSION=R16B03-1 LANG=C.UTF-8 4 | 5 | RUN set -xe \ 6 | && OTP_DOWNLOAD_MD5=e5ece977375197338c1b93b3d88514f8 \ 7 | && buildDeps='unixodbc-dev' \ 8 | && apt-get update \ 9 | && apt-get install -y --no-install-recommends $buildDeps \ 10 | && curl -fSL -o otp-src.tar.gz http://www.erlang.org/download/otp_src_$OTP_VERSION.tar.gz \ 11 | && echo "$OTP_DOWNLOAD_MD5 otp-src.tar.gz" | md5sum -c - \ 12 | && mkdir -p /usr/src/otp-src \ 13 | && tar -xzC /usr/src/otp-src --strip-components=1 -f otp-src.tar.gz \ 14 | && rm otp-src.tar.gz \ 15 | && cd /usr/src/otp-src \ 16 | && ./configure \ 17 | && make -j$(nproc) \ 18 | && make install \ 19 | && find /usr/local -name examples | xargs rm -rf \ 20 | && apt-get purge -y --auto-remove $buildDeps \ 21 | && rm -rf /usr/src/otp-src /var/lib/apt/lists/* 22 | 23 | CMD ["erl"] 24 | -------------------------------------------------------------------------------- /R16/onbuild/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM erlang:R16 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The Official Erlang OTP images 2 | 3 | [![dockeri.co](http://dockeri.co/image/_/erlang)](https://hub.docker.com/_/erlang/) 4 | 5 | [![Docker Stars](https://img.shields.io/docker/stars/_/erlang.svg?style=flat-square)](https://hub.docker.com/_/erlang/) 6 | [![Docker Pulls](https://img.shields.io/docker/pulls/_/erlang.svg?style=flat-square)](https://hub.docker.com/_/erlang/) 7 | [![Image Layers](https://images.microbadger.com/badges/image/erlang.svg)](https://microbadger.com/images/erlang "Get your own image badge on microbadger.com") 8 | 9 | [![Build Status](https://github.com/erlang/docker-erlang-otp/workflows/erlang/badge.svg)](https://github.com/erlang/docker-erlang-otp/actions) 10 | 11 | This is used as docker base image for Erlang OTP. 12 | The goal is to provide images for a few last erlang releases (currently 25 / 24 / 23 / 22 / 21 / 20 / 19 / 18), in close to full feature Erlang OTP, and relatively slim images. Support to 17, R16 and R15 are provided in this repo on a best-effort basis, and not part of official-image effort in docker-library/official-images#1075 . 13 | 14 | ### use the Erlang 23 15 | 16 | here is providing the latest Erlang 23 image; you may pull from official-images or build it locally: 17 | 18 | ```console 19 | $ docker build -t erlang:23.0 ./23 20 | [...] 21 | ➸ docker run -it --rm erlang:23.0 22 | Erlang/OTP 23 [erts-11.0.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe] 23 | 24 | Eshell V11.0.3 (abort with ^G) 25 | 1> erlang:system_info(otp_release). 26 | "23" 27 | 2> os:getenv(). 28 | ["PROGNAME=erl","ROOTDIR=/usr/local/lib/erlang", 29 | "TERM=xterm","REBAR3_VERSION=3.14.4","REBAR_VERSION=2.6.4", 30 | "PWD=/","HOSTNAME=bc9486c9549b","OTP_VERSION=23.0.3", 31 | "PATH=/usr/local/lib/erlang/erts-11.0.3/bin:/usr/local/lib/erlang/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", 32 | "EMU=beam","HOME=/root", 33 | "BINDIR=/usr/local/lib/erlang/erts-11.0.3/bin"] 34 | 3> 'hello_юникод_世界'. % Erlang20 now support unicode in atom 35 | 'hello_юникод_世界' 36 | 4> try 1/0 catch C:R:Stacktrace -> logger:error("caught: ~tp~n", [{C,R,Stacktrace}]) end. %% Erlang 21 now has new API for logging, logger 37 | =ERROR REPORT==== 20-Jun-2018::07:23:13.384474 === 38 | caught: {error,badarith, 39 | [{erlang,'/',[1,0],[]}, 40 | {erl_eval,do_apply,6,[{file,"erl_eval.erl"},{line,681}]}, 41 | {erl_eval,try_clauses,8,[{file,"erl_eval.erl"},{line,911}]}, 42 | {shell,exprs,7,[{file,"shell.erl"},{line,686}]}, 43 | {shell,eval_exprs,7,[{file,"shell.erl"},{line,642}]}, 44 | {shell,eval_loop,3,[{file,"shell.erl"},{line,627}]}]} 45 | 5> h(lists,foldl). %% Erlang 23 now has the documentation in the shell 46 | 47 | -spec foldl(Fun, Acc0, List) -> Acc1 48 | when 49 | Fun :: fun((Elem :: T, AccIn) -> AccOut), 50 | Acc0 :: term(), 51 | Acc1 :: term(), 52 | AccIn :: term(), 53 | AccOut :: term(), 54 | List :: [T], 55 | T :: term(). 56 | 57 | Calls Fun(Elem, AccIn) on successive elements A of List, 58 | starting with AccIn == Acc0. Fun/2 must return a new 59 | accumulator, which is passed to the next call. The function 60 | returns the final value of the accumulator. Acc0 is returned if 61 | the list is empty. 62 | 63 | Example: 64 | 65 | > lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]). 66 | 15 67 | > lists:foldl(fun(X, Prod) -> X * Prod end, 1, [1,2,3,4,5]). 68 | 120 69 | 70 | ok 71 | ``` 72 | 73 | #### Features 74 | 75 | 1. observer is a wx widget application, the GUI may require different protocol 76 | for different OSes, for Linux it requires X11 protocol be properly setup 77 | this wiki has setup for Linux desktop for observer use in elixir, which also applies to Erlang 78 | https://github.com/c0b/docker-elixir/wiki/use-observer 79 | 2. dirty scheduler is enabled since Erlang 19 images; 80 | 81 | Read from https://github.com/erlang/otp/releases for each tag description as release announcement. 82 | 83 | ### Design 84 | 85 | 1. the standard variant `erlang:23` and `erlang:22` builds from source code, based on [`buildpack-deps:buster`](https://hub.docker.com/_/buildpack-deps/); (releases before `erlang:22` builds using [`buildpack-deps:stretch`](https://hub.docker.com/_/buildpack-deps/)) 86 | `erlang:23.1` and later contains documentation that can be accessed in the shell 87 | it covered gcc compiler and some popular -dev packages, for those erlang port drivers written in C; while it doesn't have java compiler so jinterface doesn't compile, assuming demand to write java code for erlang applications is low; 88 | 3. the slim version is built from `debian:buster` install building tools (compilers & -dev packages) on the fly and uninstall after compilation finished, to shrink image size; 89 | 4. the alpine version is built from last alpine stable image, install building tools (compilers & -dev packages) on the fly and uninstall after compilation finished, also removed src/\*.erl include/\*.hrl / all docs (include man info) / examples / static archives / build and unittest tools, and strip the ELF binaries, to get a really slim image, ideally smaller than 20MB; 90 | 5. rebar and rebar3 tool is bundled in `erlang:23`, `erlang:22`, `erlang:21`, `erlang:20`, `erlang:19` and `erlang:18` image; 91 | 92 | ### Sizes 93 | 94 | ```console 95 | $ docker images --filter=reference='erlang:*' 96 | REPOSITORY TAG IMAGE ID CREATED SIZE 97 | erlang 23.0 37433d089268 13 days ago 1.22GB 98 | erlang 23.0-slim 372b42eed86b 2 weeks ago 257MB 99 | erlang 23.0-alpine db7cf4f98f42 4 weeks ago 68.7MB 100 | erlang 22.3 c77ded78275c 13 hours ago 1.22GB 101 | erlang 22.3-slim ca5dbe8a4a46 13 hours ago 255MB 102 | erlang 22.3-alpine 661e530efb37 13 hours ago 68.9MB 103 | erlang 21.3 537ac956d5d6 13 days ago 1.07GB 104 | erlang 21.3-slim 5ffbb00d3118 2 weeks ago 251MB 105 | erlang 21.3-alpine 263294b72a1f 2 weeks ago 73.4MB 106 | erlang 20.3 82c4e39617a9 13 days ago 1.07GB 107 | erlang 20.3-slim 3e123645dc80 2 weeks ago 259MB 108 | erlang 20.3-alpine 78861bbea4a0 3 months ago 77.3MB 109 | ``` 110 | 111 | ### Running 112 | 113 | ```console 114 | $ docker run -it --rm erlang:21.0 /bin/bash 115 | root@ed434f6c1081:/# ls /usr/local/lib/erlang/lib/ 116 | asn1-5.0.6 erl_interface-3.10.3 observer-2.8 ssh-4.7 117 | common_test-1.16 erts-10.0 odbc-2.12.1 ssl-9.0 118 | compiler-7.2 et-1.6.2 os_mon-2.4.5 stdlib-3.5 119 | crypto-4.3 eunit-2.3.6 otp_mibs-1.2 syntax_tools-2.1.5 120 | debugger-4.2.5 ftp-1.0 parsetools-2.1.7 tftp-1.0 121 | dialyzer-3.3 hipe-3.18 public_key-1.6 tools-3.0 122 | diameter-2.1.5 inets-7.0 reltool-0.7.6 wx-1.8.4 123 | edoc-0.9.3 kernel-6.0 runtime_tools-1.13 xmerl-1.3.17 124 | eldap-1.2.4 megaco-3.18.3 sasl-3.2 125 | erl_docgen-0.8 mnesia-4.15.4 snmp-5.2.11 126 | root@ed434f6c1081:/# ls /usr/local/lib/erlang/lib/ | wc -l 127 | 38 128 | ``` 129 | 130 | The official release 21 https://github.com/erlang/otp/tree/maint-21/lib has 39 libs, while here by default it provided 38 of them (plus erts-10.0 from erlang itself), except jinterface, because to build that one would pull all jdk dependencies and make the image too fat; if you really need that to write code in java and interface into erlang code, you may create an issue here to ask for it. 131 | -------------------------------------------------------------------------------- /elixir/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM otp:18.1 3 | 4 | ENV ELIXIR_VERSION=1.1.1 5 | ENV LANG=C.UTF-8 6 | 7 | RUN set -xe \ 8 | && ELIXIR_DOWNLOAD_URL="https://github.com/elixir-lang/elixir/archive/v${ELIXIR_VERSION}.tar.gz" \ 9 | && ELIXIR_DOWNLOAD_SHA1=d0b213c768b58436f293adab47c0e38715ac01f7 \ 10 | && curl -fsSL $ELIXIR_DOWNLOAD_URL -o elixir-src.tar.gz \ 11 | && echo "$ELIXIR_DOWNLOAD_SHA1 elixir-src.tar.gz" | sha1sum -c - \ 12 | && mkdir -p /usr/src/elixir-src \ 13 | && tar -xzf elixir-src.tar.gz -C /usr/src/elixir-src --strip-components=1 \ 14 | && rm elixir-src.tar.gz \ 15 | && cd /usr/src/elixir-src \ 16 | && make -j$(nproc) \ 17 | && make install \ 18 | && rm -rf /usr/src/elixir-src 19 | 20 | CMD ["iex"] 21 | -------------------------------------------------------------------------------- /generate-stackbrew-library.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -eu 3 | 4 | declare -a -r versions=(28 27 26 25 24) 5 | declare -A -r aliases=( 6 | [28]='latest' 7 | ) 8 | 9 | # get the most recent commit which modified any of "$@" 10 | fileCommit() { 11 | git log -1 --format='format:%H' HEAD -- "$@" 12 | } 13 | 14 | # get the most recent commit which modified "$1/Dockerfile" or any file COPY'd from "$1/Dockerfile" 15 | dirCommit() { 16 | local dir="$1"; shift 17 | ( 18 | cd "$dir" 19 | fileCommit \ 20 | Dockerfile \ 21 | $(git show HEAD:./Dockerfile | awk ' 22 | toupper($1) == "COPY" { 23 | for (i = 2; i < NF; i++) { 24 | print $i 25 | } 26 | } 27 | ') 28 | ) 29 | } 30 | 31 | # prints "$2$1$3$1...$N" 32 | join() { 33 | local sep="$1"; shift 34 | local out; printf -v out "${sep//%/%%}%s" "$@" 35 | echo "${out#$sep}" 36 | } 37 | 38 | extractVersion() { 39 | awk ' 40 | $1 == "ENV" && /_VERSION/ { 41 | match($2, /"(.*)"/) 42 | versionStr = substr($2, RSTART + 1, RLENGTH - 2) 43 | 44 | # Preserve release candidate (-rcX) if present 45 | if (match(versionStr, /-rc[0-9]+$/)) { 46 | rcPart = substr(versionStr, RSTART) 47 | versionCore = substr(versionStr, 1, RSTART - 1) 48 | } else { 49 | rcPart = "" 50 | versionCore = versionStr 51 | } 52 | 53 | versionStrLength = split(versionCore, versionStrArray, ".") 54 | if (versionStrLength > 3) { 55 | print versionCore rcPart 56 | } else if (versionStrLength > 2) { 57 | print versionCore ".0" rcPart 58 | } else { 59 | print versionCore ".0.0" rcPart 60 | } 61 | exit 62 | }' 63 | } 64 | 65 | self="${BASH_SOURCE##*/}" 66 | 67 | cat <<-EOH 68 | # this file is generated via https://github.com/erlang/docker-erlang-otp/blob/$(fileCommit "$self")/$self 69 | 70 | Maintainers: Mr C0B (@c0b) 71 | GitRepo: https://github.com/erlang/docker-erlang-otp.git 72 | EOH 73 | 74 | for version in "${versions[@]}"; do 75 | commit="$(dirCommit "$version")" 76 | 77 | fullVersion="$(git show "$commit":"$version/Dockerfile" | extractVersion)" 78 | 79 | versionAliases=( $fullVersion ) 80 | while :; do 81 | localVersion="${fullVersion%.*}" 82 | if [ "$localVersion" = "$version" ]; then 83 | break 84 | fi 85 | versionAliases+=( $localVersion ) 86 | fullVersion=$localVersion 87 | # echo "${versionAliases[@]}" 88 | done 89 | versionAliases+=( $version ${aliases[$version]:-} ) 90 | 91 | for variant in '' slim alpine; do 92 | dir="$version${variant:+/$variant}" 93 | [ -f "$dir/Dockerfile" ] || continue 94 | 95 | commit="$(dirCommit "$dir")" 96 | 97 | variantAliases=( "${versionAliases[@]}" ) 98 | if [ -n "$variant" ]; then 99 | variantAliases=( "${variantAliases[@]/%/-$variant}" ) 100 | variantAliases=( "${variantAliases[@]//latest-/}" ) 101 | fi 102 | 103 | variantArches=( amd64 arm32v5 arm32v7 arm64v8 i386 mips64le ppc64le s390x) 104 | 105 | case "$version" in 106 | 25|24|23|22|21|20|19|18) 107 | variantArches=( ${variantArches[@]/s390x} ) 108 | variantArches=( ${variantArches[@]/ppc64le} ) 109 | variantArches=( ${variantArches[@]/mips64le} ) 110 | variantArches=( ${variantArches[@]/arm32v5} ) 111 | esac 112 | 113 | case "$variant" in 114 | alpine) 115 | variantArches=( ${variantArches[@]/mips64le} ) 116 | variantArches=( ${variantArches[@]/arm32v5} ) 117 | esac 118 | 119 | echo 120 | cat <<-EOE 121 | Tags: $(join ', ' "${variantAliases[@]}") 122 | Architectures: $(join ', ' "${variantArches[@]}") 123 | GitCommit: $commit 124 | Directory: $dir 125 | EOE 126 | done 127 | done 128 | -------------------------------------------------------------------------------- /master/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:buster 2 | 3 | ENV OTP_VERSION="24@7de19bb" \ 4 | REBAR3_VERSION="3.18.0" 5 | 6 | # We'll install the build dependencies for erlang-odbc along with the erlang 7 | # build process: 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/${OTP_VERSION#*@}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="75d84af04e9ee797b6f90fc2ab1c9ca25ea9712c79d54d2567f2bcc0449b8ed0" \ 11 | && runtimeDeps='libodbc1 \ 12 | libsctp1 \ 13 | libwxgtk3.0' \ 14 | && buildDeps='unixodbc-dev \ 15 | libsctp-dev \ 16 | libwxgtk3.0-dev' \ 17 | && apt-get update \ 18 | && apt-get install -y --no-install-recommends $runtimeDeps \ 19 | && apt-get install -y --no-install-recommends $buildDeps \ 20 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 21 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 22 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%@*}" \ 23 | && mkdir -vp $ERL_TOP \ 24 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 25 | && rm otp-src.tar.gz \ 26 | && ( cd $ERL_TOP \ 27 | && ./otp_build autoconf \ 28 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 29 | && ./configure --build="$gnuArch" \ 30 | && make -j$(nproc) \ 31 | && make -j$(nproc) docs DOC_TARGETS=chunks \ 32 | && make install install-docs DOC_TARGETS=chunks ) \ 33 | && find /usr/local -name examples | xargs rm -rf \ 34 | && apt-get purge -y --auto-remove $buildDeps \ 35 | && rm -rf $ERL_TOP /var/lib/apt/lists/* 36 | 37 | CMD ["erl"] 38 | 39 | # extra useful tools here: rebar & rebar3 40 | 41 | ENV REBAR_VERSION="2.6.4" 42 | 43 | RUN set -xe \ 44 | && REBAR_DOWNLOAD_URL="https://github.com/rebar/rebar/archive/${REBAR_VERSION}.tar.gz" \ 45 | && REBAR_DOWNLOAD_SHA256="577246bafa2eb2b2c3f1d0c157408650446884555bf87901508ce71d5cc0bd07" \ 46 | && mkdir -p /usr/src/rebar-src \ 47 | && curl -fSL -o rebar-src.tar.gz "$REBAR_DOWNLOAD_URL" \ 48 | && echo "$REBAR_DOWNLOAD_SHA256 rebar-src.tar.gz" | sha256sum -c - \ 49 | && tar -xzf rebar-src.tar.gz -C /usr/src/rebar-src --strip-components=1 \ 50 | && rm rebar-src.tar.gz \ 51 | && cd /usr/src/rebar-src \ 52 | && ./bootstrap \ 53 | && install -v ./rebar /usr/local/bin/ \ 54 | && rm -rf /usr/src/rebar-src 55 | 56 | RUN set -xe \ 57 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 58 | && REBAR3_DOWNLOAD_SHA256="cce1925d33240d81d0e4d2de2eef3616d4c17b0532ed004274f875e6607d25d2" \ 59 | && mkdir -p /usr/src/rebar3-src \ 60 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 61 | && echo "$REBAR3_DOWNLOAD_SHA256 rebar3-src.tar.gz" | sha256sum -c - \ 62 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 63 | && rm rebar3-src.tar.gz \ 64 | && cd /usr/src/rebar3-src \ 65 | && HOME=$PWD ./bootstrap \ 66 | && install -v ./rebar3 /usr/local/bin/ \ 67 | && rm -rf /usr/src/rebar3-src 68 | -------------------------------------------------------------------------------- /master/alpine/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.14 2 | 3 | ENV OTP_VERSION="24@7de19bb" \ 4 | REBAR3_VERSION="3.16.1" 5 | 6 | LABEL org.opencontainers.image.version=$OTP_VERSION 7 | 8 | RUN set -xe \ 9 | && OTP_DOWNLOAD_URL="https://github.com/erlang/otp/archive/${OTP_VERSION#*@}.tar.gz" \ 10 | && OTP_DOWNLOAD_SHA256="75d84af04e9ee797b6f90fc2ab1c9ca25ea9712c79d54d2567f2bcc0449b8ed0" \ 11 | && REBAR3_DOWNLOAD_SHA256="a14711b09f6e1fc1b080b79d78c304afebcbb7fafed9d0972eb739f0ed89121b" \ 12 | && apk add --no-cache --virtual .fetch-deps \ 13 | curl \ 14 | ca-certificates \ 15 | && curl -fSL -o otp-src.tar.gz "$OTP_DOWNLOAD_URL" \ 16 | && echo "$OTP_DOWNLOAD_SHA256 otp-src.tar.gz" | sha256sum -c - \ 17 | && apk add --no-cache --virtual .build-deps \ 18 | dpkg-dev dpkg \ 19 | gcc \ 20 | g++ \ 21 | libc-dev \ 22 | linux-headers \ 23 | make \ 24 | autoconf \ 25 | ncurses-dev \ 26 | openssl-dev \ 27 | unixodbc-dev \ 28 | lksctp-tools-dev \ 29 | tar \ 30 | && export ERL_TOP="/usr/src/otp_src_${OTP_VERSION%@*}" \ 31 | && mkdir -vp $ERL_TOP \ 32 | && tar -xzf otp-src.tar.gz -C $ERL_TOP --strip-components=1 \ 33 | && rm otp-src.tar.gz \ 34 | && ( cd $ERL_TOP \ 35 | && ./otp_build autoconf \ 36 | && gnuArch="$(dpkg-architecture --query DEB_HOST_GNU_TYPE)" \ 37 | && ./configure --build="$gnuArch" \ 38 | && make -j$(getconf _NPROCESSORS_ONLN) \ 39 | && make install ) \ 40 | && rm -rf $ERL_TOP \ 41 | && find /usr/local -regex '/usr/local/lib/erlang/\(lib/\|erts-\).*/\(man\|doc\|obj\|c_src\|emacs\|info\|examples\)' | xargs rm -rf \ 42 | && find /usr/local -name src | xargs -r find | grep -v '\.hrl$' | xargs rm -v || true \ 43 | && find /usr/local -name src | xargs -r find | xargs rmdir -vp || true \ 44 | && scanelf --nobanner -E ET_EXEC -BF '%F' --recursive /usr/local | xargs -r strip --strip-all \ 45 | && scanelf --nobanner -E ET_DYN -BF '%F' --recursive /usr/local | xargs -r strip --strip-unneeded \ 46 | && runDeps="$( \ 47 | scanelf --needed --nobanner --format '%n#p' --recursive /usr/local \ 48 | | tr ',' '\n' \ 49 | | sort -u \ 50 | | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \ 51 | )" \ 52 | && REBAR3_DOWNLOAD_URL="https://github.com/erlang/rebar3/archive/${REBAR3_VERSION}.tar.gz" \ 53 | && curl -fSL -o rebar3-src.tar.gz "$REBAR3_DOWNLOAD_URL" \ 54 | && echo "${REBAR3_DOWNLOAD_SHA256} rebar3-src.tar.gz" | sha256sum -c - \ 55 | && mkdir -p /usr/src/rebar3-src \ 56 | && tar -xzf rebar3-src.tar.gz -C /usr/src/rebar3-src --strip-components=1 \ 57 | && rm rebar3-src.tar.gz \ 58 | && cd /usr/src/rebar3-src \ 59 | && HOME=$PWD ./bootstrap \ 60 | && install -v ./rebar3 /usr/local/bin/ \ 61 | && rm -rf /usr/src/rebar3-src \ 62 | && apk add --virtual .erlang-rundeps \ 63 | $runDeps \ 64 | lksctp-tools \ 65 | ca-certificates \ 66 | && apk del .fetch-deps .build-deps 67 | 68 | CMD ["erl"] 69 | --------------------------------------------------------------------------------