Container Registry API

Scaleway Container Registry is a fully-managed mutualised Container Registry, designed to facilitate the storage, management and deployment of container images. The service simplifies the development-to-production workflow, as there is no need to operate your own Container Registry or to worry about the underlying infrastructure.

Concepts

Refer to our dedicated concepts page to find definitions of the different terms referring to Container Registry.

Quickstart

  1. Configure your environment variables.

    Note:

    This is an optional step that seeks to simplify your usage of the APIs.

    export ACCESS_KEY="<access-key>"
    export SECRET_KEY="<secret-key>"
    export SCW_REGION="<region>"
  2. Edit the POST request payload you will use to create your Container Registry namespace. Replace the parameters in the following example:

    '{
    "name": "namespace1",
    "description": "this is my new namespace",
    "project_id": "d4c3139f-3010-4e5f-9e73-0f2df2d242f0",
    "is_public": "true"
    }'
    ParameterDescription
    nameREQUIRED Name of the namespace
    descriptionDescription of your namespace
    project_idREQUIRED The ID of the Project you want to create your namespace in. To find your Project ID you can list the projects or consult the Scaleway console.
    is_publicBOOLEAN Whether or not the namespace is public.
  3. Create a namespace by running the following command. Make sure you include the payload you edited in the previous step. Replace

    curl -X POST \
    -H "Content-Type: application/json" \
    -H "X-Auth-Token: $SCW_SECRET_KEY" https://api.scaleway.com/registry/v1/regions/$SCW_REGION/namespaces \
    -d '{
    "name": "namespace1",
    "description": "this is my new namespace",
    "project_id": "d4c3139f-3010-4e5f-9e73-0f2df2d242f0",
    "is_public": true
    }'

    You should get a response like the following:

    {
    "id": "99aa3f69-b194-41cf-aaca-3ef6d1012e1d",
    "name": "namespace1",
    "description": "this is my new namespace",
    "organization_id": "d4c3139f-3010-4e5f-9e73-0f2df2d242f0",
    "project_id": "d4c3139f-3010-4e5f-9e73-0f2df2d242f0",
    "status": "ready",
    "status_message": "",
    "endpoint": "rg.fr-par.scw.cloud/namespace1",
    "is_public": true,
    "size": 0,
    "created_at": "2023-04-04T13:33:46.965978759Z",
    "updated_at": "2023-04-04T13:33:46.965978759Z",
    "image_count": 0,
    "region": "string"
    }
  4. Log in to your new namespace the docker CLI.

    Note:

    Use the following hostname format when using the Docker CLI: rg.{SCW_REGION}.scw.cloud. Replace {SCW_REGION} with your region of choice. Keep in mind you can only have one registry namespace per region. In this example we use fr-par.

    docker login rg.fr-par.scw.cloud/namespace1 -u nologin -p ${SCW_SECRET_KEY}
  5. Pull the most recent image version of the tool you wish to use. In this example we use an nginx image.

    docker pull nginx:latest
  6. Tag the image.

    docker tag nginx:latest rg.fr-par.scw.cloud/namespace1/nginx:latest
  7. Push an image to your namespace.

    docker push rg.fr-par.scw.cloud/namespace1/nginx:latest
Requirements:

To perform the following steps, you must first ensure that:

Technical Information

Regions

Scaleway's infrastructure is spread across different regions and Availability Zones.

Container Registry is available in the Paris, Amsterdam and Warsaw regions, which are represented by the following path parameters:

  • fr-par
  • nl-ams
  • pl-waw

Going Further

For more information about Container Registry, you can check out the following pages:

A namespace is a collection of container images, each bearing the unique identifier of that namespace. A namespace can be either public or private, by default.

Each namespace must have a globally unique name within its region. This means no namespaces in the same region can bear the same name.

You can use namespace privacy policies to specify whether everyone has the right to pull an image from a namespace or not. When an image is in a public namespace, anyone is able to pull it. You can set your namespace to private if you want to restrict access.

GET
/registry/v1/regions/{region}/namespaces
POST
/registry/v1/regions/{region}/namespaces
GET
/registry/v1/regions/{region}/namespaces/{namespace_id}
PATCH
/registry/v1/regions/{region}/namespaces/{namespace_id}
DELETE
/registry/v1/regions/{region}/namespaces/{namespace_id}

An image represents a container image. A container image is a file that includes all the requirements and instructions of a complete and executable version of an application. When running, it becomes one or multiple instances of that application.

The visibility of an image can be public - when anyone can pull it, private - when only users within your organization can pull it, or inherited from the namespace visibility - which is the default. The visibility of your image can be changed using the update image endpoit.

GET
/registry/v1/regions/{region}/images
GET
/registry/v1/regions/{region}/images/{image_id}
PATCH
/registry/v1/regions/{region}/images/{image_id}
DELETE
/registry/v1/regions/{region}/images/{image_id}

Tags allow you to organize your container images. This gives you the possibility of sorting and filtering your images in any organizational pattern of your choice, which in turn helps you arrange, control and monitor your cloud resources. You can assign as many tags as you want to each image.

GET
/registry/v1/regions/{region}/images/{image_id}/tags
GET
/registry/v1/regions/{region}/tags/{tag_id}
DELETE
/registry/v1/regions/{region}/tags/{tag_id}