Oops, the container link got mangled, it was supposed to be <
https://github.com/apache/trafficcontrol/pkgs/container/trafficcontrol/ci/trafficserver-alpine
>.

On Tue, Dec 6, 2022 at 9:38 AM Zach Hoffman <zrhoff...@apache.org> wrote:

> in Traffic Control, we build an Alpine image <
> https://github.com/apache/trafficcontrol/pkgs/container/trafficcontrol%2Fci%2Ftrafficserver-alpine>,
> with Traffic Server baked into it, for amd64 and arm64 . Rather than
> building them both from the same machine, the amd64 and arm64 images in
> separate GitHub Actions jobs, then combined using `docker manifest` in a
> third GitHub Actions job <
> https://github.com/apache/trafficcontrol/blob/master/.github/workflows/container-trafficserver-alpine.yml
> >.
>
> The arm64 part still takes much longer (over 2 hours, compare to 10
> minutes for amd64), but this approach eliminates the need to build for more
> than one platform at a time, so if the arm64 job were to run on an arm64
> runner in the future, that wouldn't need to further complicate the other
> jobs in order to take advantage of that speedup.
>
> -Zach
>
> On Tue, Dec 6, 2022 at 9:02 AM Jarek Potiuk <ja...@potiuk.com> wrote:
>
>> In Airflow we have a bit more complex setting (we are building 2x5x2
>> different images and they are different sets of them for different
>> branches), Building images for Airflow takes quite some time (installing
>> many dependencies) so qemu was out of the question (several hours to build
>> single image). Unfortunately qemu is ~ 15 times (!) slower than hardware
>> builds from our experience. Good enough for small images, but unacceptable
>> if your image normally takes time
>>
>> The built-in actions like the one mentioned by Jacob have the limitations
>> that they depende on qemu - I have not yet found an easy "Action" that
>> could utilise AMD and ARM hardware together. But maybe there are other
>> ways.
>>
>> We developed our own scripting and tooling:
>>
>> * we have self-hosted runners in GitHub and we only use those to build
>> images (with Astronomer money and Amazon-sponsored credits on AWS)
>> * for the time when we build multi-platform build we start ARM instances
>> (they have built-in timed auto-kill-switch so that they are not run
>> indefinitely and take resources)
>> * we configured ssh-forwarded docker port from our AMD instance to forward
>> docker socket
>> * we configured two builder with buildx (local for AMD and the forwarded
>> one for ARM)
>> * we run multi-platform buildx build to use both builders.
>> * we have our own Python build/development environment (breeze) that wraps
>> the docker commands that are executed so the "code" doing it is not easy
>> to
>> copy elsewhere sometimes, but I copied below the actual "meat" what
>> happens
>> under the hood.
>> * we run it as part of our Github Action workflows
>>
>> Examples:
>>
>> * Starting ARM instance and configuring builders:
>> https://github.com/apache/airflow/actions/runs/3603432288/jobs/6080260757
>>
>> This is the relevant part of establishing the worker for buildx (I omit
>> starting the instance as it is amazon-specific):
>>
>> export AUTOSSH_LOGFILE="${WORKING_DIR}/autossh.log"
>> autossh -f "-L12357:/var/run/docker.sock" \
>>     -N -o "IdentitiesOnly=yes" -o "StrictHostKeyChecking=no" \
>>     -i "${WORKING_DIR}/my_key" "${EC2_USER}@${INSTANCE_PRIVATE_DNS_NAME}"
>>
>> bash -c 'echo -n "Waiting port 12357 .."; for _ in `seq 1 40`; do echo -n
>> .; sleep 0.25; nc -z localhost 12357 && echo " Open." && exit ; done; echo
>> " Timeout!" >&2; exit 1'
>>
>> docker buildx rm --force airflow_cache || true
>> docker buildx create --name airflow_cache
>> docker buildx create --name airflow_cache --append localhost:12357
>>
>> * Releasing image:
>> https://github.com/apache/airflow/actions/runs/3603432288/jobs/6080260776
>>
>> This is the command that is run under-the-hood
>>
>> docker buildx build --builder airflow_cache --build-arg
>> PYTHON_BASE_IMAGE=python:3.10-slim-bullseye --build-arg
>> AIRFLOW_VERSION=2.5.0 --platform linux/amd64,linux/arm64 . -t
>> apache/airflow:2.5.0-python3.10 --push
>>
>> J.
>>
>>
>>
>> On Tue, Dec 6, 2022 at 2:10 PM Jacob Wujciak
>> <ja...@voltrondata.com.invalid>
>> wrote:
>>
>> > Hello Robert,
>> >
>> > I would suggest using GItHub Actions, there you can use the official
>> suite
>> > of docker actions to build multiplatform images with little need for
>> custom
>> > scripting [1].
>> > Feel free to ping me in the ASF slack.
>> >
>> > Best
>> > Jacob
>> >
>> > [1]: https://github.com/docker/build-push-action
>> >
>> > On Tue, Dec 6, 2022 at 1:43 PM Robert Munteanu <romb...@apache.org>
>> wrote:
>> >
>> > > Hi,
>> > >
>> > > We had a user report that our official Docker image does not support
>> > > architectures other than AMD64 [1]. M1 Macs and Raspberry Pis can't
>> run
>> > > the image with our current setup.
>> > >
>> > > On our side, we set up automated builds on Docker Hub using automated
>> > > builds. Unforunately, Docker Hub autobuilds don't support `docker
>> > > buildx` or another form of multi-arch builds. It is not the roadmap
>> > > though [2], but here is no guarantee on when (or if) it will become
>> > > available.
>> > >
>> > > I see two alternatives so far:
>> > >
>> > > 1. Moving to GitHub actions
>> > > 2. Use hooks to install qemu and 'fake' a multi-arch build on Docker
>> > > Hub
>> > >
>> > > To be honest, none is too appealing to me, we have a simple process
>> > > that works.
>> > >
>> > > How are other projects handling this? Or does anyone have any ideas
>> > > that they can share?
>> > >
>> > > Thanks,
>> > > Robert
>> > >
>> > > [1]: https://issues.apache.org/jira/browse/SLING-11714
>> > > [2]: https://github.com/docker/roadmap/issues/109
>> > >
>> >
>>
>

Reply via email to