<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Prasanna Raghavendra</title>
    <description>The latest articles on DEV Community by Prasanna Raghavendra (@vinsanna).</description>
    <link>https://dev.to/vinsanna</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F277328%2F1fcc5d95-b04c-4f33-9dc4-630abedba6f7.jpg</url>
      <title>DEV Community: Prasanna Raghavendra</title>
      <link>https://dev.to/vinsanna</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/vinsanna"/>
    <language>en</language>
    <item>
      <title>Hosting helm charts: A Maintainer’s Perspective</title>
      <dc:creator>Prasanna Raghavendra</dc:creator>
      <pubDate>Tue, 07 Jul 2020 02:07:02 +0000</pubDate>
      <link>https://dev.to/jfrog/hosting-helm-charts-a-maintainer-s-perspective-55ko</link>
      <guid>https://dev.to/jfrog/hosting-helm-charts-a-maintainer-s-perspective-55ko</guid>
      <description>&lt;p&gt;Helm charts is becoming one of the best ways to package any kubernetes application and indeed becoming &lt;a href="https://www.cncf.io/cncf-helm-project-journey/"&gt;popular&lt;/a&gt; among contributors and contributing companies. It provides a consistent management of any application on kubernetes and a very easy way to override default parameters.&lt;/p&gt;

&lt;p&gt;With the release of &lt;a href="https://chartcenter.io"&gt;ChartCenter by JFrog&lt;/a&gt; and given that I own hosting JFrog charts, it was important for me to look at this with a finer tooth.&lt;/p&gt;

&lt;p&gt;I wanted to take a step back and see who are the providers of chart hosting and hit this nice &lt;a href="https://codeengineered.com/blog/2020/helm-find-charts/"&gt;blog&lt;/a&gt;. Let us take this a step further and try to compare them and see how we can leverage these options.&lt;/p&gt;

&lt;p&gt;So, here goes my review of these options, against the following 8 criteria.&lt;/p&gt;

&lt;h4&gt;
  
  
  Host helm repo centrally
&lt;/h4&gt;

&lt;p&gt;We need to ensure that our consumers can  download these charts fast and effectively. We will need a way to host on a platform which provides a very good content caching so we are sure  that this  is available 24*7.&lt;/p&gt;

&lt;p&gt;ChartCenter does provide this by running this on a well proven Artifactory, and an operation team who have managed bintray.&lt;/p&gt;

&lt;p&gt;The other  providers seem to be only working as a directory as they directly provide install commands to the maintainer’s repo. This  leads maintainers to take the burden of hosting helm repo effectively, behind CDN.&lt;/p&gt;

&lt;h4&gt;
  
  
  Clarify chart dependencies
&lt;/h4&gt;

&lt;p&gt;A maintainer would like to ensure that the consumers are clear of the dependencies that the  chart has on both sides, where all it  is referenced so the consumer can  choose a  larger chart if needed, and what it references further  down, to ensure the consumer is aware of what consumer is picking before he/she installs without having to open the chart.&lt;/p&gt;

&lt;p&gt;ChartCenter does provide this effectively. &lt;/p&gt;

&lt;p&gt;Did not see them in any other.&lt;/p&gt;

&lt;h4&gt;
  
  
  Amount of charts hosted
&lt;/h4&gt;

&lt;p&gt;This is important to ensure that as a maintainer you are hosting on a site that is popular and more consumers are on it.  It is clear from the  numbers (provided  in  the summary table below), all are in early stages and will surely evolve in the next few months.&lt;/p&gt;

&lt;h4&gt;
  
  
  Download metrics
&lt;/h4&gt;

&lt;p&gt;Providing information on who is downloading which version of the application is very useful. I found all of  them having  gaps in this.&lt;/p&gt;

&lt;p&gt;While ChartCenter does provide download information, (by of course allowing downloads directly from ChartCenter), it reports by chart version which is not that relevant in the world of applications.  It is preferable to have  this information  by application version and also provide a trend, with download regions, something that was a given in bintray.&lt;/p&gt;

&lt;p&gt;Others, being only a portal, cannot provide download functionality and hence no download information.&lt;/p&gt;

&lt;h4&gt;
  
  
  Related charts
&lt;/h4&gt;

&lt;p&gt;When a  consumer comes in a  discovery  mode,  having related content makes a lot of sense to helm the  consumer pick the right application.&lt;/p&gt;

&lt;p&gt;Artifact Hub provides this well and felt it had relevant charts as well, when I tried wordpress.&lt;/p&gt;

&lt;p&gt;ChartCenter, Kubeapps hub and Helm hub seem to be lacking in this area.&lt;/p&gt;

&lt;h4&gt;
  
  
  Deep curation
&lt;/h4&gt;

&lt;p&gt;Having thoughts and reflection (provided by the host) on charts helps deepen one's understanding on how to compare, install and use applications.&lt;/p&gt;

&lt;p&gt;Bitnami (Kubeapps Hub) includes their perspectives in a blog for each chart (of course popular ones). This gives a very good view-point on how one may end up using the chart.&lt;br&gt;
The other three players have not been present in this space.&lt;/p&gt;

&lt;h4&gt;
  
  
  Make overall usage safe and secure
&lt;/h4&gt;

&lt;p&gt;Having a security report at a chart level provides another nice perspective to know what is going on with the images bundled. This is an area where every chart maintainer is catching up and clearing up their internal security and also working on to depend on the cleanest and  latest  charts.&lt;/p&gt;

&lt;p&gt;ChartCenter is the only one providing this perspective. They are extending this further to allow providers to provide their view-point  on some of the  open issues. This is an interesting direction ChartCenter has taken and I like this one very much.&lt;/p&gt;

&lt;h4&gt;
  
  
  Smarter set-me up for better on-boarding
&lt;/h4&gt;

&lt;p&gt;Not all charts are  completely independent, especially when you are looking at extension products where you expect some other service is already running, then charts would make a few mandatory values to be filled before getting them working.&lt;/p&gt;

&lt;p&gt;Almost all of the providers seem to provide vanilla install commands ignoring some of the mandatory values  to be passed, finally leading to a situation where they are actually incorrect.&lt;/p&gt;

&lt;p&gt;Summary:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criteria&lt;/th&gt;
&lt;th&gt;HelmHub (CNCF)&lt;/th&gt;
&lt;th&gt;Kubeapps Hub (Bitnami)&lt;/th&gt;
&lt;th&gt;Artifact hub (OSS)&lt;/th&gt;
&lt;th&gt;ChartCenter (JFrog)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chart hosting&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chart dependency&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deep curation&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chart numbers&lt;/td&gt;
&lt;td&gt;Charts: 1355 Versions: NA&lt;/td&gt;
&lt;td&gt;Charts: 1400 Versions: NA&lt;/td&gt;
&lt;td&gt;Charts: 820 Versions:21k&lt;/td&gt;
&lt;td&gt;Charts: 1521 Versions:29k&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download metrics (application level)&lt;/td&gt;
&lt;td&gt;No (dependant  on hosting)&lt;/td&gt;
&lt;td&gt;No (dependant on hosting)&lt;/td&gt;
&lt;td&gt;No (dependant  on hosting)&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Related charts&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Security&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Smart installs commands&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you can see in the  table above, all charts are hosting a limited number of charts, while this ecosystem will start growing. Soon, you will see more and more on-boarding into many of these.&lt;/p&gt;

&lt;p&gt;If your requirement is to have a completely hosted support, ChartCenter stands out as the only example. If  you want to be aligned with the CNCF ecosystem, you could look at helm hub. If  you would like to have a third-party validation along with hosting, Bitnami is a good solution.&lt;/p&gt;

&lt;p&gt;However, you could also add ChartCenter for hosting and have the other three list your charts so you have  the best of the breed.&lt;/p&gt;

&lt;p&gt;Let me know, what do you guys think?&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>chartcenter</category>
      <category>helmhub</category>
      <category>artifacthub</category>
    </item>
    <item>
      <title>Should the developer in you care about Unified Platform?</title>
      <dc:creator>Prasanna Raghavendra</dc:creator>
      <pubDate>Wed, 04 Mar 2020 03:25:20 +0000</pubDate>
      <link>https://dev.to/jfrog/should-the-developer-in-you-care-about-unified-platform-1eka</link>
      <guid>https://dev.to/jfrog/should-the-developer-in-you-care-about-unified-platform-1eka</guid>
      <description>&lt;p&gt;There has been a lot of buzz around unification of services to provide a single window for end users to work within our new JFrog Platform.  What does this single window look like for developers?  This is an important question we asked ourselves when we were building a &lt;a href="https://devclass.com/2020/02/27/jfrog-pulls-together-products-spawns-joyful-devops-platform/"&gt;Unified JFrog Platform&lt;/a&gt;.  These were the services we saw that needed to be unified to ensure developers and administrators were able to optimize  their work.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Unified UI: As a developer, one of the most important features of a binary store is an ability to search the repo to pick the right package for use. We introduced &lt;a href="https://www.jfrog.com/confluence/display/JFROG/Application+Search"&gt;global search&lt;/a&gt;, in the unified UI, which can help you search across any packages, get details on the downloads, license information, security issues, and versions available in the package. Especially helpful to developers is a keyword-based search that enables you to dive right into the package you are looking for.&lt;br&gt;
For example, you might perform a complex search for all packages that: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;were uploaded after Feb 1st&lt;/li&gt;
&lt;li&gt;have a high violation severity&lt;/li&gt;
&lt;li&gt;have vulnerability CVE-2019-12 &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These conditions can be expressed in a simple search string:&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;after:2020-02-01 cve:CVE-2019-12 severity: high&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified Configuration. Artifactory alone offers a great many configuration options,.  so one might expect that configuring a unified platform will be complex by an order of magnitude. But the reality is that it has become much more simplified. The secret behind this is that all products are each configured through their own system.yaml file that shares the same common structure across the platform. This enables more consistency and re-usability of configuration  snippets, streamlining automation of configuration changes. (For a  detailed look a the new and shining system.yaml see &lt;a href="https://www.jfrog.com/confluence/display/JFROG/System+YAML+Configuration+File"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unified Installation. Our goal was to have all JFrog products install similarly to aid developers in automating installations and upgrading across all products...as if it were one product.   This led to more consistency and faster turnaround of fixes. A more depth discussion on this topic can be seen in Vivek Kodira’s article on &lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/vivekkodira" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6FP9RRL4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--gzi_PcdE--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/44510/8ce07b0b-67df-4fc3-9ace-a15138194e00.jpeg" alt="vivekkodira image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/jfrog/lessons-learned-building-jfrog-platform-installers-applying-the-template-pattern-to-shell-scripts-4ac7" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Lessons Learned Building JFrog Platform Installers: Applying the Template pattern to Shell Scripts&lt;/h2&gt;
      &lt;h3&gt;Vivek Kodira ・ Feb 25 ・ 4 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#jfrog&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#shellscript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#designpattern&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Unified Folder structure.  Extending the principle of common configuration, we adopted a common folder structure for all our products,  to  allow a clear segregation of immutable and mutable software components. Eldad Assis elaborates in more detail on this topic in &lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/eldadak" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lrSpgu_S--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--l1yAdH8_--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/248503/2aa0a3e5-b472-4cc7-884d-58a3ea161c85.jpg" alt="eldadak image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/jfrog/the-jfrog-platform-the-new-file-system-layout-f1n" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The JFrog Platform - The New File System Layout&lt;/h2&gt;
      &lt;h3&gt;Eldad Assis ・ Feb 27 ・ 2 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified Communication. We also streamlined all the communication across our  products and services. This enables net-native architecture to be used even in a  standard VM based installation, while allowing cloud native services to leverage net-nativeness of the overall architecture. Introducing router services in the new platform which allowed us to remove  redundant code across all products to handle communication, service registrations, SSL services, routing logic, health-check services and meshing of services. More details about this bundled service is &lt;a href="https://www.jfrog.com/confluence/display/JFROG/System+Architecture"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Unified Naming. We took this opportunity to streamline the  names of all the  different packages. This enables a simplified continuous upgrade by watching  out assets in Bintray. The table below shows the new naming conventions:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Installer type&lt;/th&gt;
&lt;th&gt;Artifactory&lt;/th&gt;
&lt;th&gt;MC/Xray/Distribution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Linux&lt;/td&gt;
&lt;td&gt;jfrog-artifactory-oss-7.0.0-linux.tar.gz&lt;/td&gt;
&lt;td&gt;jfrog-xray-3.0.0-linux.tar.gz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mac&lt;/td&gt;
&lt;td&gt;jfrog-artifactory-jcr-7.0.0-darwin.tar.gz&lt;/td&gt;
&lt;td&gt;jfrog-mc-4.0.0-darwin.tar.gz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Windows&lt;/td&gt;
&lt;td&gt;jfrog-artifactory-pro-7.0.0-windows.zip&lt;/td&gt;
&lt;td&gt;Not Available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;rpm&lt;/td&gt;
&lt;td&gt;jfrog-artifactory-pro-7.0.0.rpm&lt;/td&gt;
&lt;td&gt;jfrog-mc-4.0.0-rpm.tar.gz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debian&lt;/td&gt;
&lt;td&gt;jfrog-artifactory-pro-7.0.0.deb&lt;/td&gt;
&lt;td&gt;jfrog-xray-3.0.0-deb.tar.gz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker Compose&lt;/td&gt;
&lt;td&gt;jfrog-artifactory-pro-7.0.0-compose.tar.gz&lt;/td&gt;
&lt;td&gt;jfrog-mc-4.0.0-compose.tar.gz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;We at JFrog hope you will love these features as much as we did working on them. Keep those feedback coming!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Saga of `latest` in Container Registries</title>
      <dc:creator>Prasanna Raghavendra</dc:creator>
      <pubDate>Wed, 18 Dec 2019 01:34:31 +0000</pubDate>
      <link>https://dev.to/jfrog/the-saga-of-latest-in-container-registries-1kge</link>
      <guid>https://dev.to/jfrog/the-saga-of-latest-in-container-registries-1kge</guid>
      <description>&lt;p&gt;When you are delivering continuously, it makes sense that you always want to use the latest dependent binaries. Similarly, the testing team would like to use the latest binaries produced for tests. With that being said, it’s important to make it easy for users to pull the latest images from a container registry. I had mentioned this in my earlier blog: &lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="/vinsanna" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a5TCdrkq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://res.cloudinary.com/practicaldev/image/fetch/s--E5MLP2aE--/c_fill%2Cf_auto%2Cfl_progressive%2Ch_150%2Cq_auto%2Cw_150/https://dev-to-uploads.s3.amazonaws.com/uploads/user/profile_image/277328/1fcc5d95-b04c-4f33-9dc4-630abedba6f7.jpg" alt="vinsanna image"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/jfrog/10-things-you-should-expect-from-a-container-registry-j4d" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;10 Things You Should Expect From a Container Registry&lt;/h2&gt;
      &lt;h3&gt;Prasanna Raghavendra ・ Nov 24 '19 ・ 3 min read&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#containerregistry&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kubernetes&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#docker&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;Docker Hub provides a simple tag model where you tag an image as &lt;code&gt;latest&lt;/code&gt; and when you pull &lt;code&gt;latest&lt;/code&gt; you get that image. This model has inherent issues as discussed in various forums. One example below: &lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="https://medium.com/@mccode/the-misunderstood-docker-tag-latest-af3babfd6375" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N9BQlmY0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/fit/c/96/96/0%2A55bO33dDZ0U4wRZy.jpeg" alt="Marc Campbell"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://medium.com/@mccode/the-misunderstood-docker-tag-latest-af3babfd6375" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The misunderstood Docker tag: latest | by Marc Campbell | Medium&lt;/h2&gt;
      &lt;h3&gt;Marc Campbell ・ &lt;time&gt;Jan 13, 2016&lt;/time&gt; ・ 3 min read
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KBvj_QRD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/medium_icon-90d5232a5da2369849f285fa499c8005e750a788fdbf34f5844d5f2201aae736.svg" alt="Medium Logo"&gt;
        Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;
. &lt;br&gt;
In addition to the issues discussed in the blog, sometimes you may have a version that’s tagged &lt;code&gt;latest&lt;/code&gt; in your local repo but that may be old because the remote server built a newer one. 

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Prasannas-MacBook-Pro:keys prasannaraghavendra$ docker images
REPOSITORY                                 TAG                                   IMAGE ID            CREATED             SIZE
bintray_kramdown                           latest                                9b919eb86d92        2 months ago        512MB
registry.access.redhat.com/ubi8/ubi-init   latest                                1de7d7b3f531        2 months ago        223MB
registry.access.redhat.com/ubi8/ubi        latest                                11f9dba4d1bc        2 months ago        208MB
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;As you can see, these are two-month old images but tagged &lt;code&gt;latest&lt;/code&gt;. If I run a ‘compose’ or a ‘run’, expecting a ‘latest’, what I end up with is a two-month-old image!  In addition, there will be no error anywhere in the process, unless you start looking at the &lt;code&gt;CREATED&lt;/code&gt; field above.&lt;/p&gt;

&lt;p&gt;There is a certain way to handle this situation - by always deleting &lt;code&gt;latest&lt;/code&gt;, but when you do this, you lose bandwidth when you actually have the latest locally.&lt;/p&gt;

&lt;p&gt;In addition to this, there are a number of other requirements that can make this more complicated than just getting the latest version of an image from a repo.  Let us quickly consider these three examples:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I want the &lt;code&gt;latest&lt;/code&gt; of all tested dependencies- I am not just looking at the latest of an image, I also want to pull the &lt;code&gt;latest&lt;/code&gt; of the local dependent images that are tested against this image.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I want the &lt;code&gt;latest&lt;/code&gt; of released branches-  I am looking at the latest released images across all released branches to ensure I can verify a newly discovered vulnerability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I want the &lt;code&gt;latest&lt;/code&gt; of a given branch- I am checking out the &lt;code&gt;latest&lt;/code&gt; image in a branch, but then how would I then ensure all my dependencies are pulled from a similar branch or not?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All three examples relate to the necessity for container registries to provide the ability to add metadata and a flexible query construct. &lt;/p&gt;

&lt;p&gt;I  must say, Both Artifactory and JFrog Container Registry provide this efficiently.&lt;/p&gt;

&lt;p&gt;Let’s look at the example of the query below using JFrog CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jfrog rt s "libs-staging/*/*application*.tar.gz"  --limit=1 --sort-by=created --sort-order=desc | jq '.[0].props."dependencies.*"'
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The above example pulls from JFrog Container Registry the latest image in staging for &lt;code&gt;application&lt;/code&gt;, and parses the list of dependencies that are already marked in the build info [aka metadata]&lt;/p&gt;

&lt;p&gt;This is of course just the beginning, you can extend the way you want using the developer in you!&lt;/p&gt;

</description>
      <category>docker</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>containerregistry</category>
    </item>
    <item>
      <title>10 Things You Should Expect From a Container Registry</title>
      <dc:creator>Prasanna Raghavendra</dc:creator>
      <pubDate>Sun, 24 Nov 2019 14:41:14 +0000</pubDate>
      <link>https://dev.to/jfrog/10-things-you-should-expect-from-a-container-registry-j4d</link>
      <guid>https://dev.to/jfrog/10-things-you-should-expect-from-a-container-registry-j4d</guid>
      <description>&lt;p&gt;Container registry technology is picking up steam parallel to Microservices Architecture with current Google trends indicating clear growth in this area. While there is no disagreement that a registry is needed, it is clear you need a robust one to deliver your container images to customers effectively. We should level-set what our expectations should be when working with a container registry. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Consumer-Centric: When you create a container image, you definitely need a registry so your consumers can effectively consume both the first version, as well as subsequent versions. With continuous image updates, customers must be notified of the new versions so they can easily pull these new images in an effective and seamless fashion. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrated Container Environment: When you are producing images as a way to deliver your software, you need hooks, plugins, and CLIs to ensure your developers can push into a registry from within an IDE, or development environment. Container registries are expected to provide this integration for overall developer productivity.&lt;br&gt;
This requires registries to provide an ability to push or pull images in various kinds of repositories (remote or virtual) and query them with various metadata information, including time-stamp, to ensure they get the exact image they need.&lt;br&gt;
An example would be &lt;a href="https://www.jfrog.com/confluence/display/RTF/Artifactory+Query+Language"&gt;aql&lt;/a&gt; from the &lt;a href="https://jfrog.com/container-registry/"&gt;JFrog Container Registry&lt;/a&gt;, which provides a very deep and flexible way to get your exact image, which can be a small query, in a developmental environment to be consistent with what image you plan to use. Some registries have had issues as simple as getting the latest image consistently from different container registries. Using aql allows us to resolve this issue.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Distribute Fast: The fundamental need for you to push the image here is to ensure it can be accessed globally, with the right versions available, in all the caches provided and in the fastest possible way. Ensuring your registry provides you with enough caching support is critical.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Multi-Cloud: The way to go is cloud-agnostic. You are already multi-cloud, but it is very hard for you to manage these images across these container registries being provided by these clouds. You should consider using providers who are cloud-agnostic and serve you registries that you can install yourself, giving you the flexibility you need to deploy it where you want to.&lt;br&gt;
&lt;a href="https://jfrog.com/container-registry/"&gt;JFrog Container Registry&lt;/a&gt; provides you a downloadable registry to allow you to be cloud-agnostic, while also providing you the flexibility to install in any cloud environment.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Optimization: Storage usage optimization allows for effective storage and provides enough strategies to allow for continuous clearing of development versions, vulnerable versions, and versions not supported anymore.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support Evolving Standards: Your registry should align with the OCI standards of today, as well as continuously evolving to support the changing standards.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secure Distribution:  Ensure that you never deliver vulnerable software to any of your customers and your registry should always stay on top of the latest vulnerabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Private Repositories:  Keeping your binaries separate and private to use them only amongst your partners, either during development or as a standard business practice, is an important expectation from your container registry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Hosting Multiple Versions Across all of your Microservices Daily:  There are significant scaling expectations that need to be met by the container registry, especially with millions, or even billions of downloads. Can the registry scale to these needs?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Control of the Software Flow: Last, but not least, the registry should allow you to always be in control. In particular, with how it operates; deleting older images (be it dev, be it unused, etc), how it provides the insight on the usage, how granular access controls are, or how to turn off and pull back published images that are found to be vulnerable post publishing.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do you think I missed something, Let me know.&lt;/p&gt;

</description>
      <category>containerregistry</category>
      <category>kubernetes</category>
      <category>devops</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
