Сборка контейнеров Docker под несколько платформ

Сборка Docker контейнера под разные платформы

1) Добавьте в конфиг строчку ~/.docker/config.json

"experimental": "enabled"

2) Установите QEMU

apt-get update
apt-get install -y qemu qemu-user-static binfmt-support
update-binfmts --enable qemu-arm
update-binfmts --display qemu-arm

3) Зарегистрируйте QEMU

docker run --rm --privileged multiarch/qemu-user-static --reset -p yes

4) Создайте простой Dockerfile

ARG ARCH=
FROM ${ARCH}alpine:3.11

RUN cd ~; \
	echo "" > /etc/apk/repositories; \
	echo "https://mirror.yandex.ru/mirrors/alpine/v3.11/main" >> /etc/apk/repositories; \
	echo "https://mirror.yandex.ru/mirrors/alpine/v3.11/community" >> /etc/apk/repositories; \
	apk update; \
	apk add bash nano mc wget grep; \
	rm -rf /var/cache/apk/*; \
	echo "export EDITOR=nano" > /etc/profile.d/editor_nano; \
	echo "Ok"

5) Соберите контейнер. Вместо user должно стоять ваш репозиторий

docker build ./ -t user/alpine_test:7.3-amd64 --file Dockerfile --build-arg ARCH=amd64/
docker build ./ -t user/alpine_test:7.3-arm32v7 --file Dockerfile --build-arg ARCH=arm32v7/
docker push user/alpine_test:7.3-amd64
docker push user/alpine_test:7.3-arm32v7

6) Создайте манифест

docker manifest create user/alpine_test:7.3 \
  --amend user/alpine_test:7.3-amd64 \
  --amend user/alpine_test:7.3-arm32v7
docker manifest push user/alpine_test:7.3