Add Windows to CI Builds

I have a .gitlab-ci.yml file that looks something like this (I’ve omitted a few things for brevity)

.all-build-jobs:
    stage: build
    script:
        - <run cmake, build some stuff>

build:ubuntu20-clang:
    extends: .all-build-jobs
    image: ubuntu:20.04
    before_script:
        - <do some stuff>

build:centos-gcc:
    extends: .all-build-jobs
    image: $CI_REGISTRY/<path to private docker image>/<docker-image>:1.0
    before_script:
        - . /opt/rh/devtoolset-8/enable

build:windows-msvc:
    extends: .all-build-jobs
    image: <?????????>
    before_script:
        - systeminfo

I am fairly new to the GitLab world, having only done cloud CI with GitHub, and I am still learning some basic concepts about Docker and how GitLab uses Docker for its builds.

From my understanding, what I have done above is created an Ubuntu build where the runner is using an “official” Docker Ubuntu20 image. Then for CentOS I am using an internal image (to the enterprise for which this code exists) to build.

I’m sure my terminology is incorrect, but I’m going to stick with it for now. My questions are:

(1) Am I correct that the Ubuntu image is an “official” image in the sense that it is managed and downloaded from Docker?
(2) If so, does such an image exists for Windows with MSVC installed, and how can I use it in the context of what I already have in the file? (i.e. can I do something like image: windows:10 under the build:windows-msvc section?)
(3) I have the same question for MacOS? Does such an “official” image exists or is something I’d have to create internally like I’ve done with “CentOS”?

Thank you!