Managing Linux container images and repositories using skopeo

Managing Linux container images and repositories using skopeo

Test Environment

Fedora 32 installed

What is Skopeo –

Skopeo is opensource community tool provided to manage the container images and repositories hosted remotely. They do not need any daemon to perform their operations. Skopeo works with OCI compliant images and also with Docker v2 images. Skopeo can be useful in performing various operations like copying container images between different registries, Inspecting a remote image without pulling it and deleting images from remote repositories

In this article we will see how we can use Skopeo to manage remote repository container images. Skopeo is an open source community tool and it helps with operations like inspecting the remote image, copying images between repositories and also deleting the remote repository images. If you are interested in watching video. You can watch the below video with the same steps in this article.

Procedure –

Step1: Install skopeo for container images and repository management

As a first step we need to have the skopeo tool installed on our system so we can use it to manage container images and remote repositories. It can be installed as below and as you can see there no dependencies that are installed with this tool.

Install skopeo
[root@fed32 ~]# sudo dnf -y install skopeo
[sudo] password for admin: 
Last metadata expiration check: 0:10:22 ago on Tue 17 Nov 2020 09:36:05 PM IST.
Dependencies resolved.
=======================================================================================================================================
 Package                      Architecture                 Version                                 Repository                     Size
=======================================================================================================================================
Installing:
 skopeo                       x86_64                       1:1.2.0-2.fc32                          updates                       6.9 M

...
Installed:
  skopeo-1:1.2.0-2.fc32.x86_64                                                                                                         

Complete!

Step2: Connect skopeo to remote repository by authenticating using credentials

In order to manage the remote repository we first need to connect to the repository and passing the credentials as shown below.

Login to docker.io registry
[root@fed32 ~]# skopeo login docker.io
Username: novicejava1
Password: 
Login Succeeded!

Step3: List tags available on the remote repository

Once we are connected we list the images and their respective tags which are available as shown below. As an example i have connected to my remote repositories for this step.

List remote repository tags
[root@fed32 ~]# skopeo list-tags docker://docker.io/novicejava1/apacheweb
{
    "Repository": "docker.io/novicejava1/apacheweb",
    "Tags": [
        "latest"
    ]
}
[root@fed32 ~]# skopeo list-tags docker://docker.io/novicejava1/hello
{
    "Repository": "docker.io/novicejava1/hello",
    "Tags": [
        "1.0"
    ]
}

Step4: Inspect the remote repository image

We can inspect the remote image using inspect and get the details of the images as shown below

Inspect remote image
[root@fed32 ~]# skopeo inspect docker://docker.io/novicejava1/apacheweb
{
    "Name": "docker.io/novicejava1/apacheweb",
    "Digest": "sha256:b196bb021718076ccb3ed34c3c37be95da05a00469218bc250e302cffeb9df3c",
    "RepoTags": [
        "latest"
    ],
    "Created": "2020-10-26T11:01:28.902764612Z",
    "DockerVersion": "19.03.8",
    "Labels": {
        "maintainer": "Clement Verna u003ccverna@fedoraproject.orgu003e"
    },
    "Architecture": "amd64",
    "Os": "linux",
    "Layers": [
        "sha256:8447a86791f76e02fdd4722a7cf61aa10dbfb58bdac0c028c80158754779bb62",
        "sha256:ecd341485a45807a15fd6b40d892a6cfba41f35d14cd26da70d13529908270b7",
        "sha256:7e2c4ed816ec9b8e089e53263e5fe4d448e002d44e42374ac81671c261f64c73"
    ],
    "Env": [
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "DISTTAG=f32container",
        "FGC=f32",
        "FBR=f32"
    ]
}

Step5: Copy remote image in the same repository with different tag

Skopeo also helps in copying the images from one remote repository to another. Here i am showing how we can copy an image in the same repository with a different tag.

Copy remote repository image with different tag name
[root@fed32 ~]# skopeo copy docker://docker.io/novicejava1/hello:1.0 docker://docker.io/novicejava1/hello:2.0
Getting image source signatures
Copying blob 22cef3226003 skipped: already exists  
Copying blob ed03608500cb skipped: already exists  
Copying blob f891121bf6d1 [--------------------------------------] 0.0b / 0.0b
Copying config b6611cf6b4 [--------------------------------------] 0.0b / 1.2KiB
Writing manifest to image destination
Storing signatures

Hope you enjoyed reading this article. Thank you..