initial commit
This commit is contained in:
		
							
								
								
									
										174
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										174
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,174 @@
 | 
			
		||||
# Initial base from https://github.com/leonardochaia/docker-monerod/blob/master/src/Dockerfile
 | 
			
		||||
# Alpine specifics from https://github.com/cornfeedhobo/docker-monero/blob/f96711415f97af1fc9364977d1f5f5ecd313aad0/Dockerfile
 | 
			
		||||
 | 
			
		||||
# Set Monero branch or tag to build
 | 
			
		||||
ARG MONERO_BRANCH
 | 
			
		||||
 | 
			
		||||
# Set the proper HEAD commit hash for the given branch/tag in MONERO_BRANCH
 | 
			
		||||
ARG MONERO_COMMIT_HASH
 | 
			
		||||
 | 
			
		||||
# Select Alpine 3.x for the build image base
 | 
			
		||||
FROM alpine:3.16 as build
 | 
			
		||||
 | 
			
		||||
# Upgrade base image
 | 
			
		||||
RUN set -ex && apk --update --no-cache upgrade
 | 
			
		||||
 | 
			
		||||
# Install all dependencies for a static build
 | 
			
		||||
RUN set -ex && apk add --update --no-cache \
 | 
			
		||||
    autoconf \
 | 
			
		||||
    automake \
 | 
			
		||||
    boost \
 | 
			
		||||
    boost-atomic \
 | 
			
		||||
    boost-build \
 | 
			
		||||
    boost-build-doc \
 | 
			
		||||
    boost-chrono \
 | 
			
		||||
    boost-container \
 | 
			
		||||
    boost-context \
 | 
			
		||||
    boost-contract \
 | 
			
		||||
    boost-coroutine \
 | 
			
		||||
    boost-date_time \
 | 
			
		||||
    boost-dev \
 | 
			
		||||
    boost-doc \
 | 
			
		||||
    boost-fiber \
 | 
			
		||||
    boost-filesystem \
 | 
			
		||||
    boost-graph \
 | 
			
		||||
    boost-iostreams \
 | 
			
		||||
    boost-libs \
 | 
			
		||||
    boost-locale \
 | 
			
		||||
    boost-log \
 | 
			
		||||
    boost-log_setup \
 | 
			
		||||
    boost-math \
 | 
			
		||||
    boost-prg_exec_monitor \
 | 
			
		||||
    boost-program_options \
 | 
			
		||||
    boost-python3 \
 | 
			
		||||
    boost-random \
 | 
			
		||||
    boost-regex \
 | 
			
		||||
    boost-serialization \
 | 
			
		||||
    boost-stacktrace_basic \
 | 
			
		||||
    boost-stacktrace_noop \
 | 
			
		||||
    boost-static \
 | 
			
		||||
    boost-system \
 | 
			
		||||
    boost-thread \
 | 
			
		||||
    boost-timer \
 | 
			
		||||
    boost-type_erasure \
 | 
			
		||||
    boost-unit_test_framework \
 | 
			
		||||
    boost-wave \
 | 
			
		||||
    boost-wserialization \
 | 
			
		||||
    ca-certificates \
 | 
			
		||||
    cmake \
 | 
			
		||||
    curl \
 | 
			
		||||
    dev86 \
 | 
			
		||||
    doxygen \
 | 
			
		||||
    eudev-dev \
 | 
			
		||||
    file \
 | 
			
		||||
    g++ \
 | 
			
		||||
    git \
 | 
			
		||||
    graphviz \
 | 
			
		||||
    libexecinfo-dev \
 | 
			
		||||
    libsodium-dev \
 | 
			
		||||
    libtool \
 | 
			
		||||
    libusb-dev \
 | 
			
		||||
    linux-headers \
 | 
			
		||||
    make \
 | 
			
		||||
    miniupnpc-dev \
 | 
			
		||||
    ncurses-dev \
 | 
			
		||||
    openssl-dev \
 | 
			
		||||
    pcsc-lite-dev \
 | 
			
		||||
    pkgconf \
 | 
			
		||||
    protobuf-dev \
 | 
			
		||||
    rapidjson-dev \
 | 
			
		||||
    readline-dev \
 | 
			
		||||
    zeromq-dev
 | 
			
		||||
 | 
			
		||||
# Set necessary args and environment variables for building Monero
 | 
			
		||||
ARG MONERO_BRANCH
 | 
			
		||||
ARG MONERO_COMMIT_HASH
 | 
			
		||||
ARG NPROC
 | 
			
		||||
ARG TARGETARCH
 | 
			
		||||
ENV CFLAGS='-fPIC'
 | 
			
		||||
ENV CXXFLAGS='-fPIC -DELPP_FEATURE_CRASH_LOG'
 | 
			
		||||
ENV USE_SINGLE_BUILDDIR 1
 | 
			
		||||
ENV BOOST_DEBUG         1
 | 
			
		||||
 | 
			
		||||
# Build expat, a dependency for libunbound
 | 
			
		||||
RUN set -ex && wget https://github.com/libexpat/libexpat/releases/download/R_2_4_8/expat-2.4.8.tar.bz2 && \
 | 
			
		||||
    echo "a247a7f6bbb21cf2ca81ea4cbb916bfb9717ca523631675f99b3d4a5678dcd16  expat-2.4.8.tar.bz2" | sha256sum -c && \
 | 
			
		||||
    tar -xf expat-2.4.8.tar.bz2 && \
 | 
			
		||||
    rm expat-2.4.8.tar.bz2 && \
 | 
			
		||||
    cd expat-2.4.8 && \
 | 
			
		||||
    ./configure --enable-static --disable-shared --prefix=/usr && \
 | 
			
		||||
    make -j${NPROC:-$(nproc)} && \
 | 
			
		||||
    make -j${NPROC:-$(nproc)} install
 | 
			
		||||
 | 
			
		||||
# Build libunbound for static builds
 | 
			
		||||
WORKDIR /tmp
 | 
			
		||||
RUN set -ex && wget https://www.nlnetlabs.nl/downloads/unbound/unbound-1.16.1.tar.gz && \
 | 
			
		||||
    echo "2fe4762abccd564a0738d5d502f57ead273e681e92d50d7fba32d11103174e9a  unbound-1.16.1.tar.gz" | sha256sum -c && \
 | 
			
		||||
    tar -xzf unbound-1.16.1.tar.gz && \
 | 
			
		||||
    rm unbound-1.16.1.tar.gz && \
 | 
			
		||||
    cd unbound-1.16.1 && \
 | 
			
		||||
    ./configure --disable-shared --enable-static --without-pyunbound --with-libexpat=/usr --with-ssl=/usr --with-libevent=no --without-pythonmodule --disable-flto --with-pthreads --with-libunbound-only --with-pic && \
 | 
			
		||||
    make -j${NPROC:-$(nproc)} && \
 | 
			
		||||
    make -j${NPROC:-$(nproc)} install
 | 
			
		||||
 | 
			
		||||
# Switch to Monero source directory
 | 
			
		||||
WORKDIR /monero
 | 
			
		||||
 | 
			
		||||
# Git pull Monero source at specified tag/branch and compile statically-linked monerod binary
 | 
			
		||||
RUN set -ex && git clone --recursive --branch ${MONERO_BRANCH} \
 | 
			
		||||
    --depth 1 --shallow-submodules \
 | 
			
		||||
    https://github.com/monero-project/monero . \
 | 
			
		||||
    && test `git rev-parse HEAD` = ${MONERO_COMMIT_HASH} || exit 1 \
 | 
			
		||||
    && case ${TARGETARCH:-amd64} in \
 | 
			
		||||
        "arm64") CMAKE_ARCH="armv8-a"; CMAKE_BUILD_TAG="linux-armv8" ;; \
 | 
			
		||||
        "amd64") CMAKE_ARCH="x86-64"; CMAKE_BUILD_TAG="linux-x64" ;; \
 | 
			
		||||
        *) echo "Dockerfile does not support this platform"; exit 1 ;; \
 | 
			
		||||
    esac \
 | 
			
		||||
    && mkdir -p build/release && cd build/release \
 | 
			
		||||
    && cmake -D ARCH=${CMAKE_ARCH} -D STATIC=ON -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG=${CMAKE_BUILD_TAG} ../.. \
 | 
			
		||||
    && cd /monero && nice -n 19 ionice -c2 -n7 make -j${NPROC:-$(nproc)} -C build/release daemon
 | 
			
		||||
 | 
			
		||||
# Begin final image build
 | 
			
		||||
# Select Alpine 3.x for the base image
 | 
			
		||||
FROM alpine:3.16
 | 
			
		||||
 | 
			
		||||
# Upgrade base image
 | 
			
		||||
RUN set -ex && apk --update --no-cache upgrade
 | 
			
		||||
 | 
			
		||||
# Install all dependencies for static binaries + curl for healthcheck
 | 
			
		||||
RUN set -ex && apk add --update --no-cache \
 | 
			
		||||
    curl \
 | 
			
		||||
    ca-certificates \
 | 
			
		||||
    libexecinfo \
 | 
			
		||||
    libsodium \
 | 
			
		||||
    ncurses-libs \
 | 
			
		||||
    pcsc-lite-libs \
 | 
			
		||||
    readline \
 | 
			
		||||
    tzdata \
 | 
			
		||||
    zeromq
 | 
			
		||||
 | 
			
		||||
# Add user and setup directories for monerod
 | 
			
		||||
RUN set -ex && \
 | 
			
		||||
    adduser -u 1000 -Ds /bin/bash monero && \
 | 
			
		||||
    mkdir -p /home/monero/.bitmonero && \
 | 
			
		||||
    chown -R monero:monero /home/monero/.bitmonero
 | 
			
		||||
USER monero
 | 
			
		||||
 | 
			
		||||
# Add the built monerod binary
 | 
			
		||||
COPY --chown=monero:monero --from=build /monero/build/release/bin/monerod /usr/local/bin/monerod
 | 
			
		||||
 | 
			
		||||
# Switch to home directory
 | 
			
		||||
WORKDIR /home/monero
 | 
			
		||||
 | 
			
		||||
# Expose p2p port
 | 
			
		||||
EXPOSE 18080
 | 
			
		||||
 | 
			
		||||
# Expose RPC port
 | 
			
		||||
EXPOSE 18081
 | 
			
		||||
 | 
			
		||||
# Add HEALTHCHECK against get_info endpoint
 | 
			
		||||
HEALTHCHECK --interval=30s --timeout=5s CMD curl --fail http://localhost:18081/get_info || exit 1
 | 
			
		||||
 | 
			
		||||
# Start monerod with required --non-interactive flag and sane defaults that are overridden by user input (if applicable)
 | 
			
		||||
ENTRYPOINT ["monerod"]
 | 
			
		||||
CMD ["--rpc-restricted-bind-ip=0.0.0.0", "--rpc-restricted-bind-port=18089", "--no-igd", "--no-zmq", "--enable-dns-blocklist"]
 | 
			
		||||
		Reference in New Issue
	
	Block a user