{"id":542763,"date":"2023-01-24T04:48:13","date_gmt":"2023-01-24T01:48:13","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/"},"modified":"2023-01-24T04:48:13","modified_gmt":"2023-01-24T01:48:13","slug":"how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/","title":{"rendered":"#How to Standardize Software Delivery With OCI Artifacts, ORAS, and Docker Hub"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a2ffb7f56602\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a2ffb7f56602\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#%E2%80%9CHow_to_Standardize_Software_Delivery_With_OCI_Artifacts_ORAS_and_Docker_Hub%E2%80%9D\" >&#8220;How to Standardize Software Delivery With OCI Artifacts, ORAS, and Docker Hub&#8221;<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Docker_Hub_vs_OCI_Registries\" >Docker Hub vs OCI Registries<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Why_Generic_Artifacts_Matter\" >Why Generic Artifacts Matter<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Is_ORAS_a_Breaking_Change_for_Container_Images\" >Is ORAS a Breaking Change for Container Images?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Installing_the_ORAS_CLI\" >Installing the ORAS CLI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Using_ORAS_With_Docker_Hub\" >Using ORAS With Docker Hub<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Login_to_Your_Registry\" >Login to Your Registry<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Push_Your_Artifact\" >Push Your Artifact<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Managing_Artifacts_In_Docker_Hubs_UI\" >Managing Artifacts In Docker Hub\u2019s UI<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Pulling_Your_Artifact\" >Pulling Your Artifact<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/#Summary\" >Summary<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1><span class=\"ez-toc-section\" id=\"%E2%80%9CHow_to_Standardize_Software_Delivery_With_OCI_Artifacts_ORAS_and_Docker_Hub%E2%80%9D\"><\/span>&#8220;How to Standardize Software Delivery With OCI Artifacts, ORAS, and Docker Hub&#8221;<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<div>\n<img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage alignnone size-full wp-image-866165\" data-pagespeed-no-defer=\"\" src=\"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2023\/01\/ORAS.jpg?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"ORAS logo\" width=\"1202\" height=\"677\"\/><\/p>\n<p>Docker Hub is the best known registry for distributing and sharing container images. Docker Hub and other <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/opencontainers.org\">OCI-compliant registries<\/a> can now do more than just container images, though. The <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/oras.land\">ORAS (OCI Registry As Storage) project<\/a> transforms registries into generic artifact stores, capable of publishing any asset relevant to your <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">app<\/a>lication.<\/p>\n<p>In this article, you\u2019ll learn what ORAS is, the challenges it solves, and how to get started using it with Docker Hub.<\/p>\n<h2 id=\"docker-hub-vs-oci-registries\"><span class=\"ez-toc-section\" id=\"Docker_Hub_vs_OCI_Registries\"><\/span>Docker Hub vs OCI Registries<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>First, let\u2019s get one detail clear: the container ecosystem is more than just Docker. The tools and processes which Docker pioneered have been standardized by the OCI. Docker is now one implementation of the OCI specifications, alongside other compatible container systems such as Podman and Kubernetes.<\/p>\n<p>Docker Hub is an OCI Registry-compatible platform for delivering container images. OCI container tools can consume content from Docker Hub and other registries via commands like <code>docker pull<\/code> and <code>docker push<\/code>. While these have previously only worked with container images, now you can use the same mechanism to distribute your app\u2019s other components.<\/p>\n<h2 id=\"why-generic-artifacts-matter\"><span class=\"ez-toc-section\" id=\"Why_Generic_Artifacts_Matter\"><\/span>Why Generic Artifacts Matter<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>This functionality is being developed under the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/oras.land\">ORAS<\/a> banner. It remodels registries as \u201cgeneric artifact stores\u201d which you can interact with using the familiar push\/pull workflow.<\/p>\n<p>An artifact is anything that a user might need to successfully run your software. This could be a container image, or another type of asset that makes sense for your project:<\/p>\n<ul>\n<li>Helm charts<\/li>\n<li>Precompiled binaries and installer packages<\/li>\n<li>SBOMs<\/li>\n<li>Recommended security policy configurations, such as <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.openpolicyagent.org\">OPA rules<\/a><\/li>\n<li>Release signatures, certificates, and metadata<\/li>\n<\/ul>\n<p>These vital assets can often be hard for users to find. They tend to be scattered across different source control platforms, package managers, and direct website downloads. With ORAS, you can deposit everything into one centralized registry, then let users retrieve content using a single set of tools and credentials. Viewing the SBOM for your v1.1.0 release is as simple as <code>oras pull example.com\/my-app\/sbom:v1.1.0<\/code>, for example.<\/p>\n<h2 id=\"is-oras-a-breaking-change-for-container-images\"><span class=\"ez-toc-section\" id=\"Is_ORAS_a_Breaking_Change_for_Container_Images\"><\/span>Is ORAS a Breaking Change for Container Images?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>ORAS doesn\u2019t break any existing container registry features. You can keep running commands such as <code>docker push my-image:latest<\/code> to move your images around.<\/p>\n<p>There are significant changes to content storage behind the scenes, however. ORAS removes the historical assumption that all registry content is an image. To support artifacts, registries have to track the type of each upload that\u2019s completed. Different kinds of artifact are termed <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/oras-project\/artifacts-spec\">\u201cmedia types\u201d<\/a> within ORAS.<\/p>\n<p>Popular community projects can register their own <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/social-mediaa\/\" data-internallinksmanager029f6b8e52c=\"1\" title=\"Social Media\" target=\"_blank\" rel=\"noopener\">media<\/a> types to identify commonly used artifact classifications, <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/oras-project\/artifacts-spec\">such as<\/a> Helm charts. This allows registry providers to display relevant information about the artifacts you\u2019ve stored.<\/p>\n<p>The container image media type is automatically used when you push from existing tools such as <code>docker push<\/code>. A default \u201cunknown\u201d type is applied when you upload directly from the ORAS CLI, unless you specify a registered type.<\/p>\n<h2 id=\"installing-the-oras-cli\"><span class=\"ez-toc-section\" id=\"Installing_the_ORAS_CLI\"><\/span>Installing the ORAS CLI<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You need the ORAS CLI to push and pull artifacts with arbitrary types. You can download the latest version <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/oras-project\/oras\/releases\">from the project\u2019s GitHub releases page<\/a>. Only macOS and Linux systems are currently supported.<\/p>\n<p>Extract the downloaded archive, then copy the <code>oras<\/code> binary to a location that\u2019s in your path:<\/p>\n<pre>$ tar -zxf oras_0.16.0_*.tar.gz -C oras-install\/&#13;\n$ mv oras-install\/oras \/usr\/local\/bin\/&#13;\n$ rm -rf oras_0.16.0_*.tar.gz oras-install\/<\/pre>\n<p>Check your binary\u2019s working by running the <code>oras version<\/code> command:<\/p>\n<pre>$ oras version&#13;\n0.16.0<\/pre>\n<p>Now you\u2019re ready to start using ORAS.<\/p>\n<h2 id=\"using-oras-with-docker-hub\"><span class=\"ez-toc-section\" id=\"Using_ORAS_With_Docker_Hub\"><\/span>Using ORAS With Docker Hub<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>ORAS is only compatible with registries <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/oras.land\/implementors\">that have implemented support<\/a> for the OCI Artifacts specification. This list now features most major vendors, including Amazon ECR, Azure, Google, and GitHub, as well as self-hosted instances deployed using the <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/hub.docker.com\/_\/registry\">CNCF distribution<\/a>.<\/p>\n<p>We\u2019ll use Docker Hub for this article as it\u2019s the most popular registry solution. It <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/www.docker.com\/blog\/announcing-docker-hub-oci-artifacts-support\">added full support<\/a> for OCI Artifacts in November 2022.<\/p>\n<h3 id=\"login-to-your-registry\"><span class=\"ez-toc-section\" id=\"Login_to_Your_Registry\"><\/span>Login to Your Registry<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>ORAS <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/oras.land\/cli\/0_authentication\">automatically reuses<\/a> registry credentials you\u2019ve previously added to your <code>~\/.docker\/config.json<\/code> file. If you need to login to Docker Hub, you can run either <code>docker login<\/code> or <code>oras login<\/code> to do so:<\/p>\n<pre>$ oras login -u username -p password_or_personal_access_token&#13;\n&#13;\n$ docker login -u username -p password_or_personal_access_token<\/pre>\n<p>Next create a simple file to upload to the registry. Remember there\u2019s no restrictions on the kind of asset you push. This example is a contrived JSON file that describes the project\u2019s status, but you can upload anything that\u2019ll be useful to your users or developers.<\/p>\n<pre>$ echo '{\"app\": \"oras-demo\", \"version\": \"1.1.0\"}' &gt; artifact.json<\/pre>\n<p>Now you\u2019re ready to push your file with the ORAS CLI.<\/p>\n<h3 id=\"push-your-artifact\"><span class=\"ez-toc-section\" id=\"Push_Your_Artifact\"><\/span>Push Your Artifact<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Run the following command to push your artifact, after replacing <code>&lt;username&gt;<\/code> with your actual Docker Hub username:<\/p>\n<pre>$ oras push docker.io\/&lt;username&gt;\/oras-demo:1.1.0 \\&#13;\n    artifact.json:application\/json \\&#13;\n    --artifact-type application\/vnd.unknown.config.v1+json&#13;\nUploading 7ac68d8d2a12 artifact.json&#13;\nUploaded  7ac68d8d2a12 artifact.json&#13;\nPushed docker.io\/ilmiont\/oras-demo:1.1.0&#13;\nDigest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b<\/pre>\n<p>There are a few noteworthy details in this command:<\/p>\n<ul>\n<li>The first argument defines the registry to push to and the tag to assign to the artifact. This is similar to pushing a container image tag.<\/li>\n<li>Unlike the <code>docker<\/code> CLI, ORAS requires you to specify the registry URL (<code>docker.io<\/code> for Docker Hub). ORAS is a generic tool that can\u2019t make assumptions about what or where you\u2019re pushing.<\/li>\n<li>The second argument specifies the path to the file you\u2019re uploading in <code>filename:content-type<\/code> format. As the example file is JSON, the <code>application\/json<\/code> content type is selected.<\/li>\n<li>The third argument specifies the ORAS artifact type (media type) to assign to your artifact. You should use a standard <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/oras-project\/artifacts-spec\">media type<\/a> if you\u2019re uploading a registered kind of artifact, like a Helm chart, but the \u201cunknown\u201d default is appropriate for this demo.<\/li>\n<\/ul>\n<p>The upload progress is shown in your terminal, similarly to a regular <code>docker push<\/code>. Try running the <code>oras repo tags<\/code> command to confirm the push completed:<\/p>\n<pre>$ oras repo tags docker.io\/&lt;username&gt;\/oras-demo&#13;\n1.1.0<\/pre>\n<h3 id=\"managing-artifacts-in-docker-hubs-ui\"><span class=\"ez-toc-section\" id=\"Managing_Artifacts_In_Docker_Hubs_UI\"><\/span>Managing Artifacts In Docker Hub\u2019s UI<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Your artifact will also appear on the Docker Hub website. In the Repositories list, you\u2019ll see <code>Contains: Other<\/code> to denote that the repository holds a generic artifact. Container image repositories are labelled as <code>Contains: Image<\/code>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-866166\" data-pagespeed-lazy-src=\"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-18-at-15-29-45-Repositories-Docker-Hub.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"image showing a generic artifact in Docker Hub\" width=\"960\" height=\"468\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Select the repository to view its details, add a description, and see all the available tags. It\u2019s similar to working with container images.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-866167\" data-pagespeed-lazy-src=\"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2023\/01\/Screenshot-2023-01-18-at-15-31-17-ilmiont_oras-demo-Tags-Docker-Hub.png?trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"image showing a generic artifact in Docker Hub\" width=\"960\" height=\"468\" src=\"\/pagespeed_static\/1.JiBnMqyl6S.gif\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<h3 id=\"pulling-your-artifact\"><span class=\"ez-toc-section\" id=\"Pulling_Your_Artifact\"><\/span>Pulling Your Artifact<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>With your artifact available in the registry, you can now switch to another machine and repeat the steps to install the ORAS CLI and login to your Docker Hub account. Once you\u2019ve authenticated, use the <code>oras pull<\/code> command to retrieve your artifact:<\/p>\n<pre>$ oras pull docker.io\/&lt;username&gt;\/oras-demo:1.1.0&#13;\nDownloading 7ac68d8d2a12 artifact.json&#13;\nDownloaded  7ac68d8d2a12 artifact.json&#13;\nPulled docker.io\/ilmiont\/oras-demo:1.1.0&#13;\nDigest: sha256:41abfed0ab43a24933c5eafe3c363418264a59eee527821a39fe7c0abf25570b<\/pre>\n<p>The files in the artifact will be deposited into your working directory:<\/p>\n<pre>$ ls&#13;\nartifact.json&#13;\n&#13;\n$ cat artifact.json&#13;\n{\"app\": \"demo-oras\", \"version\": \"1.1.0\"}<\/pre>\n<p>You\u2019ve successfully used ORAS to distribute your application\u2019s artifacts, using the existing infrastructure available from your container registry provider.<\/p>\n<h2 id=\"summary\"><span class=\"ez-toc-section\" id=\"Summary\"><\/span>Summary<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>ORAS transforms container image registries into generic distribution platforms. You can push any artifact relevant to your application and users can retrieve it using one consistent mechanism. This avoids having to maintain, publish to, and switch between multiple delivery channels.<\/p>\n<p>ORAS support is being added to popular ecosystem tools too. Helm lets you directly push charts to an ORAS registry <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/helm.sh\/blog\/storing-charts-in-oci\/\">using its <code>helm push<\/code> command<\/a>, for example. This avoids having to manually export the chart so you can push it with <code>oras push<\/code>. It also handles setting the correct ORAS media type for you. You can expect more tools to start integrating ORAS, allowing you to push all kinds of content straight to your centralized registry.<\/p>\n<\/div>\n<p><script>\n setTimeout(function(){\n  !function(f,b,e,v,n,t,s)\n  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n  n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n  n.queue=[];t=b.createElement(e);t.async=!0;\n  t.src=v;s=b.getElementsByTagName(e)[0];\n  s.parentNode.insertBefore(t,s) } (window, document,'script',\n  'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\n   fbq('init', '335401813750447');\n   fbq('track', 'PageView');\n  },3000);\n<\/script><\/p>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.howtogeek.com\/devops\/how-to-standardize-software-delivery-with-oci-artifacts-oras-and-docker-hub\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;How to Standardize Software Delivery With OCI Artifacts, ORAS, and Docker Hub&#8221; Docker Hub is the best known registry for distributing and sharing container images. Docker Hub and other OCI-compliant registries can now do more than just container images, though. The ORAS (OCI Registry As Storage) project transforms registries into generic artifact stores, capable of&#8230;<\/p>\n","protected":false},"author":1,"featured_media":542764,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.howtogeek.com\/wp-content\/uploads\/2023\/01\/ORAS.jpg?height=200p&trim=2,2,2,2","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-542763","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/542763","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=542763"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/542763\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/542764"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=542763"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=542763"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=542763"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}