{"id":3840,"date":"2019-11-25T08:00:18","date_gmt":"2019-11-25T02:30:18","guid":{"rendered":"http:\/\/www.upnxtblog.com\/?p=3840"},"modified":"2020-04-23T12:48:18","modified_gmt":"2020-04-23T07:18:18","slug":"using-docker-application-packages-to-deliver-apps-across-teams","status":"publish","type":"post","link":"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/","title":{"rendered":"Using Docker Application Packages to Deliver Apps across Teams"},"content":{"rendered":"<div class='booster-block booster-read-block'><\/div><p>Cloud native applications typically use different technologies, each with their own packaging formats. For example, If you\u2019re working on Microsoft Azure then it would be ARM templates, or if its Kubernetes, then its Helm charts, or if it\u2019s on AWS then it would be CloudFormation and so on.<\/p>\n<p>Distributed applications usually comprise\u00a0<em>executable units<\/em>\u00a0and\u00a0<em>supporting API-based services<\/em>. Executable units could span across environments like IaaS (like OpenStack or Azure), container orchestrators (like Kubernetes or Nomad), container runtimes (like local Docker or ACI), cloud platform services (like object storage or Database as a Service) and Functions-as-a-Service (FaaS), as well as higher-level PaaS services. Along with these components, many managed cloud services (e.g. load balancers, routers to databases) are provisioned and interconnected via REST APIs.<\/p>\n<p>In the industry, currently, there is no single solution for defining and packaging multi-service, multi-format distributed applications.<\/p>\n<p>In this article, we will look at how the <strong>CNAB packaging format<\/strong> provides application providers and developers with a way of installing a multi-component application into a distributed computing environment, supporting all of the above types, and makes it easy to deliver apps across teams, organizations and marketplaces.<\/p>\n<p><em><span style=\"font-size: 12pt;\">Cross posted from : <a href=\"https:\/\/www.infoq.com\/articles\/docker-application-packages-cnab\/\" target=\"_blank\" rel=\"noopener\">InfoQ.com<\/a>\u00a0<\/span><\/em><\/p>\n<p><span style=\"font-family: inherit; font-style: inherit; font-weight: inherit;\"><\/span><\/p>\n<h2>Introducing Cloud Native Application Bundle (CNAB)<\/h2>\n<p><strong><a href=\"http:\/\/www.cnab.io\/\" target=\"_blank\" rel=\"noopener\">CNAB<\/a> <\/strong>is an open-source, cloud-agnostic specification for packaging and running distributed applications. Created by Microsoft, Docker, HashiCorp, Bitnami, Pivotal, and many others. It unifies the management of multi-service, distributed applications across different toolchains into a single all-in-one packaging format.<\/p>\n<table style=\"border-collapse: collapse; width: 80.4848%;\">\n<tbody>\n<tr>\n<td style=\"width: 35.3333%;\"><strong>Simplifies complex deployments.<\/strong><\/td>\n<td style=\"width: 45.1515%;\">With CNAB, you can package multi-service, multi-format distributed applications. So deployments can be done with ease &amp; simplified.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 35.3333%;\"><strong>Open Source, Cloud Agnostic<\/strong><\/td>\n<td style=\"width: 45.1515%;\">CNAB bundles can have varied infrastructure components or services that you need. CNABs is the right choice for your multi-cloud strategy.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 35.3333%;\"><strong>Shareable Apps\u00a0<\/strong><\/td>\n<td style=\"width: 45.1515%;\">Enables Developers\/Application Providers to share\/deliver apps across teams, organizations, and marketplaces.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div id=\"lowerFullwidthVCR\"><\/div>\n<p><em><small><strong>Key benefits of CNAB<\/strong><\/small><\/em><\/p>\n<p>According to the\u00a0<a href=\"https:\/\/cnab.io\/\" target=\"_blank\" rel=\"noopener\">CNAB Spec<\/a>, CNAB packaging format brings in:<\/p>\n<ol>\n<li>Support for packages\u00a0<strong>targeted to different runtimes and architectures<\/strong>.<\/li>\n<li>Internally uses containers for encapsulating installation logic so its independent of the underlying cloud environment it runs in.<\/li>\n<li>Comprises of a\u00a0<strong>bundle definition file<\/strong>\u00a0(<em>bundle.json<\/em>) to define the app, and\u00a0<strong>an invocation image<\/strong> to install the app. The invocation image&#8217;s job is to install the required components into the host environment.<\/li>\n<li>CNAB\u00a0<em>bundle definition<\/em>\u00a0is a single file that contains the following information:\n<ul>\n<li>Information about the bundle, like name, bundle version, description, and keywords<\/li>\n<li>Information about the invocation image (the installer program)<\/li>\n<li>List of executable images that this bundle will install<\/li>\n<li>List of credential paths or environment variables that this bundle requires to execute<\/li>\n<\/ul>\n<\/li>\n<li>CNAB invocation image contains a standardized file system layout where metadata and installation data is stored.\n<ul>\n<li>File system hierarchy as specified in the spec<\/li>\n<li>Main entry point (<em>run tool<\/em>) &#8211; Executable responsible for translating action requests (ex. Install \/ update etc.,) to a sequence of tasks<\/li>\n<li>Runtime metadata (For example &#8211; Helm charts, Terraform templates, etc)<\/li>\n<li>Files for constructing the images (For Example &#8211; Dockerfile)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Install Docker App<\/h3>\n<p>There are two ways in which you can install Docker App, either as standalone or as a CLI plugin. Pre-built static binaries are available on <a href=\"https:\/\/github.com\/docker\/app\/releases\" target=\"_blank\" rel=\"noopener\">GitHub releases<\/a> for Windows, Linux, and macOS. Here I\u2019m going to use the Linux version and install Docker app as standalone utility.<\/p>\n<figure id=\"attachment_4519\" aria-describedby=\"caption-attachment-4519\" style=\"width: 864px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4519\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp1\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp1.png?fit=864%2C109&amp;ssl=1\" data-orig-size=\"864,109\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp1\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Docker App Installation&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp1.png?fit=864%2C109&amp;ssl=1\" class=\"size-full wp-image-4519 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp1.png?resize=864%2C109&#038;ssl=1\" alt=\"Docker App Installation\" width=\"864\" height=\"109\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp1.png?w=864&amp;ssl=1 864w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp1.png?resize=300%2C38&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp1.png?resize=768%2C97&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp1.png?resize=600%2C76&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 864px) 100vw, 864px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 864px; --smush-placeholder-aspect-ratio: 864\/109;\" \/><figcaption id=\"caption-attachment-4519\" class=\"wp-caption-text\">Image &#8211; Docker App Installation<\/figcaption><\/figure>\n<figure id=\"attachment_4520\" aria-describedby=\"caption-attachment-4520\" style=\"width: 858px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4520\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp2\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp2.png?fit=858%2C202&amp;ssl=1\" data-orig-size=\"858,202\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp2\" data-image-description=\"&lt;p&gt;Docker App Installation Success&lt;\/p&gt;\n\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp2.png?fit=858%2C202&amp;ssl=1\" class=\"size-full wp-image-4520 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp2.png?resize=858%2C202&#038;ssl=1\" alt=\"Docker App Installation Success\" width=\"858\" height=\"202\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp2.png?w=858&amp;ssl=1 858w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp2.png?resize=300%2C71&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp2.png?resize=768%2C181&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp2.png?resize=600%2C141&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 858px) 100vw, 858px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 858px; --smush-placeholder-aspect-ratio: 858\/202;\" \/><figcaption id=\"caption-attachment-4520\" class=\"wp-caption-text\">Image &#8211; Docker App Installation Success<\/figcaption><\/figure>\n<p><em>In the below example, we are going to check how to convert an existing Compose app into a Docker App project.<\/em><\/p>\n<h2>Create New Helloworld Docker App<\/h2>\n<p>We have got the Docker App setup, use the existing Docker compose file (below) which launches an HTTP echo server that prints the specified text when hit on the configured port.<\/p>\n<p><code>version: '3.2'<\/code><br \/>\n<code>services:<\/code><br \/>\n<code>hello:<\/code><br \/>\n<code>image: hashicorp\/http-echo<\/code><br \/>\n<code>command: [\"-text\", \"hello world\"]<\/code><br \/>\n<code>ports:<\/code><br \/>\n<code>- 5678:5678<\/code><\/p>\n<figure id=\"attachment_4521\" aria-describedby=\"caption-attachment-4521\" style=\"width: 631px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4521\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp3\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp3.png?fit=631%2C276&amp;ssl=1\" data-orig-size=\"631,276\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp3\" data-image-description=\"&lt;p&gt;Hello World Docker compose File&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Hello World Docker compose File&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp3.png?fit=631%2C276&amp;ssl=1\" class=\"size-full wp-image-4521 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp3.png?resize=631%2C276&#038;ssl=1\" alt=\"Hello World Docker compose File\" width=\"631\" height=\"276\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp3.png?w=631&amp;ssl=1 631w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp3.png?resize=300%2C131&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp3.png?resize=600%2C262&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 631px) 100vw, 631px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 631px; --smush-placeholder-aspect-ratio: 631\/276;\" \/><figcaption id=\"caption-attachment-4521\" class=\"wp-caption-text\">Image &#8211; Hello World Docker compose File<\/figcaption><\/figure>\n<p>Run <em>docker-app init<\/em> command from the folder where compose file is located to Create a new Application Package:<\/p>\n<p><code>docker app init --single-file hello<\/code><\/p>\n<figure id=\"attachment_4522\" aria-describedby=\"caption-attachment-4522\" style=\"width: 693px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4522\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp4\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp4.png?fit=693%2C46&amp;ssl=1\" data-orig-size=\"693,46\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp4\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Hello World Docker App Created&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp4.png?fit=693%2C46&amp;ssl=1\" class=\"size-full wp-image-4522 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp4.png?resize=693%2C46&#038;ssl=1\" alt=\"Hello World Docker App Created\" width=\"693\" height=\"46\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp4.png?w=693&amp;ssl=1 693w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp4.png?resize=300%2C20&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp4.png?resize=600%2C40&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 693px) 100vw, 693px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 693px; --smush-placeholder-aspect-ratio: 693\/46;\" \/><figcaption id=\"caption-attachment-4522\" class=\"wp-caption-text\">Image &#8211; Hello World Docker App Created<\/figcaption><\/figure>\n<p>If you check the Docker Application Package\u00a0hello.dockerapp, it will contain three YAML documents:<\/p>\n<ul>\n<li>First section contains <strong>metadata<\/strong> such as name, version, description, and maintainers.<\/li>\n<li>Second section describes the application; this is essentially your <strong>Compose file.<\/strong><\/li>\n<li>Third section would have <strong>parameters<\/strong> for your application<\/li>\n<\/ul>\n<p>If you prefer having the three core documents in separate YAML files, omit the <em>&#8211;single-file option<\/em> to the <code>docker app init<\/code> command. This will create a new directory instead of a single file.<\/p>\n<figure id=\"attachment_4523\" aria-describedby=\"caption-attachment-4523\" style=\"width: 750px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4523\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp5\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp5.png?fit=750%2C548&amp;ssl=1\" data-orig-size=\"750,548\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp5\" data-image-description=\"&lt;p&gt;Docker Application Package File&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Docker Application Package File&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp5.png?fit=750%2C548&amp;ssl=1\" class=\"size-full wp-image-4523 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp5.png?resize=750%2C548&#038;ssl=1\" alt=\"Docker Application Package File\" width=\"750\" height=\"548\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp5.png?w=750&amp;ssl=1 750w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp5.png?resize=300%2C219&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp5.png?resize=600%2C438&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 750px) 100vw, 750px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 750px; --smush-placeholder-aspect-ratio: 750\/548;\" \/><figcaption id=\"caption-attachment-4523\" class=\"wp-caption-text\">Image &#8211; Docker Application Package File<\/figcaption><\/figure>\n<h3>Edit Metadata<\/h3>\n<p>Let\u2019s modify the Compose file section in <code>helloworld.dockerapp<\/code>, by introducing variables <em>$text<\/em> and <em>$port.<\/em><\/p>\n<p><code>version: '3.2'<\/code><br \/>\n<code>services:<\/code><br \/>\n<code>hello:<\/code><br \/>\n<code>image: hashicorp\/http-echo<\/code><br \/>\n<code>command: [\"-text\", \"${text}\"]<\/code><br \/>\n<code>ports:<\/code><br \/>\n<code>- ${port}:5678<\/code><\/p>\n<figure id=\"attachment_4524\" aria-describedby=\"caption-attachment-4524\" style=\"width: 329px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4524\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp6\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp6.png?fit=329%2C175&amp;ssl=1\" data-orig-size=\"329,175\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp6\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Modified Docker Application Package File&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp6.png?fit=329%2C175&amp;ssl=1\" class=\"size-full wp-image-4524 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp6.png?resize=329%2C175&#038;ssl=1\" alt=\"Modified Docker Application Package File\" width=\"329\" height=\"175\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp6.png?w=329&amp;ssl=1 329w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp6.png?resize=300%2C160&amp;ssl=1 300w\" data-sizes=\"auto, (max-width: 329px) 100vw, 329px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 329px; --smush-placeholder-aspect-ratio: 329\/175;\" \/><figcaption id=\"caption-attachment-4524\" class=\"wp-caption-text\">Image &#8211; Modified Docker Application Package File<\/figcaption><\/figure>\n<h3>Inspect Docker App<\/h3>\n<p>Before launching the modified Docker Application Package, let\u2019s do inspect and check if everything looks good.<\/p>\n<figure id=\"attachment_4525\" aria-describedby=\"caption-attachment-4525\" style=\"width: 671px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4525\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp7\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp7.png?fit=671%2C247&amp;ssl=1\" data-orig-size=\"671,247\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp7\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Inspect Docker App &lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp7.png?fit=671%2C247&amp;ssl=1\" class=\"size-full wp-image-4525 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp7.png?resize=671%2C247&#038;ssl=1\" alt=\"Inspect Docker App\" width=\"671\" height=\"247\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp7.png?w=671&amp;ssl=1 671w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp7.png?resize=300%2C110&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp7.png?resize=600%2C221&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 671px) 100vw, 671px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 671px; --smush-placeholder-aspect-ratio: 671\/247;\" \/><figcaption id=\"caption-attachment-4525\" class=\"wp-caption-text\">Image &#8211; Inspect Docker App<\/figcaption><\/figure>\n<p>Docker App also provides <em>validate<\/em> command to check syntax and other aspects of the configuration. We are going to skip &amp; render the app.<\/p>\n<h3>Render Docker App<\/h3>\n<p>Render command will display the compose file with the default values.<\/p>\n<figure id=\"attachment_4526\" aria-describedby=\"caption-attachment-4526\" style=\"width: 503px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4526\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp8\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp8.png?fit=503%2C257&amp;ssl=1\" data-orig-size=\"503,257\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp8\" data-image-description=\"&lt;p&gt;Render Docker App &lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Render Docker App &lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp8.png?fit=503%2C257&amp;ssl=1\" class=\"size-full wp-image-4526 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp8.png?resize=503%2C257&#038;ssl=1\" alt=\"Render Docker App\" width=\"503\" height=\"257\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp8.png?w=503&amp;ssl=1 503w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp8.png?resize=300%2C153&amp;ssl=1 300w\" data-sizes=\"auto, (max-width: 503px) 100vw, 503px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 503px; --smush-placeholder-aspect-ratio: 503\/257;\" \/><figcaption id=\"caption-attachment-4526\" class=\"wp-caption-text\">Image &#8211; Render Docker App<\/figcaption><\/figure>\n<p>All set now, the next step is to deploy the Docker App project. Here we have 2 options, either we can launch it as a Native Docker app application or as a Compose app application.<\/p>\n<p>We are going to use the Compose app option and then push the application to the DockerHub registry.<\/p>\n<h3>Launch Docker App<\/h3>\n<figure id=\"attachment_4527\" aria-describedby=\"caption-attachment-4527\" style=\"width: 992px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4527\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp9\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp9.png?fit=992%2C313&amp;ssl=1\" data-orig-size=\"992,313\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp9\" data-image-description=\"&lt;p&gt;Launch Docker App &lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Launch Docker App &lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp9.png?fit=992%2C313&amp;ssl=1\" class=\"size-full wp-image-4527 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp9.png?resize=992%2C313&#038;ssl=1\" alt=\"Launch Docker App \" width=\"992\" height=\"313\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp9.png?w=992&amp;ssl=1 992w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp9.png?resize=300%2C95&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp9.png?resize=768%2C242&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp9.png?resize=600%2C189&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 992px) 100vw, 992px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 992px; --smush-placeholder-aspect-ratio: 992\/313;\" \/><figcaption id=\"caption-attachment-4527\" class=\"wp-caption-text\">Image &#8211; Launch Docker App<\/figcaption><\/figure>\n<figure id=\"attachment_4529\" aria-describedby=\"caption-attachment-4529\" style=\"width: 464px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4529\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp10\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp10.png?fit=464%2C215&amp;ssl=1\" data-orig-size=\"464,215\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp10\" data-image-description=\"&lt;p&gt;Output of Docker App &lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Output of Docker App &lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp10.png?fit=464%2C215&amp;ssl=1\" class=\"size-full wp-image-4529 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp10.png?resize=464%2C215&#038;ssl=1\" alt=\"Output of Docker App \" width=\"464\" height=\"215\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp10.png?w=464&amp;ssl=1 464w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp10.png?resize=300%2C139&amp;ssl=1 300w\" data-sizes=\"auto, (max-width: 464px) 100vw, 464px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 464px; --smush-placeholder-aspect-ratio: 464\/215;\" \/><figcaption id=\"caption-attachment-4529\" class=\"wp-caption-text\">Image &#8211; Output of Docker App<\/figcaption><\/figure>\n<h3>Launch Docker App with different configuration<\/h3>\n<p>Although Docker Compose configuration has default ports &amp; text values, we can set the values at runtime and deploy them.<\/p>\n<p>Let us try different configurations with different values for port &amp; text.<\/p>\n<figure id=\"attachment_4530\" aria-describedby=\"caption-attachment-4530\" style=\"width: 995px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4530\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp11\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp11.png?fit=995%2C344&amp;ssl=1\" data-orig-size=\"995,344\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp11\" data-image-description=\"&lt;p&gt;Launch Docker App with different configuration&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Launch Docker App with different configuration&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp11.png?fit=995%2C344&amp;ssl=1\" class=\"size-full wp-image-4530 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp11.png?resize=995%2C344&#038;ssl=1\" alt=\"Launch Docker App with different configuration\" width=\"995\" height=\"344\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp11.png?w=995&amp;ssl=1 995w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp11.png?resize=300%2C104&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp11.png?resize=768%2C266&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp11.png?resize=600%2C207&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 995px) 100vw, 995px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 995px; --smush-placeholder-aspect-ratio: 995\/344;\" \/><figcaption id=\"caption-attachment-4530\" class=\"wp-caption-text\">Image &#8211; Launch Docker App with different configuration<\/figcaption><\/figure>\n<figure id=\"attachment_4531\" aria-describedby=\"caption-attachment-4531\" style=\"width: 400px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4531\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp12\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp12.png?fit=400%2C206&amp;ssl=1\" data-orig-size=\"400,206\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp12\" data-image-description=\"&lt;p&gt;Output of Docker App &lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Output of Docker App &lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp12.png?fit=400%2C206&amp;ssl=1\" class=\"size-full wp-image-4531 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp12.png?resize=400%2C206&#038;ssl=1\" alt=\"Output of Docker App \" width=\"400\" height=\"206\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp12.png?w=400&amp;ssl=1 400w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp12.png?resize=300%2C155&amp;ssl=1 300w\" data-sizes=\"auto, (max-width: 400px) 100vw, 400px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 400px; --smush-placeholder-aspect-ratio: 400\/206;\" \/><figcaption id=\"caption-attachment-4531\" class=\"wp-caption-text\">Image &#8211; Output of Docker App<\/figcaption><\/figure>\n<p>You can also check the status of the app with the <em>docker app status &lt;app-name&gt;<\/em> command.<\/p>\n<h3>Share Docker App on DockerHub<\/h3>\n<p>With a new Docker application package, compose configuration with default values can be pushed to DockerHub and be shared across developers\/teams.<\/p>\n<figure id=\"attachment_4532\" aria-describedby=\"caption-attachment-4532\" style=\"width: 865px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4532\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp13\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp13.png?fit=865%2C150&amp;ssl=1\" data-orig-size=\"865,150\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp13\" data-image-description=\"&lt;p&gt;Share Docker App on DockerHub&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Share Docker App on DockerHub&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp13.png?fit=865%2C150&amp;ssl=1\" class=\"size-full wp-image-4532 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp13.png?resize=865%2C150&#038;ssl=1\" alt=\"Share Docker App on DockerHub\" width=\"865\" height=\"150\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp13.png?w=865&amp;ssl=1 865w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp13.png?resize=300%2C52&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp13.png?resize=768%2C133&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp13.png?resize=600%2C104&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 865px) 100vw, 865px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 865px; --smush-placeholder-aspect-ratio: 865\/150;\" \/><figcaption id=\"caption-attachment-4532\" class=\"wp-caption-text\">Image &#8211; Share Docker App on DockerHub<\/figcaption><\/figure>\n<h3>Install as Docker Native App<\/h3>\n<p>Application can also be installed by running <em>docker app deploy<\/em> or can use the rendered version and run <code><em>docker stack deploy render\/docker-compose.yml<\/em> or <em>docker-compose \u2013f up.<\/em><\/code><\/p>\n<figure id=\"attachment_4534\" aria-describedby=\"caption-attachment-4534\" style=\"width: 710px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4534\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp14\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp14.png?fit=710%2C114&amp;ssl=1\" data-orig-size=\"710,114\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp14\" data-image-description=\"&lt;p&gt;Install Docker App &lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Install Docker App &lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp14.png?fit=710%2C114&amp;ssl=1\" class=\"size-full wp-image-4534 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp14.png?resize=710%2C114&#038;ssl=1\" alt=\"Install Docker App \" width=\"710\" height=\"114\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp14.png?w=710&amp;ssl=1 710w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp14.png?resize=300%2C48&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp14.png?resize=600%2C96&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 710px) 100vw, 710px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 710px; --smush-placeholder-aspect-ratio: 710\/114;\" \/><figcaption id=\"caption-attachment-4534\" class=\"wp-caption-text\">Image &#8211; Install Docker App<\/figcaption><\/figure>\n<h3>Upgrade Docker App<\/h3>\n<p>Once your Application Packages are in DockerHub or registry, you can use commands like install, upgrade, uninstall, etc.,<\/p>\n<figure id=\"attachment_4535\" aria-describedby=\"caption-attachment-4535\" style=\"width: 965px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4535\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp15\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp15.png?fit=965%2C72&amp;ssl=1\" data-orig-size=\"965,72\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp15\" data-image-description=\"&lt;p&gt;Upgrade Docker App &lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Upgrade Docker App &lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp15.png?fit=965%2C72&amp;ssl=1\" class=\"size-full wp-image-4535 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp15.png?resize=965%2C72&#038;ssl=1\" alt=\"Upgrade Docker App \" width=\"965\" height=\"72\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp15.png?w=965&amp;ssl=1 965w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp15.png?resize=300%2C22&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp15.png?resize=768%2C57&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp15.png?resize=600%2C45&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 965px) 100vw, 965px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 965px; --smush-placeholder-aspect-ratio: 965\/72;\" \/><figcaption id=\"caption-attachment-4535\" class=\"wp-caption-text\">Image &#8211; Upgrade Docker App<\/figcaption><\/figure>\n<h3>Uninstall Docker App<\/h3>\n<figure id=\"attachment_4536\" aria-describedby=\"caption-attachment-4536\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4536\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp16\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp16.png?fit=600%2C73&amp;ssl=1\" data-orig-size=\"600,73\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp16\" data-image-description=\"&lt;p&gt;Uninstall Docker App &lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Uninstall Docker App &lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp16.png?fit=600%2C73&amp;ssl=1\" class=\"size-full wp-image-4536 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp16.png?resize=600%2C73&#038;ssl=1\" alt=\"Uninstall Docker App \" width=\"600\" height=\"73\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp16.png?w=600&amp;ssl=1 600w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp16.png?resize=300%2C37&amp;ssl=1 300w\" data-sizes=\"auto, (max-width: 600px) 100vw, 600px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 600px; --smush-placeholder-aspect-ratio: 600\/73;\" \/><figcaption id=\"caption-attachment-4536\" class=\"wp-caption-text\">Image &#8211; Uninstall Docker App<\/figcaption><\/figure>\n<p>In the next section, we will take another example that has Angular, SpringBoot &amp; PostgreSQL stack, and create Docker Application Package out of it.<\/p>\n<h2>Create Docker App for Angular, SpringBoot &amp; PostgreSQL application<\/h2>\n<p>Below is the compose file for the Angular, SpringBoot &amp; PostgreSQL application that we are going to use.<\/p>\n<p><code>version: '3'<\/code><br \/>\n<code>services:<\/code><br \/>\n<code>ui:<\/code><br \/>\n<code>build:<\/code><br \/>\n<code>context: .<\/code><br \/>\n<code>dockerfile: UIDockerfile<\/code><br \/>\n<code>ports:<\/code><br \/>\n<code>- '4200:4200'<\/code><br \/>\n<code>networks:<\/code><br \/>\n<code>- samplenet<\/code><br \/>\n<code>links:<\/code><br \/>\n<code>- 'api:api'<\/code><br \/>\n<code>api:<\/code><br \/>\n<code>build:<\/code><br \/>\n<code>context: .<\/code><br \/>\n<code>dockerfile: AppDockerfile<\/code><br \/>\n<code>ports:<\/code><br \/>\n<code>- '8080:8080'<\/code><br \/>\n<code>depends_on:<\/code><br \/>\n<code>- db<\/code><br \/>\n<code>networks:<\/code><br \/>\n<code>- samplenet<\/code><br \/>\n<code>links:<\/code><br \/>\n<code>- 'db:db'<\/code><br \/>\n<code>db: <\/code><br \/>\n<code>build:<\/code><br \/>\n<code>context: .<\/code><br \/>\n<code>dockerfile: DBDockerfile<\/code><br \/>\n<code>volumes:<\/code><br \/>\n<code>- 'postgresdb:\/var\/lib\/postgresql\/data'<\/code><br \/>\n<code>environment:<\/code><br \/>\n<code>POSTGRES_USER: postgres<\/code><br \/>\n<code>POSTGRES_PASSWORD: postgres<\/code><br \/>\n<code>POSTGRES_DB: testdb<\/code><br \/>\n<code>ports:<\/code><br \/>\n<code>- '5432:5432'<\/code><br \/>\n<code>healthcheck:<\/code><br \/>\n<code>test:<\/code><br \/>\n<code>- CMD-SHELL<\/code><br \/>\n<code>- 'pg_isready -U postgres'<\/code><br \/>\n<code>interval: 10s<\/code><br \/>\n<code>timeout: 5s<\/code><br \/>\n<code>retries: 5<\/code><br \/>\n<code>networks:<\/code><br \/>\n<code>- samplenet<\/code><br \/>\n<code>networks:<\/code><br \/>\n<code>samplenet: null<\/code><br \/>\n<code>volumes:<\/code><br \/>\n<code>postgresdb: {}<\/code><\/p>\n<p>Above compose file defines 4 services:<\/p>\n<ul>\n<li><code>ui<\/code> : Is for Angular application runs on port <code>4200<\/code>.<\/li>\n<li><code>api<\/code> :\u00a0Is for Spring boot application runs on port <code>8080<\/code>.<\/li>\n<li><code>db<\/code> : Is for postgresdb application runs on port <code>5432<\/code>.<\/li>\n<li>All the above services uses <code>samplenet<\/code> network and<\/li>\n<li>Persistent volume <code>postgresdb<\/code> definition is for db service<\/li>\n<li>Added healthcheck section for db service to keep a tab on the health of the database<\/li>\n<li><code>depends_on<\/code> denotes the service dependencies. When you start the services, compose would start the dependent services as well.<\/li>\n<\/ul>\n<p>Run <code><em>docker-app init<\/em><\/code> command from the folder where compose file is located to Create a new Application Package:<\/p>\n<figure id=\"attachment_4538\" aria-describedby=\"caption-attachment-4538\" style=\"width: 827px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4538\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp17\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp17.png?fit=827%2C61&amp;ssl=1\" data-orig-size=\"827,61\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp17\" data-image-description=\"&lt;p&gt;Create new Application Package&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Create new Application Package&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp17.png?fit=827%2C61&amp;ssl=1\" class=\"size-full wp-image-4538 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp17.png?resize=827%2C61&#038;ssl=1\" alt=\"Create new Application Package\" width=\"827\" height=\"61\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp17.png?w=827&amp;ssl=1 827w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp17.png?resize=300%2C22&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp17.png?resize=768%2C57&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp17.png?resize=600%2C44&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 827px) 100vw, 827px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 827px; --smush-placeholder-aspect-ratio: 827\/61;\" \/><figcaption id=\"caption-attachment-4538\" class=\"wp-caption-text\">Image &#8211; Create new Application Package<\/figcaption><\/figure>\n<figure id=\"attachment_4539\" aria-describedby=\"caption-attachment-4539\" style=\"width: 816px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4539\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp18\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp18.png?fit=816%2C504&amp;ssl=1\" data-orig-size=\"816,504\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp18\" data-image-description=\"&lt;p&gt;Generated Application Package&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Generated Application Package&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp18.png?fit=816%2C504&amp;ssl=1\" class=\"size-full wp-image-4539 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp18.png?resize=816%2C504&#038;ssl=1\" alt=\"Generated Application Package\" width=\"816\" height=\"504\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp18.png?w=816&amp;ssl=1 816w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp18.png?resize=300%2C185&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp18.png?resize=768%2C474&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp18.png?resize=600%2C371&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 816px) 100vw, 816px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 816px; --smush-placeholder-aspect-ratio: 816\/504;\" \/><figcaption id=\"caption-attachment-4539\" class=\"wp-caption-text\">Image &#8211; Generated Application Package<\/figcaption><\/figure>\n<p>Let\u2019s do inspect and check if everything is proper<\/p>\n<figure id=\"attachment_4540\" aria-describedby=\"caption-attachment-4540\" style=\"width: 809px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4540\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp19\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp19.png?fit=809%2C397&amp;ssl=1\" data-orig-size=\"809,397\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp19\" data-image-description=\"&lt;p&gt;Inspect Application Package&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Inspect Application Package&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp19.png?fit=809%2C397&amp;ssl=1\" class=\"size-full wp-image-4540 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp19.png?resize=809%2C397&#038;ssl=1\" alt=\"Inspect Application Package\" width=\"809\" height=\"397\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp19.png?w=809&amp;ssl=1 809w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp19.png?resize=300%2C147&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp19.png?resize=768%2C377&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp19.png?resize=600%2C294&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 809px) 100vw, 809px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 809px; --smush-placeholder-aspect-ratio: 809\/397;\" \/><figcaption id=\"caption-attachment-4540\" class=\"wp-caption-text\">Image &#8211; Inspect Application Package<\/figcaption><\/figure>\n<p>Use render option to start the application using Docker Compose up command<\/p>\n<figure id=\"attachment_4541\" aria-describedby=\"caption-attachment-4541\" style=\"width: 1019px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4541\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp20\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp20.png?fit=1019%2C332&amp;ssl=1\" data-orig-size=\"1019,332\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp20\" data-image-description=\"&lt;p&gt;Render Application Package&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Render Application Package&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp20.png?fit=1019%2C332&amp;ssl=1\" class=\"size-full wp-image-4541 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp20.png?resize=1019%2C332&#038;ssl=1\" alt=\"Render Application Package\" width=\"1019\" height=\"332\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp20.png?w=1019&amp;ssl=1 1019w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp20.png?resize=300%2C98&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp20.png?resize=768%2C250&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp20.png?resize=600%2C195&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 1019px) 100vw, 1019px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1019px; --smush-placeholder-aspect-ratio: 1019\/332;\" \/><figcaption id=\"caption-attachment-4541\" class=\"wp-caption-text\">Image &#8211; Render Application Package<\/figcaption><\/figure>\n<p>Once you push it to DockerHub, you can share it with the team and they would be able to do all tasks like install, upgrade &amp; uninstall tasks, etc.,<\/p>\n<figure id=\"attachment_4543\" aria-describedby=\"caption-attachment-4543\" style=\"width: 1054px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4543\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp21\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp21.png?fit=1054%2C93&amp;ssl=1\" data-orig-size=\"1054,93\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp21\" data-image-description=\"&lt;p&gt;Push Application Package to DockerHub&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Push Application Package to DockerHub&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp21.png?fit=1024%2C90&amp;ssl=1\" class=\"size-full wp-image-4543 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp21.png?resize=1054%2C93&#038;ssl=1\" alt=\"Push Application Package to DockerHub\" width=\"1054\" height=\"93\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp21.png?w=1054&amp;ssl=1 1054w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp21.png?resize=300%2C26&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp21.png?resize=768%2C68&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp21.png?resize=1024%2C90&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp21.png?resize=600%2C53&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 1054px) 100vw, 1054px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1054px; --smush-placeholder-aspect-ratio: 1054\/93;\" \/><figcaption id=\"caption-attachment-4543\" class=\"wp-caption-text\">Image &#8211; Push Application Package to DockerHub<\/figcaption><\/figure>\n<p>Application can then be installed by running <em>docker app deploy<\/em> or can use the rendered version and run <code><em>docker stack deploy render\/docker-compose.yml or docker-compose \u2013f up.<\/em><\/code><\/p>\n<figure id=\"attachment_4544\" aria-describedby=\"caption-attachment-4544\" style=\"width: 1054px\" class=\"wp-caption aligncenter\"><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"4544\" data-permalink=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/11\/25\/using-docker-application-packages-to-deliver-apps-across-teams\/dockerapp22\/\" data-orig-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp22.png?fit=1054%2C360&amp;ssl=1\" data-orig-size=\"1054,360\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"dockerapp22\" data-image-description=\"&lt;p&gt;Install Application Package&lt;\/p&gt;\n\" data-image-caption=\"&lt;p&gt;Image &amp;#8211; Install Application Package&lt;\/p&gt;\n\" data-large-file=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp22.png?fit=1024%2C350&amp;ssl=1\" class=\"size-full wp-image-4544 lazyload\" data-src=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp22.png?resize=1054%2C360&#038;ssl=1\" alt=\"Install Application Package\" width=\"1054\" height=\"360\" data-srcset=\"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp22.png?w=1054&amp;ssl=1 1054w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp22.png?resize=300%2C102&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp22.png?resize=768%2C262&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp22.png?resize=1024%2C350&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2019\/11\/dockerapp22.png?resize=600%2C205&amp;ssl=1 600w\" data-sizes=\"auto, (max-width: 1054px) 100vw, 1054px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1054px; --smush-placeholder-aspect-ratio: 1054\/360;\" \/><figcaption id=\"caption-attachment-4544\" class=\"wp-caption-text\">Image &#8211; Install Application Package<\/figcaption><\/figure>\n<h2>Conclusion<\/h2>\n<p>Compose files are not easy to share between environments or across teams, Docker Application Packages solves these problems and make Compose Application reusable across multiple environments (Development\/QA\/Staging\/Production). Docker App is currently in <a href=\"https:\/\/docs.docker.com\/app\/working-with-app\/\" target=\"_blank\" rel=\"noopener\">experimental mode<\/a> and it must not be used in production environments.<\/p>\n<h2>Useful Resources :<\/h2>\n<ul>\n<li><a href=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/05\/23\/everything-you-need-to-know-about-docker-enterprise-3-0\/\">Everything You Need To Know About Docker Enterprise 3.0<\/a><\/li>\n<li><a href=\"https:\/\/www.upnxtblog.com\/index.php\/2019\/01\/04\/implementing-secure-containers-using-gvisordocker-tutorial\/\">Implementing secure containers using gVisor+Docker tutorial<\/a><\/li>\n<li><a class=\"row-title\" href=\"http:\/\/www.upnxtblog.com\/index.php\/2019\/07\/11\/ultimate-guide-to-coursera-specializations-that-will-make-your-career-better-over-100-specializations-covered\/\" aria-label=\"\u201cULTIMATE GUIDE to Coursera Specializations That Will Make Your Career Better (Over 100+ Specializations covered)\u201d (Edit)\">ULTIMATE GUIDE to Coursera Specializations That Will Make Your Career Better (Over 100+ Specializations covered)<\/a><\/li>\n<li><a class=\"row-title\" href=\"http:\/\/www.upnxtblog.com\/index.php\/2019\/08\/14\/google-cloud-courses-collection\/\" aria-label=\"\u201cGoogle Cloud Courses Collection\u201d (Edit)\">Google Cloud Courses Collection<\/a><\/li>\n<\/ul>\n<p><em><strong>Like this post? Don\u2019t forget to share it!<\/strong><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cloud native applications typically use different technologies, each with their own packaging formats. For example, If you\u2019re working on Microsoft Azure then it would be ARM templates, or if its Kubernetes, then its Helm charts, or if it\u2019s on AWS then it would be CloudFormation and so on. Distributed applications usually comprise\u00a0executable units\u00a0and\u00a0supporting API-based services. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1061,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[310],"tags":[381,53,380],"class_list":["post-3840","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker","tag-cnab","tag-docker","tag-dockerapp"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/docker_facebook_share.png?fit=336%2C287&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9fbQS-ZW","jetpack-related-posts":[{"id":3304,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/12\/13\/20-best-and-the-most-popular-reads-for-this-year\/","url_meta":{"origin":3840,"position":0},"title":"20 BEST and the most popular reads for this year","author":"Karthik","date":"December 13, 2018","format":false,"excerpt":"Here are 20 best and the most popular reads for this year,hope you would love this compilation.As always, please feel free to leave your comment in case of any questions or additional inputs. Happy Holidays and Good Luck! #1.TOP 6 GUI tools for managing Docker environments In this post,we take\u2026","rel":"","context":"In &quot;Trending&quot;","block_context":{"text":"Trending","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/trending\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2975,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/10\/03\/top-7-managed-kubernetes-platforms\/","url_meta":{"origin":3840,"position":1},"title":"TOP 7 Managed Kubernetes Platforms","author":"Karthik","date":"October 3, 2018","format":false,"excerpt":"Introduction Kubernetes is a production-ready, open-source platform designed with Google's accumulated experience in container orchestration, combined with best-of-breed ideas from the community. It is designed to automate deploying, scaling, and operating application containers. Kubernetes coordinates a highly available cluster of computers that are connected to work as a single unit.\u2026","rel":"","context":"In &quot;Kubernetes Guides&quot;","block_context":{"text":"Kubernetes Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/kubernetes\/"},"img":{"alt_text":"kubernetes logo","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2017\/11\/kubernetes.jpg?fit=722%2C612&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":2749,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/07\/26\/1st-year-of-blogging-top-10-best-and-the-most-popular-reads\/","url_meta":{"origin":3840,"position":2},"title":"1st Year of Blogging : TOP 10 best and the most popular reads","author":"Karthik","date":"July 26, 2018","format":false,"excerpt":"This is my 1st Year of Blogging,here are 10 best and the most popular reads for this year.These posts have clocked more 500+ reads this year.I hope you enjoy reading and treasure them. #1.TOP 6 GUI tools for managing Docker environments In this article,let us check\u00a0TOP 6 GUI tools for\u2026","rel":"","context":"In &quot;Trending&quot;","block_context":{"text":"Trending","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/trending\/"},"img":{"alt_text":"jogging","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":2833,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/08\/15\/10-best-and-the-most-popular-all-time-reads\/","url_meta":{"origin":3840,"position":3},"title":"10 best and the most popular all time reads","author":"Karthik","date":"August 15, 2018","format":false,"excerpt":"Here's best compilation of 10 best and the most popular all time reads,I hope you enjoy reading and treasure them. #1.TOP 6 GUI tools for managing Docker environments In this article,let us check\u00a0TOP 6 GUI tools for managing Docker environments.Docker\u00a0as we know,is an open platform for developers and sysadmins to\u2026","rel":"","context":"In &quot;Trending&quot;","block_context":{"text":"Trending","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/trending\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":2949,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/09\/26\/how-to-run-multiple-services-in-a-docker-container\/","url_meta":{"origin":3840,"position":4},"title":"How to run multiple services in a Docker container","author":"Karthik","date":"September 26, 2018","format":false,"excerpt":"Docker as we know,is an open platform for developers and sysadmins to build, ship, and run distributed applications, whether on laptops, data center VMs, or the cloud. Before we move on to the actual article, some key points about containers : Containers are an abstraction at the app layer that\u2026","rel":"","context":"In &quot;Docker Guides&quot;","block_context":{"text":"Docker Guides","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/docker\/"},"img":{"alt_text":"Validate Docker Installation","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/09\/dock14.png?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/09\/dock14.png?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/09\/dock14.png?resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/09\/dock14.png?resize=700%2C400 2x"},"classes":[]},{"id":2767,"url":"https:\/\/www.upnxtblog.com\/index.php\/2018\/07\/23\/1st-year-of-blogging-upnxtblog-statistics\/","url_meta":{"origin":3840,"position":5},"title":"1st Year of Blogging : Upnxtblog statistics","author":"Karthik","date":"July 23, 2018","format":false,"excerpt":"Completed an important milestone,YES this blog has completed 1 year today.I have never thought I would be able to continue blogging alongside my full time work but this has been very good experience and velocity keep going because of your support & motivation. Thank you for all your support,likes,comment &\u2026","rel":"","context":"In &quot;Trending&quot;","block_context":{"text":"Trending","link":"https:\/\/www.upnxtblog.com\/index.php\/category\/trending\/"},"img":{"alt_text":"jogging","src":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.upnxtblog.com\/wp-content\/uploads\/2018\/07\/jogging-2343558_1920.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/3840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/comments?post=3840"}],"version-history":[{"count":14,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/3840\/revisions"}],"predecessor-version":[{"id":5424,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/posts\/3840\/revisions\/5424"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/media\/1061"}],"wp:attachment":[{"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/media?parent=3840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/categories?post=3840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.upnxtblog.com\/index.php\/wp-json\/wp\/v2\/tags?post=3840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}