Using alpine-glibc-base base image

This commit is contained in:
kexkey
2019-05-14 16:13:08 -04:00
parent 5a31fc6c96
commit 8d36466da8
8 changed files with 80 additions and 221 deletions

View File

@@ -2,7 +2,7 @@
TRACING=1
# CYPHERNODE VERSION "v0.1.1"
# CYPHERNODE VERSION "v0.2.0"
CONF_VERSION="v0.2.0-local"
GATEKEEPER_VERSION="v0.2.0-local"
PROXY_VERSION="v0.2.0-local"
@@ -27,53 +27,18 @@ trace_rc()
fi
}
build_docker_image() {
local dockerfile="Dockerfile"
if [[ ""$3 != "" ]]; then
dockerfile=$3
fi
trace "building docker image: $2"
#docker build -q $1 -f $1/$dockerfile -t $2:latest > /dev/null
docker build $1 -f $1/$dockerfile -t $2
}
build_docker_images() {
trace "Updating SatoshiPortal repos"
# git submodule update --recursive --remote
local bitcoin_dockerfile=Dockerfile.amd64
local clightning_dockerfile=Dockerfile.amd64
local proxy_dockerfile=Dockerfile.amd64
local grafana_dockerfile=Dockerfile.amd64
# compat mode for SatoshiPortal repo
# TODO: add more mappings?
if [[ $(uname -m) == 'armv7l' ]]; then
bitcoin_dockerfile="Dockerfile.arm32v6"
clightning_dockerfile="Dockerfile.arm32v6"
proxy_dockerfile="Dockerfile.arm32v6"
grafana_dockerfile="Dockerfile.arm32v6"
fi
trace "Creating cyphernodeconf image"
build_docker_image install/ cyphernode/cyphernodeconf:$CONF_VERSION
trace "Creating SatoshiPortal images"
# build_docker_image install/SatoshiPortal/dockers/bitcoin-core cyphernode/bitcoin:$BITCOIN_VERSION $bitcoin_dockerfile
# build_docker_image install/SatoshiPortal/dockers/c-lightning cyphernode/clightning:$LIGHTNING_VERSION $clightning_dockerfile
docker build install/ -t cyphernode/cyphernodeconf:$CONF_VERSION
trace "Creating cyphernode images"
build_docker_image api_auth_docker/ cyphernode/gatekeeper:$GATEKEEPER_VERSION
build_docker_image proxy_docker/ cyphernode/proxy:$PROXY_VERSION $proxy_dockerfile
build_docker_image cron_docker/ cyphernode/proxycron:$PROXYCRON_VERSION
build_docker_image pycoin_docker/ cyphernode/pycoin:$PYCOIN_VERSION
build_docker_image otsclient_docker/ cyphernode/otsclient:$OTSCLIENT_VERSION
docker build api_auth_docker/ -t cyphernode/gatekeeper:$GATEKEEPER_VERSION
docker build proxy_docker/ -t cyphernode/proxy:$PROXY_VERSION
docker build cron_docker/ -t cyphernode/proxycron:$PROXYCRON_VERSION
docker build pycoin_docker/ -t cyphernode/pycoin:$PYCOIN_VERSION
docker build otsclient_docker/ -t cyphernode/otsclient:$OTSCLIENT_VERSION
}
build_docker_images

16
dist/setup.sh vendored
View File

@@ -711,14 +711,14 @@ AUTOSTART=0
# CYPHERNODE VERSION "v0.1.1"
VERSION_OVERRIDE="true"
CONF_VERSION="v0.2.0"
GATEKEEPER_VERSION="v0.2.0"
PROXY_VERSION="v0.2.0"
PROXYCRON_VERSION="v0.2.0"
OTSCLIENT_VERSION="v0.2.0"
PYCOIN_VERSION="v0.2.0"
BITCOIN_VERSION="v0.17.1"
LIGHTNING_VERSION="v0.7.0"
CONF_VERSION="v0.2.0-test"
GATEKEEPER_VERSION="v0.2.0-test"
PROXY_VERSION="v0.2.0-test"
PROXYCRON_VERSION="v0.2.0-test"
OTSCLIENT_VERSION="v0.2.0-test"
PYCOIN_VERSION="v0.2.0-test"
BITCOIN_VERSION="v0.17.1-test"
LIGHTNING_VERSION="v0.7.0-test"
SETUP_DIR=$(dirname $(realpath $0))

View File

@@ -10,14 +10,13 @@ image() {
local image=$1
local dir=$2
local arch=$3
local dockerfile=${4:-"Dockerfile"}
echo "Building and pushing $image from $dir for $arch using $dockerfile tagging as $v1, $v2 and $v3..."
docker build -t cyphernode/${image}:${arch}-${v3} -t cyphernode/${image}:${arch}-${v2} -t cyphernode/${image}:${arch}-${v1} -f ${dir}/${dockerfile} ${dir}/. \
&& docker push cyphernode/${image}:${arch}-${v3} \
&& docker push cyphernode/${image}:${arch}-${v2} \
&& docker push cyphernode/${image}:${arch}-${v1}
docker build -t cyphernode/${image}:${arch}-${v3} -t cyphernode/${image}:${arch}-${v2} -t cyphernode/${image}:${arch}-${v1} ${dir}/. \
&& docker push cyphernode/${image}:${arch}-${v3} \
&& docker push cyphernode/${image}:${arch}-${v2} \
&& docker push cyphernode/${image}:${arch}-${v1}
return $?
}
@@ -27,86 +26,64 @@ manifest() {
echo "Creating and pushing manifest for $image for version $v3..."
docker manifest create cyphernode/${image}:${v3} cyphernode/${image}:${arm}-${v3} cyphernode/${image}:${x86}-${v3} \
&& docker manifest annotate cyphernode/${image}:${v3} cyphernode/${image}:${arm}-${v3} --os linux --arch arm \
&& docker manifest annotate cyphernode/${image}:${v3} cyphernode/${image}:${x86}-${v3} --os linux --arch amd64 \
&& docker manifest push -p cyphernode/${image}:${v3}
docker manifest create cyphernode/${image}:${v3} cyphernode/${image}:${arm_docker}-${v3} cyphernode/${image}:${x86_docker}-${v3} cyphernode/${image}:${aarch64_docker}-${v3} \
&& docker manifest annotate cyphernode/${image}:${v3} cyphernode/${image}:${arm_docker}-${v3} --os linux --arch ${arm_docker} \
&& docker manifest annotate cyphernode/${image}:${v3} cyphernode/${image}:${x86_docker}-${v3} --os linux --arch ${x86_docker} \
&& docker manifest annotate cyphernode/${image}:${v3} cyphernode/${image}:${aarch64_docker}-${v3} --os linux --arch ${aarch64_docker} \
&& docker manifest push -p cyphernode/${image}:${v3}
[ $? -ne 0 ] && return 1
echo "Creating and pushing manifest for $image for version $v2..."
docker manifest create cyphernode/${image}:${v2} cyphernode/${image}:${arm}-${v2} cyphernode/${image}:${x86}-${v2} \
&& docker manifest annotate cyphernode/${image}:${v2} cyphernode/${image}:${arm}-${v2} --os linux --arch arm \
&& docker manifest annotate cyphernode/${image}:${v2} cyphernode/${image}:${x86}-${v2} --os linux --arch amd64 \
&& docker manifest push -p cyphernode/${image}:${v2}
docker manifest create cyphernode/${image}:${v2} cyphernode/${image}:${arm_docker}-${v2} cyphernode/${image}:${x86_docker}-${v2} cyphernode/${image}:${aarch64_docker}-${v2} \
&& docker manifest annotate cyphernode/${image}:${v2} cyphernode/${image}:${arm_docker}-${v2} --os linux --arch ${arm_docker} \
&& docker manifest annotate cyphernode/${image}:${v2} cyphernode/${image}:${x86_docker}-${v2} --os linux --arch ${x86_docker} \
&& docker manifest annotate cyphernode/${image}:${v2} cyphernode/${image}:${aarch64_docker}-${v2} --os linux --arch ${aarch64_docker} \
&& docker manifest push -p cyphernode/${image}:${v2}
[ $? -ne 0 ] && return 1
echo "Creating and pushing manifest for $image for version $v1..."
docker manifest create cyphernode/${image}:${v1} cyphernode/${image}:${arm}-${v1} cyphernode/${image}:${x86}-${v1} \
&& docker manifest annotate cyphernode/${image}:${v1} cyphernode/${image}:${arm}-${v1} --os linux --arch arm \
&& docker manifest annotate cyphernode/${image}:${v1} cyphernode/${image}:${x86}-${v1} --os linux --arch amd64 \
&& docker manifest push -p cyphernode/${image}:${v1}
docker manifest create cyphernode/${image}:${v1} cyphernode/${image}:${arm_docker}-${v1} cyphernode/${image}:${x86_docker}-${v1} cyphernode/${image}:${aarch64_docker}-${v1} \
&& docker manifest annotate cyphernode/${image}:${v1} cyphernode/${image}:${arm_docker}-${v1} --os linux --arch ${arm_docker} \
&& docker manifest annotate cyphernode/${image}:${v1} cyphernode/${image}:${x86_docker}-${v1} --os linux --arch ${x86_docker} \
&& docker manifest annotate cyphernode/${image}:${v1} cyphernode/${image}:${aarch64_docker}-${v1} --os linux --arch ${aarch64_docker} \
&& docker manifest push -p cyphernode/${image}:${v1}
return $?
}
image_dockers() {
local image=$1
local dir=$2
local v=$3
local arch=$4
local dockerfile=${5:-"Dockerfile"}
x86_docker="amd64"
arm_docker="arm"
aarch64_docker="arm64"
echo "Building and pushing $image from $dir for $arch using $dockerfile tagging as $v..."
# Build amd64 and arm64 first, building for arm will trigger the manifest creation and push on hub
docker build -t cyphernode/${image}:${arch}-${v} -f ${dir}/${dockerfile} ${dir}/. \
&& docker push cyphernode/${image}:${arch}-${v}
#arch_docker=${arm_docker}
#arch_docker=${aarch64_docker}
arch_docker=${x86_docker}
return $?
v1="v0-test"
v2="v0.2-test"
v3="v0.2.0-test"
}
echo "\nBuilding Cyphernode Core containers\n"
echo "arch_docker=$arch_docker\n"
manifest_dockers() {
local image=$1
local v=$2
echo "Creating and pushing manifest for $image for version $v..."
docker manifest create cyphernode/${image}:${v} cyphernode/${image}:${arm}-${v} cyphernode/${image}:${x86}-${v} \
&& docker manifest annotate cyphernode/${image}:${v} cyphernode/${image}:${arm}-${v} --os linux --arch arm \
&& docker manifest annotate cyphernode/${image}:${v} cyphernode/${image}:${x86}-${v} --os linux --arch amd64 \
&& docker manifest push -p cyphernode/${image}:${v}
return $?
}
x86="amd64"
arm="arm32v6"
#arch=${arm}
arch=${x86}
v1="v0"
v2="v0.2"
v3="v0.2.0"
echo "arch=$arch"
image "gatekeeper" "api_auth_docker/" ${arch} \
&& image "proxycron" "cron_docker/" ${arch} \
&& image "otsclient" "otsclient_docker/" ${arch} \
&& image "proxy" "proxy_docker/" ${arch} "Dockerfile.${arch}" \
&& image "pycoin" "pycoin_docker/" ${arch} \
&& image "cyphernodeconf" "install/" ${arch}
image "gatekeeper" "api_auth_docker/" ${arch_docker} \
&& image "proxycron" "cron_docker/" ${arch_docker} \
&& image "otsclient" "otsclient_docker/" ${arch_docker} \
&& image "proxy" "proxy_docker/" ${arch_docker} \
&& image "pycoin" "pycoin_docker/" ${arch_docker} \
&& image "cyphernodeconf" "install/" ${arch_docker}
[ $? -ne 0 ] && echo "Error" && exit 1
[ "${arch}" = "${x86}" ] && echo "Built and pushed amd64 only" && exit 0
[ "${arch_docker}" = "${x86_docker}" ] && echo "Built and pushed ${arch_docker} only" && exit 0
[ "${arch_docker}" = "${aarch64_docker}" ] && echo "Built and pushed ${arch_docker} only" && exit 0
[ "${arch_docker}" = "${arm_docker}" ] && echo "Built and pushed images, now building and pushing manifest for all archs..."
manifest "gatekeeper" \
&& manifest "proxycron" \
@@ -117,20 +94,3 @@ manifest "gatekeeper" \
[ $? -ne 0 ] && echo "Error" && exit 1
image_dockers "clightning" "../dockers/c-lightning" "v0.7.0" ${arch} "Dockerfile.${arch}" \
&& image_dockers "bitcoin" "../dockers/bitcoin-core" "v0.17.1" ${arch} "Dockerfile.${arch}" \
&& image_dockers "app_welcome" "../cyphernode_welcome" "${v3}" ${arch} \
&& image_dockers "app_welcome" "../cyphernode_welcome" "${v2}" ${arch} \
&& image_dockers "app_welcome" "../cyphernode_welcome" "${v1}" ${arch} \
&& image_dockers "sparkwallet" "../spark-wallet" "v0.2.5" ${arch} "Dockerfile-cyphernode"
[ $? -ne 0 ] && echo "Error" && exit 1
manifest_dockers "clightning" "v0.7.0" \
&& manifest_dockers "bitcoin" "v0.17.1" \
&& manifest_dockers "app_welcome" "${v3}" \
&& manifest_dockers "app_welcome" "${v2}" \
&& manifest_dockers "app_welcome" "${v1}" \
&& manifest_dockers "sparkwallet" "v0.2.5"
[ $? -ne 0 ] && echo "Error" && exit 1

View File

@@ -5,7 +5,8 @@ RUN mkdir -p /app
RUN mkdir /.config
RUN chmod a+rwx /.config
RUN npm install -g yo
# Workaround for https://github.com/npm/uid-number/issues/3
RUN NPM_CONFIG_UNSAFE_PERM=true npm install -g yo
COPY generator-cyphernode /app
WORKDIR /app/generator-cyphernode
RUN npm link

23
proxy_docker/Dockerfile Normal file
View File

@@ -0,0 +1,23 @@
FROM cyphernode/alpine-glibc-base:3.8
ENV HOME /proxy
RUN apk add --update --no-cache \
sqlite \
jq \
curl \
su-exec
WORKDIR ${HOME}
COPY app/data/* ./
COPY app/script/* ./
COPY --from=cyphernode/clightning:v0.7.0-test /usr/local/bin/lightning-cli ./
RUN chmod +x startproxy.sh requesthandler.sh lightning-cli sqlmigrate*.sh waitanyinvoice.sh \
&& chmod o+w . \
&& mkdir db
VOLUME ["${HOME}/db", "/.lightning"]
ENTRYPOINT ["su-exec"]

View File

@@ -1,39 +0,0 @@
FROM alpine:3.8
# Taking care of glibc shit (glibc not natively supported by Alpine but lightning-cli uses it)
ENV GLIBC_VERSION 2.27-r0
ENV GLIBC_SHA256 938bceae3b83c53e7fa9cc4135ce45e04aae99256c5e74cf186c794b97473bc7
ENV GLIBCBIN_SHA256 3a87874e57b9d92e223f3e90356aaea994af67fb76b71bb72abfb809e948d0d6
# Download and install glibc (https://github.com/jeanblanchard/docker-alpine-glibc/blob/master/Dockerfile)
RUN wget -O /etc/apk/keys/sgerrand.rsa.pub https://github.com/sgerrand/alpine-pkg-glibc/releases/download/$GLIBC_VERSION/sgerrand.rsa.pub \
&& wget -O glibc.apk "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk" \
&& echo "$GLIBC_SHA256 glibc.apk" | sha256sum -c - \
&& wget -O glibc-bin.apk "https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk" \
&& echo "$GLIBCBIN_SHA256 glibc-bin.apk" | sha256sum -c - \
&& apk add --update --no-cache glibc-bin.apk glibc.apk \
&& /usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib \
&& echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf \
&& rm -rf glibc.apk glibc-bin.apk
ENV HOME /proxy
RUN apk add --update --no-cache \
sqlite \
jq \
curl \
su-exec
WORKDIR ${HOME}
COPY app/data/* ./
COPY app/script/* ./
COPY --from=cyphernode/clightning:v0.7.0 /usr/local/bin/lightning-cli ./
RUN chmod +x startproxy.sh requesthandler.sh lightning-cli sqlmigrate*.sh waitanyinvoice.sh \
&& chmod o+w . \
&& mkdir db
VOLUME ["${HOME}/db", "/.lightning"]
ENTRYPOINT ["su-exec"]

View File

@@ -1,35 +0,0 @@
FROM alpine:3.8
# Taking care of glibc shit (glibc not natively supported by Alpine but lightning-cli uses it)
ENV GLIBC_VERSION 2.27-r0
# Download and install glibc (https://github.com/jeanblanchard/docker-alpine-glibc/blob/master/Dockerfile)
RUN apk add --update --no-cache wget \
&& wget -O glibc.apk "https://github.com/yangxuan8282/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk" \
&& wget -O glibc-bin.apk "https://github.com/yangxuan8282/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk" \
&& apk add --allow-untrusted --update --no-cache glibc-bin.apk glibc.apk \
&& /usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib \
&& echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf \
&& rm -rf glibc.apk glibc-bin.apk
ENV HOME /proxy
RUN apk add --update --no-cache \
sqlite \
jq \
curl \
su-exec
WORKDIR ${HOME}
COPY app/data/* ./
COPY app/script/* ./
COPY --from=cyphernode/clightning:v0.7.0 /usr/local/bin/lightning-cli ./
RUN chmod +x startproxy.sh requesthandler.sh lightning-cli sqlmigrate*.sh waitanyinvoice.sh \
&& chmod o+w . \
&& mkdir db
VOLUME ["${HOME}/db", "/.lightning"]
ENTRYPOINT ["su-exec"]

View File

@@ -48,22 +48,6 @@ OTS_FILES=/proxy/otsfiles
XPUB_DERIVATION_GAP=100
```
## Choose the right architecture
...by modifying the following line in Dockerfile:
```shell
COPY app/bin/lightning-cli_x86 ${HOME}/lightning-cli
```
...to lightning-cli_arm if running on a RPi.
## Building docker image
```shell
docker build -t btcproxyimg .
```
## Create sqlite3 database path and give rights
```shell