mirror of
https://github.com/phusion/baseimage-docker.git
synced 2026-03-26 12:29:07 +00:00
Merge pull request #534 from CodeCutterUK/multi-arch-build
Multiarch implementation for amd64, arm64 and arm32
This commit is contained in:
21
.circleci/config.yml
Normal file
21
.circleci/config.yml
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
version: 2
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
machine: true
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
#- run:
|
||||||
|
# name : Getting docker
|
||||||
|
# command: curl https://get.docker.com | sh
|
||||||
|
- run:
|
||||||
|
name: Enabling qemu
|
||||||
|
command: docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
||||||
|
- run:
|
||||||
|
name: Building arm based image.
|
||||||
|
command: docker build -t arm-test .
|
||||||
|
- run:
|
||||||
|
name: Listing built images
|
||||||
|
command: docker images
|
||||||
|
# - run:
|
||||||
|
# name: Running arm based image.
|
||||||
|
# command: docker run --rm arm-test
|
||||||
46
.travis.yml
46
.travis.yml
@@ -1,21 +1,51 @@
|
|||||||
sudo: required
|
sudo: required
|
||||||
|
|
||||||
|
language: c
|
||||||
|
|
||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
packages:
|
||||||
|
- docker-ce
|
||||||
|
- qemu-user-static
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
- NAME=phusion/baseimage
|
|
||||||
# - VERSION=${TRAVIS_TAG}
|
# - VERSION=${TRAVIS_TAG}
|
||||||
- VERSION=${TRAVIS_BRANCH}
|
- VERSION=${TRAVIS_BRANCH}
|
||||||
|
- DOCKER_CLI_EXPERIMENTAL=enabled
|
||||||
|
- QEMU_VERSION=v4.0.0
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
# PLATFORM = Base image architecture to be used
|
||||||
|
# QEMU_ARCH = qemu binary to be downloaded from https://github.com/multiarch/qemu-user-static/releases
|
||||||
|
# TAG_ARCH = Tag to be applied to the image when upload to DockerHub
|
||||||
|
- PLATFORM=amd64 QEMU_ARCH=amd64 TAG_ARCH=amd64
|
||||||
|
- PLATFORM=arm64 QEMU_ARCH=aarch64 TAG_ARCH=arm64
|
||||||
|
- PLATFORM=arm QEMU_ARCH=arm TAG_ARCH=arm
|
||||||
|
|
||||||
|
stage: Compile
|
||||||
|
|
||||||
|
before_script:
|
||||||
|
- echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
|
||||||
|
- sudo service docker restart
|
||||||
|
|
||||||
script:
|
script:
|
||||||
|
- docker login -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}";
|
||||||
- make build test
|
- make build test
|
||||||
|
|
||||||
after_success:
|
- if [[ $TRAVIS_PULL_REQUEST == 'false' ]]; then
|
||||||
- docker login -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}";
|
make release;
|
||||||
docker push ${NAME}:${VERSION};
|
fi
|
||||||
# - if [ "${TRAVIS_BRANCH}" == "master" ]; then
|
|
||||||
# docker tag ${NAME}:${VERSION} ${NAME}:latest
|
jobs:
|
||||||
# docker push ${NAME}:latest;
|
include:
|
||||||
# fi
|
- stage: deploy
|
||||||
|
env:
|
||||||
|
- ARCHS="amd64 arm64 arm"
|
||||||
|
script:
|
||||||
|
- echo $NAME:$VERSION_TAG
|
||||||
|
- echo "$DOCKER_PASSWORD" | docker login --username "$DOCKER_USERNAME" --password-stdin
|
||||||
|
- ./build-multiarch.sh
|
||||||
|
|||||||
33
Makefile
33
Makefile
@@ -1,35 +1,48 @@
|
|||||||
|
VERSION ?= 0.11
|
||||||
ifdef BASE_IMAGE
|
ifdef BASE_IMAGE
|
||||||
BUILD_ARG = --build-arg BASE_IMAGE=$(BASE_IMAGE)
|
BUILD_ARG = --build-arg BASE_IMAGE=$(BASE_IMAGE)
|
||||||
ifndef NAME
|
ifndef NAME
|
||||||
NAME = phusion/baseimage-$(subst :,-,${BASE_IMAGE})
|
NAME = phusion/baseimage-$(subst :,-,${BASE_IMAGE})
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
NAME ?= phusion/baseimage
|
NAME ?= phusion/baseimage
|
||||||
endif
|
endif
|
||||||
VERSION ?= 0.11
|
ifdef TAG_ARCH
|
||||||
|
# VERSION_ARG = $(VERSION)-$(subst /,-,$(subst :,-,${BASE_IMAGE}))-$(TAG_ARCH)
|
||||||
|
VERSION_ARG = $(VERSION)-$(TAG_ARCH)
|
||||||
|
LATEST_VERSION = latest-$(TAG_ARCH)
|
||||||
|
else
|
||||||
|
# VERSION_ARG = $(VERSION)-$(subst /,-,$(subst :,-,${BASE_IMAGE}))
|
||||||
|
VERSION_ARG = $(VERSION)
|
||||||
|
LATEST_VERSION = latest
|
||||||
|
endif
|
||||||
|
VERSION_ARG ?= $(VERSION)
|
||||||
|
|
||||||
.PHONY: all build test tag_latest release ssh
|
.PHONY: all build test tag_latest release ssh
|
||||||
|
|
||||||
all: build
|
all: build
|
||||||
|
|
||||||
build:
|
build:
|
||||||
docker build -t $(NAME):$(VERSION) $(BUILD_ARG) --rm image
|
./build.sh
|
||||||
|
docker build --no-cache -t $(NAME):$(VERSION_ARG) $(BUILD_ARG) --build-arg QEMU_ARCH=$(QEMU_ARCH) --platform $(PLATFORM) --rm image
|
||||||
|
|
||||||
test:
|
test:
|
||||||
env NAME=$(NAME) VERSION=$(VERSION) ./test/runner.sh
|
env NAME=$(NAME) VERSION=$(VERSION_ARG) ./test/runner.sh
|
||||||
|
|
||||||
tag_latest:
|
tag_latest:
|
||||||
docker tag $(NAME):$(VERSION) $(NAME):latest
|
docker tag $(NAME):$(VERSION_ARG) $(NAME):$(LATEST_VERSION)
|
||||||
|
|
||||||
|
tag_multiarch_latest:
|
||||||
|
env TAG_LATEST=true ./build-multiarch.sh
|
||||||
|
|
||||||
release: test tag_latest
|
release: test tag_latest
|
||||||
@if ! docker images $(NAME) | awk '{ print $$2 }' | grep -q -F $(VERSION); then echo "$(NAME) version $(VERSION) is not yet built. Please run 'make build'"; false; fi
|
@if ! docker images $(NAME) | awk '{ print $$2 }' | grep -q -F $(VERSION_ARG); then echo "$(NAME) version $(VERSION_ARG) is not yet built. Please run 'make build'"; false; fi
|
||||||
docker push $(NAME)
|
docker push $(NAME)
|
||||||
@echo "*** Don't forget to create a tag by creating an official GitHub release."
|
@echo "*** Don't forget to create a tag by creating an official GitHub release."
|
||||||
|
|
||||||
ssh: SSH_COMMAND?=
|
ssh: SSH_COMMAND?=
|
||||||
ssh:
|
ssh:
|
||||||
ID=$$(docker ps | grep -F "$(NAME):$(VERSION)" | awk '{ print $$1 }') && \
|
ID=$$(docker ps | grep -F "$(NAME):$(VERSION_ARG)" | awk '{ print $$1 }') && \
|
||||||
if test "$$ID" = ""; then echo "Container is not running."; exit 1; fi && \
|
if test "$$ID" = ""; then echo "Container is not running."; exit 1; fi && \
|
||||||
tools/docker-ssh $$ID ${SSH_COMMAND}
|
tools/docker-ssh $$ID ${SSH_COMMAND}
|
||||||
|
|
||||||
|
|||||||
27
build-multiarch.sh
Executable file
27
build-multiarch.sh
Executable file
@@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
set -x
|
||||||
|
|
||||||
|
if [[ $TRAVIS_PULL_REQUEST == 'false' ]]; then
|
||||||
|
|
||||||
|
for arch in $ARCHS; do
|
||||||
|
echo ${arch}
|
||||||
|
docker pull $NAME:$VERSION-${arch}
|
||||||
|
|
||||||
|
if [[ $TAG_LATEST != 'true' ]]; then
|
||||||
|
docker manifest create --amend $NAME:$VERSION $NAME:$VERSION-${arch}
|
||||||
|
docker manifest annotate $NAME:$VERSION $NAME:$VERSION-${arch} --arch ${arch}
|
||||||
|
else
|
||||||
|
docker manifest create --amend $NAME:latest $NAME:$VERSION-${arch}
|
||||||
|
docker manifest annotate $NAME:latest $NAME:$VERSION-${arch} --arch ${arch}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Push manifests"
|
||||||
|
if [[ $TAG_LATEST != 'true' ]]; then
|
||||||
|
docker manifest push $NAME:$VERSION
|
||||||
|
else
|
||||||
|
docker manifest push $NAME:latest
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
19
build.sh
Executable file
19
build.sh
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# # Prepare qemu
|
||||||
|
# if [ '$QEMU_ARCH' != 'amd64' ]; then
|
||||||
|
# # docker run --rm --privileged multiarch/qemu-user-static:register --reset
|
||||||
|
# fi
|
||||||
|
|
||||||
|
# Get qemu package
|
||||||
|
echo "Getting qemu package for $QEMU_ARCH"
|
||||||
|
|
||||||
|
# Fake qemu for amd64 builds to avoid breaking COPY in Dockerfile
|
||||||
|
if [ $QEMU_ARCH == 'amd64' ]; then
|
||||||
|
touch x86_64_qemu-"$QEMU_ARCH"-static.tar.gz
|
||||||
|
mv x86_64_qemu-${QEMU_ARCH}-static.tar.gz image
|
||||||
|
else
|
||||||
|
curl -L -o x86_64_qemu-"$QEMU_ARCH"-static.tar.gz https://github.com/multiarch/qemu-user-static/releases/download/"$QEMU_VERSION"/x86_64_qemu-"$QEMU_ARCH"-static.tar.gz
|
||||||
|
mv x86_64_qemu-${QEMU_ARCH}-static.tar.gz image
|
||||||
|
fi
|
||||||
@@ -2,6 +2,9 @@ ARG BASE_IMAGE=ubuntu:18.04
|
|||||||
FROM $BASE_IMAGE
|
FROM $BASE_IMAGE
|
||||||
MAINTAINER Phusion <info@phusion.nl>
|
MAINTAINER Phusion <info@phusion.nl>
|
||||||
|
|
||||||
|
ARG QEMU_ARCH
|
||||||
|
ADD x86_64_qemu-${QEMU_ARCH}-static.tar.gz /usr/bin
|
||||||
|
|
||||||
COPY . /bd_build
|
COPY . /bd_build
|
||||||
|
|
||||||
RUN /bd_build/prepare.sh && \
|
RUN /bd_build/prepare.sh && \
|
||||||
|
|||||||
Reference in New Issue
Block a user