Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

New Feature: Overview of tag history content #58

Merged
merged 31 commits into from Dec 8, 2018

Conversation

@lennartblom
Copy link
Contributor

commented Dec 1, 2018

Considering the docker registry provides information about the tag history with the following REST endpoint (http://localhost:5000/v2/{imageName}/manifests/{tag}) this feature should display given information.

{
   "schemaVersion": 1,
   "name": "registry",
   "tag": "2.6",
   "architecture": "amd64",
   "fsLayers": [
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
      },
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
      },
      {
         "blobSum": "sha256:bcd4a541795bb9981999ce8f6e2e1c92e55b0041256153d2458ff35fb9381063"
      },
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
      },
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
      },
      {
         "blobSum": "sha256:f296fda86f10cfcb81d60d5bcb47a7784a8ec4876d6eac7fabd51f2a7e8694aa"
      },
      {
         "blobSum": "sha256:2261ba058a15e3f21a467b1b02ea206d40cf0632d6b1aeee2ad200b662ed4aff"
      },
      {
         "blobSum": "sha256:ad0eac849f8f2014e20df11d611e4453c94a365a71eb3a90f02d8500391e1787"
      },
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
      },
      {
         "blobSum": "sha256:d6a5679aa3cfc52503fac8e2345790783537564df5af43355ec662d7703aacbf"
      }
   ],
   "history": [
      {
         "v1Compatibility": "{\"architecture\":\"amd64\",\"config\":{\"Hostname\":\"\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"ExposedPorts\":{\"5000/tcp\":{}},\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[\"/etc/docker/registry/config.yml\"],\"ArgsEscaped\":true,\"Image\":\"sha256:bc0d86131a2db92f18b8413a38da41718748b152024be47a8bc9413fa1d50a95\",\"Volumes\":{\"/var/lib/registry\":{}},\"WorkingDir\":\"\",\"Entrypoint\":[\"/entrypoint.sh\"],\"OnBuild\":[],\"Labels\":null},\"container\":\"1285298c15e4de2bbffc50c626779c0d843f6885b6846d4643ff3a2684a4236f\",\"container_config\":{\"Hostname\":\"1285298c15e4\",\"Domainname\":\"\",\"User\":\"\",\"AttachStdin\":false,\"AttachStdout\":false,\"AttachStderr\":false,\"ExposedPorts\":{\"5000/tcp\":{}},\"Tty\":false,\"OpenStdin\":false,\"StdinOnce\":false,\"Env\":[\"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"],\"Cmd\":[\"/bin/sh\",\"-c\",\"#(nop) \",\"CMD [\\\"/etc/docker/registry/config.yml\\\"]\"],\"ArgsEscaped\":true,\"Image\":\"sha256:bc0d86131a2db92f18b8413a38da41718748b152024be47a8bc9413fa1d50a95\",\"Volumes\":{\"/var/lib/registry\":{}},\"WorkingDir\":\"\",\"Entrypoint\":[\"/entrypoint.sh\"],\"OnBuild\":[],\"Labels\":{}},\"created\":\"2018-09-12T03:24:52.314798985Z\",\"docker_version\":\"17.06.2-ce\",\"id\":\"642c5398c648f7c142d87068b7458cca42168d21c5b7ce8845a42a70c2a540c1\",\"os\":\"linux\",\"parent\":\"5e107ec5042e728968be91af94c91f9f8a1c56d8118052f42411c43e803a14a6\",\"throwaway\":true}"
      },
      {
         "v1Compatibility": "{\"id\":\"5e107ec5042e728968be91af94c91f9f8a1c56d8118052f42411c43e803a14a6\",\"parent\":\"cb05ce4e4668039cced705abefcdcc57d7225d2f47dbcf97e7c73f51878802a6\",\"created\":\"2018-09-12T03:24:52.151039484Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop)  ENTRYPOINT [\\\"/entrypoint.sh\\\"]\"]},\"throwaway\":true}"
      },
      {
         "v1Compatibility": "{\"id\":\"cb05ce4e4668039cced705abefcdcc57d7225d2f47dbcf97e7c73f51878802a6\",\"parent\":\"27ffc1a6320a1a53d033638554ad297046a378676916af16e2a12107ac0074f2\",\"created\":\"2018-09-12T03:24:51.978916686Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) COPY file:7b57f7ab1a8cf85c00768560fffc926543a60c9c9f7a2b172767dcc9a3203394 in /entrypoint.sh \"]}}"
      },
      {
         "v1Compatibility": "{\"id\":\"27ffc1a6320a1a53d033638554ad297046a378676916af16e2a12107ac0074f2\",\"parent\":\"f02430d73118326d4c0b5ae93fa2b4105f53db2c6d658ce5e39ef76f294952cc\",\"created\":\"2018-09-12T03:24:51.700246722Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop)  EXPOSE 5000/tcp\"]},\"throwaway\":true}"
      },
      {
         "v1Compatibility": "{\"id\":\"f02430d73118326d4c0b5ae93fa2b4105f53db2c6d658ce5e39ef76f294952cc\",\"parent\":\"e9ed306c1b7c88854b927edc08563108d3d3fbd6a2e451a93633fa77b49287af\",\"created\":\"2018-09-12T03:24:51.53969035Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop)  VOLUME [/var/lib/registry]\"]},\"throwaway\":true}"
      },
      {
         "v1Compatibility": "{\"id\":\"e9ed306c1b7c88854b927edc08563108d3d3fbd6a2e451a93633fa77b49287af\",\"parent\":\"bb0471001dbd794fb48bb0b0cc3dea5191b10700ffb315f0fe973589950ba238\",\"created\":\"2018-09-12T03:24:51.371267849Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) COPY file:6c4758d509045dc45381fa2df2e7ffcc661afcaa29805c75f8f1976f2b016db8 in /etc/docker/registry/config.yml \"]}}"
      },
      {
         "v1Compatibility": "{\"id\":\"bb0471001dbd794fb48bb0b0cc3dea5191b10700ffb315f0fe973589950ba238\",\"parent\":\"690063f4933c5c9b4dd64c27191f0dd4e1d529998b5390e19d05639decdb1048\",\"created\":\"2018-09-12T03:24:51.107431062Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) COPY file:b99d4fe47ad1addf0e8f244236e05177f3bfe9eb3ddd59f08b67b2612d77c621 in /bin/registry \"]}}"
      },
      {
         "v1Compatibility": "{\"id\":\"690063f4933c5c9b4dd64c27191f0dd4e1d529998b5390e19d05639decdb1048\",\"parent\":\"b7993f8ae5c59ae4ac100850dc59eb3c9a318abb9885501d29e5d0e7d82d8ca4\",\"created\":\"2018-09-12T03:24:50.648009605Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c set -ex     \\u0026\\u0026 apk add --no-cache ca-certificates apache2-utils\"]}}"
      },
      {
         "v1Compatibility": "{\"id\":\"b7993f8ae5c59ae4ac100850dc59eb3c9a318abb9885501d29e5d0e7d82d8ca4\",\"parent\":\"27d83df3618a9b57555411d41f39fad28f2d538ad73817251eae8196a32a8336\",\"created\":\"2018-09-11T22:20:45.6231644Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop)  CMD [\\\"/bin/sh\\\"]\"]},\"throwaway\":true}"
      },
      {
         "v1Compatibility": "{\"id\":\"27d83df3618a9b57555411d41f39fad28f2d538ad73817251eae8196a32a8336\",\"created\":\"2018-09-11T22:20:45.441561959Z\",\"container_config\":{\"Cmd\":[\"/bin/sh -c #(nop) ADD file:4b806a0c031f19a4609ebde02464b2139efebfdf9f5d1bba13cf1c316938530d in / \"]}}"
      }
   ],
   "signatures": [
      {
         "header": {
            "jwk": {
               "crv": "P-256",
               "kid": "CL5I:VY2W:377T:6KA7:JFS7:FBVQ:RUVP:VNHQ:V2LX:J5JJ:475X:NFUD",
               "kty": "EC",
               "x": "GrBvT7mn5JN9vyx8rF5c2pn322d11T50oY7qv2lJeRY",
               "y": "sCXIYZZIzG5ADBOzNdhzW2GO0Awjl_CLz7pynCm8MhE"
            },
            "alg": "ES256"
         },
         "signature": "SZpIyW9pUP70RDO0rd5Cvwc1giPvpBczuwxMbybfi-BBPSFpSf4BkXR0eHRbFrfozl0Avjf9rqSK8asX7LNWlw",
         "protected": "eyJmb3JtYXRMZW5ndGgiOjYyMTEsImZvcm1hdFRhaWwiOiJDbjAiLCJ0aW1lIjoiMjAxOC0xMi0wMVQyMDoxMjoyMloifQ"
      }
   ]
}

The following modification to the taglist view were made to access a new page, which list the given registry JSON data.

Modification on the taglist view
screen shot 2018-12-01 at 20 34 56

New overview of v2/{imageName}/manifest/{tag} contents
screen shot 2018-12-01 at 21 11 13

Possible future todos:

  • Displaying of nested config and container_config content
  • Displaying fsLayers section
  • Displaying signatures information

So... what do you think? 馃榾 I personally believe that information provided by the v2 REST API are worth to be displayed. Thus, it might be a good idea to think about!

I look forward to your constructive feedback and hope my indentation was properly configured!

All the best from Germany,
Lennart Blom

P.S: Don't be too strict with my JavaScript. I am a passionate Java backend engineer and unfortunately can't look back on much experience in the frontend area at the moment.

@Joxit Joxit self-assigned this Dec 2, 2018

@Joxit Joxit added the enhancement label Dec 2, 2018

@Joxit Joxit self-requested a review Dec 2, 2018

@Joxit

This comment has been minimized.

Copy link
Owner

commented Dec 2, 2018

Hey!

Thank you for your contribution ! 馃憤

This is a good job, well done 馃槈

For the v2 API, you can use the object registryUI.DockerImage and add some trigger in getBlobs function.
This is a sample output of blob http://127.0.0.1:5000/v2/{image}/blobs/sha256:{id}

{
  "architecture": "amd64",
  "config": {
    "Hostname": "",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ],
    "Cmd": [
      "/bin/sh"
    ],
    "ArgsEscaped": true,
    "Image": "sha256:adc791c55308c575fb7c2103801fa03d46ad1c9b9e7942afd47fcf5968d78bc0",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": null
  },
  "container": "046231b489fcba3dc42e6424d476762ecc5140a075fefc2c03eace14f143ad58",
  "container_config": {
    "Hostname": "046231b489fc",
    "Domainname": "",
    "User": "",
    "AttachStdin": false,
    "AttachStdout": false,
    "AttachStderr": false,
    "Tty": false,
    "OpenStdin": false,
    "StdinOnce": false,
    "Env": [
      "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    ],
    "Cmd": [
      "/bin/sh",
      "-c",
      "#(nop) ",
      "CMD [\"/bin/sh\"]"
    ],
    "ArgsEscaped": true,
    "Image": "sha256:adc791c55308c575fb7c2103801fa03d46ad1c9b9e7942afd47fcf5968d78bc0",
    "Volumes": null,
    "WorkingDir": "",
    "Entrypoint": null,
    "OnBuild": null,
    "Labels": {}
  },
  "created": "2018-01-09T21:11:19.25867595Z",
  "docker_version": "17.06.2-ce",
  "history": [
    {
      "created": "2018-01-09T21:11:19.026384377Z",
      "created_by": "/bin/sh -c #(nop) ADD file:85ed2ac9d10c6f076a01f29e72b653675994c6fcfb90f0e6b88368c0262893fa in / "
    },
    {
      "created": "2018-01-09T21:11:19.25867595Z",
      "created_by": "/bin/sh -c #(nop)  CMD [\"/bin/sh\"]",
      "empty_layer": true
    }
  ],
  "os": "linux",
  "rootfs": {
    "type": "layers",
    "diff_ids": [
      "sha256:c9e8b5c053a2dda62373bc57fa8cb634230a92ba5f02d2baf5d35b932d04a878"
    ]
  }
}

If you want to retrieve an image blob, you need to use your manifest endpoint with this header Accept:application/vnd.docker.distribution.manifest.v2+json, the blob is in config.digest.
You are right, there is less information in v2 endpoint... 馃槙

Hahaha, yes, your indentation is well configured 馃槈

All the best from France

PS: Don't worry, I'm also a backend engineer/DevOPS and not a frontend expert 馃槈
Riotjs is not the most famous frontend library, but I like it.

Show resolved Hide resolved src/style.css
Show resolved Hide resolved src/tags/app.tag Outdated
Show resolved Hide resolved src/tags/tag-history-button.tag Outdated
Show resolved Hide resolved src/tags/tag-history.tag Outdated
@lennartblom

This comment has been minimized.

Copy link
Contributor Author

commented Dec 2, 2018

Hey there! I edited all your change-requests...

The mentioned possible features about fsLayers section and signatures information I would like to put in another pull-requests. Maybe wait for some feedback if it's really worth the effort! :)

Show resolved Hide resolved src/tags/tag-history-button.tag
@Joxit

This comment has been minimized.

Copy link
Owner

commented Dec 2, 2018

I don't know if fsLayers are interesting here, need to think about it.

lennartblom added some commits Dec 3, 2018

Fix navigation bug
The href="#" was troubling the view that the history appeared just for
a few milliseconds... the button with given onclick event does work now.
@Joxit
Copy link
Owner

left a comment

Last changes I think 馃槃

Show resolved Hide resolved src/tags/tag-history.tag Outdated
Show resolved Hide resolved src/tags/tag-history.tag Outdated
Show resolved Hide resolved src/tags/tag-history.tag
Show resolved Hide resolved src/tags/tag-history.tag Outdated
Show resolved Hide resolved src/tags/tag-history.tag Outdated
Show resolved Hide resolved src/tags/tag-history.tag Outdated
@lennartblom

This comment has been minimized.

Copy link
Contributor Author

commented Dec 5, 2018

Thank you for your code-change requests... good stuff! I think I can manage to implement them untill the upcoming weekend! 馃憤

lennartblom added some commits Dec 6, 2018

@lennartblom

This comment has been minimized.

Copy link
Contributor Author

commented Dec 6, 2018

Hi Joxit!
I optimised my work. Thanks for your input...

The GUI looks pretty good with your idea of using the following structure:

  • Headline material-card

  • History-Elements n-times material-card

screen shot 2018-12-06 at 21 57 29

And your code improvement suggestion made me do a nice switch-case for the content modification method.

Looks way better with this I think!

function modifySpecificAttributeTypes(attribute, value) {
  switch (attribute) {
    case "created":
      return new Date(value).toLocaleString();
    case "container_config":
    case "config":
      return "";
  }
  return value;
}

What do you think?! 馃槑

@Joxit

Joxit approved these changes Dec 8, 2018

@Joxit Joxit merged commit e89a011 into Joxit:master Dec 8, 2018

@Joxit

This comment has been minimized.

Copy link
Owner

commented Dec 8, 2018

Yeah! That's really nice job! I like this new GUI for history 馃槃
All is good for me now :) I will release the new version tomorrow.

@lennartblom

This comment has been minimized.

Copy link
Contributor Author

commented Dec 8, 2018

Sweet! Nice to hear that! 馃槏
Really enjoyed working on it and improving it with your brilliant feedback! 馃嵕 馃帀

@Joxit

This comment has been minimized.

Copy link
Owner

commented Dec 9, 2018

I am happy to have helped you in your frontend skills 馃槃.

I've changed the docker image in a6b6c15, the old one was too detailed.
And I removed _ characters in headers.

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants
You can鈥檛 perform that action at this time.