Skip to content

Commit

Permalink
Build infrastructure for multi-architecture docker image
Browse files Browse the repository at this point in the history
  • Loading branch information
Greg Soltis committed Mar 12, 2021
1 parent 9ac8250 commit f935b0d
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 11 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ __pycache__/
/gf
dist/
dbmate
*.whl
13 changes: 2 additions & 11 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,8 @@

set -e

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"

PACKAGE=`basename $DIR`

echo "Building package ${PACKAGE}"

pipenv lock -r > requirements.txt

INTROSPECTOR_DOCKER_REPO=${DOCKER_REPO:-goldfig}
IMAGE="${INTROSPECTOR_DOCKER_REPO}/${PACKAGE}"
DOCKER_BUILDKIT=1 docker build --platform linux/amd64 -t ${IMAGE} .
echo "Building images"
docker/build.sh

echo "Building launcher"
launcher/build.sh
Expand Down
3 changes: 3 additions & 0 deletions docker/BuildWheelDockerFile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
FROM python:3.9-buster

RUN pip install psycopg2-binary
File renamed without changes.
17 changes: 17 additions & 0 deletions docker/Dockerfile-arm
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
FROM python:3.9-slim

ADD https://github.com/amacneil/dbmate/releases/download/v1.11.0/dbmate-linux-arm64 /app/dbmate
RUN chmod a+x /app/dbmate
RUN apt-get update && apt-get install -y libpq-dev
COPY requirements.txt /app/
COPY migrations /app/migrations
WORKDIR /app/
RUN pip install -r requirements.txt
COPY psycopg2_binary-2.8.6-cp39-cp39-linux_aarch64.whl /app/
RUN pip install /app/psycopg2_binary-2.8.6-cp39-cp39-linux_aarch64.whl
EXPOSE 5000/tcp
COPY introspector.py /app/
COPY introspector /app/introspector
LABEL introspector-cli=0.0.1

ENTRYPOINT ["/app/introspector.py", "serve"]
5 changes: 5 additions & 0 deletions docker/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
set -e

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
${DIR}/build_arm.sh introspector
${DIR}/build_amd.sh introspector
11 changes: 11 additions & 0 deletions docker/build_amd.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
set -e

PACKAGE=$1

echo "Building package ${PACKAGE}"

pipenv lock -r > requirements.txt

INTROSPECTOR_DOCKER_REPO=${DOCKER_REPO:-goldfig}
IMAGE="${INTROSPECTOR_DOCKER_REPO}/${PACKAGE}:amd64-latest"
DOCKER_BUILDKIT=1 docker build --platform linux/amd64 -t ${IMAGE} -f docker/Dockerfile-amd .
31 changes: 31 additions & 0 deletions docker/build_arm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash

set -e

PACKAGE=$1

export DOCKER_BUILDKIT=1
WHEEL_TAG=goldfig/tempbuildwheel:latest
docker build --platform linux/arm64 -f docker/BuildWheelDockerFile -t $WHEEL_TAG .

CONTAINER_ID=$(docker run -t -d --rm $WHEEL_TAG)
echo "Container ID $CONTAINER_ID"
WHEEL_FILE=$(docker exec $CONTAINER_ID /usr/local/bin/pip cache list --format abspath)
echo "Wheel file $WHEEL_FILE"
LOCAL_WHEEL=psycopg2_binary-2.8.6-cp39-cp39-linux_aarch64.whl
docker cp $CONTAINER_ID:$WHEEL_FILE $LOCAL_WHEEL
docker stop $CONTAINER_ID

#PACKAGE=`basename $DIR`

echo "Building package ${PACKAGE}"

pipenv lock -r > requirements.tmp
sed '/psycopg2-binary.*/d' requirements.tmp > requirements.txt
rm requirements.tmp

INTROSPECTOR_DOCKER_REPO=${DOCKER_REPO:-goldfig}
IMAGE="${INTROSPECTOR_DOCKER_REPO}/${PACKAGE}:arm64-latest"
DOCKER_BUILDKIT=1 docker build -f docker/Dockerfile-arm --platform linux/arm64 -t ${IMAGE} .

echo "Built ${IMAGE}"

0 comments on commit f935b0d

Please sign in to comment.