Skip to content

Commit af7b15d

Browse files
NicolasDoriershesek
authored andcommitted
Add multi-arch docker images (#63)
1 parent 43e61b3 commit af7b15d

File tree

5 files changed

+126
-20
lines changed

5 files changed

+126
-20
lines changed

.dockerignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@ node_modules
33
sqlite.db
44
dist
55
.git
6+
docker-release.sh
7+
.dockerignore
68
Dockerfile
7-
bin/docker-build.sh
9+
arm32v7.Dockerfile
10+
arm64v8.Dockerfile

arm32v7.Dockerfile

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
FROM node:8.15-slim as builder
2+
3+
ARG STANDALONE
4+
5+
RUN mkdir /opt/local && apt-get update && \
6+
apt-get install -y --no-install-recommends git qemu qemu-user-static qemu-user binfmt-support
7+
8+
WORKDIR /opt/charged
9+
10+
COPY package.json npm-shrinkwrap.json ./
11+
RUN npm install
12+
13+
COPY . .
14+
RUN npm run dist \
15+
&& rm -rf src
16+
17+
FROM arm32v7/node:8.15-slim
18+
19+
WORKDIR /opt/charged
20+
ARG TESTRUNNER
21+
ENV HOME /tmp
22+
ENV NODE_ENV production
23+
ARG STANDALONE
24+
ENV STANDALONE=$STANDALONE
25+
26+
COPY --from=builder /usr/bin/qemu-arm-static /usr/bin/qemu-arm-static
27+
28+
RUN rm -rf /var/lib/apt/lists/* \
29+
&& ln -s /opt/charged/bin/charged /usr/bin/charged \
30+
&& mkdir /data \
31+
&& ln -s /data/lightning /tmp/.lightning
32+
33+
COPY --from=builder /opt/local /usr/local
34+
COPY --from=builder /opt/charged /opt/charged
35+
36+
CMD [ "bin/docker-entrypoint.sh" ]
37+
EXPOSE 9112 9735

arm64v8.Dockerfile

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
FROM node:8.15-slim as builder
2+
3+
ARG STANDALONE
4+
5+
RUN mkdir /opt/local && apt-get update && \
6+
apt-get install -y --no-install-recommends git qemu qemu-user-static qemu-user binfmt-support
7+
8+
WORKDIR /opt/charged
9+
10+
COPY package.json npm-shrinkwrap.json ./
11+
RUN npm install
12+
13+
COPY . .
14+
RUN npm run dist \
15+
&& rm -rf src
16+
17+
FROM arm64v8/node:8.15-slim
18+
19+
WORKDIR /opt/charged
20+
ARG TESTRUNNER
21+
ENV HOME /tmp
22+
ENV NODE_ENV production
23+
ARG STANDALONE
24+
ENV STANDALONE=$STANDALONE
25+
26+
COPY --from=builder /usr/bin/qemu-aarch64-static /usr/bin/qemu-aarch64-static
27+
28+
RUN rm -rf /var/lib/apt/lists/* \
29+
&& ln -s /opt/charged/bin/charged /usr/bin/charged \
30+
&& mkdir /data \
31+
&& ln -s /data/lightning /tmp/.lightning
32+
33+
COPY --from=builder /opt/local /usr/local
34+
COPY --from=builder /opt/charged /opt/charged
35+
36+
CMD [ "bin/docker-entrypoint.sh" ]
37+
EXPOSE 9112 9735

bin/docker-build.sh

Lines changed: 0 additions & 19 deletions
This file was deleted.

release-docker.sh

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/bin/bash
2+
set -xeo pipefail
3+
4+
docker_name=shesek/lightning-charge
5+
version=`node -p 'require("./package").version'`
6+
7+
# Building the arm32v7 image requires registering qemu on the host, which can be done using one of the following:
8+
# sudo apt-get install qemu binfmt-support qemu-user-static
9+
# docker run --rm --privileged multiarch/qemu-user-static:register --reset
10+
11+
docker build -t $docker_name:$version-amd64 .
12+
docker build -t $docker_name:$version-standalone-amd64 --build-arg STANDALONE=1 .
13+
docker build -t $docker_name:$version-standalone-arm32v7 -f arm32v7.Dockerfile .
14+
docker build -t $docker_name:$version-standalone-arm64v8 -f arm64v8.Dockerfile .
15+
16+
# Need to push architecture specific images to make the manifest
17+
docker push $docker_name:$version-standalone-amd64
18+
docker push $docker_name:$version-standalone-arm32v7
19+
docker push $docker_name:$version-standalone-arm64v8
20+
21+
# Tagging a manifest does not work, so we need to create a manifest list for both tags
22+
for target in "$docker_name:$version-standalone" "$docker_name:standalone"
23+
do
24+
# We need to create the multi arch image for -standalone
25+
# Make sure experimental docker cli feature is on: echo "{ \"experimental\": \"enabled\" }" >> $HOME/.docker/config.json
26+
docker manifest create --amend $target $docker_name:$version-standalone-amd64 $docker_name:$version-standalone-arm32v7 $docker_name:$version-standalone-arm64v8
27+
docker manifest annotate $target $docker_name:$version-standalone-amd64 --os linux --arch amd64
28+
docker manifest annotate $target $docker_name:$version-standalone-arm32v7 --os linux --arch arm --variant v7
29+
docker manifest annotate $target $docker_name:$version-standalone-arm64v8 --os linux --arch arm64 --variant v8
30+
docker manifest push $target -p
31+
done
32+
33+
docker push $docker_name:$version-amd64
34+
35+
docker tag $docker_name:$version-standalone-arm32v7 $docker_name:standalone-arm32v7
36+
docker push $docker_name:standalone-arm32v7
37+
38+
docker tag $docker_name:$version-standalone-arm64v8 $docker_name:standalone-arm64v8
39+
docker push $docker_name:standalone-arm64v8
40+
41+
docker tag $docker_name:$version-standalone-amd64 $docker_name:standalone-amd64
42+
docker push $docker_name:standalone-amd64
43+
44+
docker tag $docker_name:$version-amd64 $docker_name:$version
45+
docker push $docker_name:$version
46+
47+
docker tag $docker_name:$version-amd64 $docker_name:latest
48+
docker push $docker_name:latest

0 commit comments

Comments
 (0)