[Product Launch] ARM + Docker - Generally Available

@Jthomas I don’t not have any benchmarks unfortunately. However, in general, we see faster execution time for jobs using a Docker executor vs. a machine executor when one of two conditions are true:

  1. a convenience image is used. Convenience images are more likely to have layers already be cached on the host on which your job is running which reduces the need to pull all layers from scratch which can be slow.
  2. A custom docker image is used. This lets you bundle your dependencies and any other relevant code into the image itself instead of having to spend time at the beginning of pulling those items down at the start of a job.

It is not possible to run Docker with ARM even with the version: default. I am getting:

“Job was rejected because this version of Docker is not supported on this resource class. Try removing the version of Docker in your .circleci/config.yml and re-running”

Also tried with cimg/base:2023:06

My config:

aliases:
  - &build-base
    docker:
      - image: cimg/base:2023.09
    steps:
      - checkout
      - run:
          name: "Pull Submodules"
          command: |
            git submodule init
            git submodule update --remote
      - setup_remote_docker:
          version: default
          docker_layer_caching: true
      - run:
          name: Build and push docker images
          command: |
            ./.circleci/scripts/build_and_publish_docker_images.sh 
      - persist_to_workspace:
          root: workspace
          paths:
            - ./*
      # If no build is needed, echo 0 to run as success 
      - run: echo 0
  - &build-base-arm64
    <<: *build-base
    resource_class: arm64.medium
...

jobs:
  build-push-server:
    <<: *build-base
    environment:
      SERVICE: "server"
      DOCKER_BUILD_CONTEXT: "."
      DOCKERFILE: "services/server/Dockerfile"
  build-push-server-arm64:
    <<: *build-base-arm64
    environment:
      SERVICE: "server"
      DOCKER_BUILD_CONTEXT: "."
      DOCKERFILE: "services/server/Dockerfile"

Adding the associated workflow /pipelines/github/ethereum/sourcify/5214/workflows/0c94c3c0-4bb4-4c58-b1eb-a1113e50126f/jobs/29997

as well as a related thread
discuss(dot)circleci(dot)com/t/buildx-failing-to-build-arm64-containers/46921

Could it be that the “default” version is a recent one that doesn’t have ARM support?

@kuzdogan could you try adjusting the resource_class from arm64.medium to arm.medium and let me know if you’re still seeing the same issue?

@sebastian-lerner It ran sucessfully thank you

pipelines/github/ethereum/sourcify/5252/workflows/80a6e286-ae92-4e43-ae45-b3b3671c624a

I suggest the docs get updated because it is misleading.

Another thing is it wasn’t really clear if I can run a arm64 docker resource only. I had first the impression that I had to run an arm64 machine.

@kuzdogan sure thing, which docs specifically were misleading? Happy to get them updated

Hello! @sebastian-lerner
Had the same error message:
Job was rejected because this version of Docker is not supported on this resource class. Try removing the version of Docker in your .circleci/config.yml and re-running

My parameters:

        image: cimg/python:3.9.18
        resource-class: arm.medium
        docker-version: 24.0.7

Could you please specify which docker-version should I use in this case?

@ioj are you using setup_remote_docker in that same job? If not, you don’t need the docker-version parameter.

@sebastian-lerner Yes, I have this step:

  - setup_remote_docker:
      version: << parameters.docker-version >>

@ioj can you try either default or docker24 instead of 24.0.7