github.com/line/ostracon@v1.0.10-0.20230328032236-7f20145f065d/test/e2e/docker/Dockerfile (about)

     1  # We need to build in a Linux environment to support C libraries, e.g. RocksDB.
     2  # We use Debian instead of Alpine, so that we can use binary database packages
     3  # instead of spending time compiling them.
     4  FROM golang:1.18
     5  
     6  RUN apt-get -qq update -y && apt-get -qq upgrade -y >/dev/null
     7  RUN apt-get -qq install -y libleveldb-dev make libc-dev libtool >/dev/null
     8  
     9  ARG SRCDIR=/src/ostracon
    10  
    11  # RocksDB 6.24.2+ is required to build with tm-db 0.6.7 (but RocksDB 7.x is not yet supported).
    12  # librocksdb-dev installed by apt with golang:1.18 is still 6.11, so we have to build it from the latest 6.x sources.
    13  ARG ROCKSDB_VERSION=6.29.5
    14  ARG ROCKSDB_FILE=rocksdb-v${ROCKSDB_VERSION}.tar.gz
    15  ARG ROCKSDB_DIR=rocksdb-${ROCKSDB_VERSION}
    16  RUN wget -O ${ROCKSDB_FILE} https://github.com/facebook/rocksdb/archive/v${ROCKSDB_VERSION}.tar.gz
    17  RUN tar -zxvf ${ROCKSDB_FILE}
    18  RUN cd ${ROCKSDB_DIR} && make -j2 shared_lib && make install-shared
    19  RUN cp /usr/local/lib/librocksdb.so* /usr/lib
    20  RUN rm -rf ${ROCKSDB_FILE} ${ROCKSDB_DIR}
    21  
    22  # Build/Install libsodium separately (for layer caching)
    23  ARG VRF_ROOT=crypto/vrf/internal/vrf
    24  ARG LIBSODIUM_ROOT=${VRF_ROOT}/libsodium
    25  ARG LIBSODIUM_OS=${SRCDIR}/${VRF_ROOT}/sodium/linux_amd64
    26  COPY ${LIBSODIUM_ROOT} ${LIBSODIUM_ROOT}
    27  RUN cd ${LIBSODIUM_ROOT} && \
    28      ./autogen.sh && \
    29      ./configure --disable-shared --prefix="${LIBSODIUM_OS}" && \
    30      make && \
    31      make install
    32  RUN rm -rf ${LIBSODIUM_ROOT}
    33  
    34  ENV OSTRACON_BUILD_OPTIONS badgerdb,boltdb,cleveldb,rocksdb
    35  ENV CGO_LDFLAGS -lrocksdb
    36  ENV LIBSODIUM 1
    37  
    38  # Fetch dependencies separately (for layer caching)
    39  COPY go.mod go.sum ${SRCDIR}
    40  RUN cd ${SRCDIR} && go mod download
    41  
    42  # Build Ostracon and install into /usr/bin/ostracon
    43  COPY . ${SRCDIR}
    44  COPY test/e2e/docker/entrypoint* /usr/bin/
    45  RUN cd ${SRCDIR} && make build && cp build/ostracon /usr/bin/ostracon
    46  RUN cd ${SRCDIR}/test/e2e && make node && cp build/node /usr/bin/app
    47  
    48  # Set up runtime directory. We don't use a separate runtime image since we need
    49  # e.g. leveldb and rocksdb which are already installed in the build image.
    50  WORKDIR /ostracon
    51  VOLUME /ostracon
    52  ENV OCHOME=/ostracon
    53  
    54  EXPOSE 26656 26657 26660 6060
    55  ENTRYPOINT ["/usr/bin/entrypoint"]
    56  CMD ["node"]
    57  STOPSIGNAL SIGTERM