I wrote a Dockerfile
to install ecCodes for use in a python environment using cfgrib and xarray.
The tarball can be found on the ecCode releases page
Dockerfile
# syntax=docker/dockerfile:1
# ECCODE COMPILE
FROM python:3.10.4 as compiler
# /path/to/where/you/install/eccodes
ENV ECCODES_DIR=/usr/src/eccodes
# the zip file for eccodes
COPY ./eccodes-2.24.2-Source.tar.gz ./eccodes-2.24.2-Source.tar.gz
RUN apt-get update -y
# compiler tools
RUN apt-get install -y --no-install-recommends \
cmake \
gfortran \
build-essential
# unzip
RUN tar -xzf eccodes-2.24.2-Source.tar.gz
# prepare the build folders
RUN mkdir $ECCODES_DIR build && cd build
#
RUN cmake ../eccodes-2.24.2-Source -DCMAKE_INSTALL_PREFIX=$ECCODES_DIR -DENABLE_JPG=ON
RUN make && ctest && make install
# PYTHON BUILD
FROM python:3.10.4 as builder
ENV VIRTUAL_ENV=/opt/venv
COPY ./requirements.txt ./requirements.txt
# create the virtual env
RUN python3 -m venv $VIRTUAL_ENV
# upgrade pip
RUN python3 -m pip install --upgrade pip
# install the requirements
RUN pip install -r requirements.txt
# FINAL
FROM python:3.10.4
COPY --from=compiler $ECCODES_DIR $ECCODES_DIR
ENV ECCODES_DIR=$ECCODES_DIR
COPY --from=builder $VIRTUAL_ENV $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN python -m cfgrib selfcheck
requirements.txt
attrs==21.4.0
cffi==1.15.0
cfgrib==0.9.10.1
click==8.1.3
eccodes==1.4.2
findlibs==0.0.2
numpy==1.22.4
packaging==21.3
pandas==1.4.2
pycparser==2.21
pyparsing==3.0.9
python-dateutil==2.8.2
pytz==2022.1
six==1.16.0
xarray==2022.3.0