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