initial commit
This commit is contained in:
commit
50c06a08bd
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"]
|
17
build.sh
Executable file
17
build.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
MONERO_BRANCH="v0.18.2.0"
|
||||
MONERO_COMMIT_HASH="99be9a044f3854f339548e2d99c539c18d7b1b01"
|
||||
REGISTRY="code.balsillie.net"
|
||||
ORG="containers"
|
||||
IMAGE="monerod"
|
||||
IMAGE_FULL="$REGISTRY/$ORG/$IMAGE"
|
||||
docker build \
|
||||
--pull \
|
||||
-f ./Dockerfile \
|
||||
-t "$IMAGE_FULL:latest" \
|
||||
-t "$IMAGE_FULL:$MONERO_BRANCH" \
|
||||
--build-arg MONERO_BRANCH="$MONERO_BRANCH" \
|
||||
--build-arg MONERO_COMMIT_HASH="$MONERO_COMMIT_HASH" \
|
||||
.
|
||||
docker push -a "$IMAGE_FULL"
|
||||
|
Loading…
Reference in New Issue
Block a user