{"id":50034,"date":"2026-06-23T07:30:23","date_gmt":"2026-06-23T07:30:23","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=50034"},"modified":"2026-06-23T07:30:25","modified_gmt":"2026-06-23T07:30:25","slug":"openshift-build-your-application-from-a-container-image","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/openshift-build-your-application-from-a-container-image\/","title":{"rendered":"OpenShift Lab 12: Deploy an Application from an Existing Container Image Using the OpenShift Web Console"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Lab Objective<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In this lab, you will deploy an application on OpenShift from an existing container image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This lab is different from building an application from source code. In the previous source-code lab, OpenShift pulled code from Git and built a container image. In this lab, the container image already exists in an external container registry, so OpenShift only needs to pull the image and run it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By the end of this lab, you will understand how OpenShift deploys a ready-made container image using the web console.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">What You Will Learn<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You will learn how to:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Start OpenShift Local.<\/li>\n\n\n\n<li>Log in to the OpenShift web console.<\/li>\n\n\n\n<li>Create a new project.<\/li>\n\n\n\n<li>Deploy an application from an external container image.<\/li>\n\n\n\n<li>Use the OpenShift web console <strong>Container images<\/strong> option.<\/li>\n\n\n\n<li>Create a Deployment.<\/li>\n\n\n\n<li>Create a Service.<\/li>\n\n\n\n<li>Create a Route.<\/li>\n\n\n\n<li>Open the application in a browser.<\/li>\n\n\n\n<li>Validate the deployment using the <code>oc<\/code> CLI.<\/li>\n\n\n\n<li>Inspect pods, services, routes, labels, and logs.<\/li>\n\n\n\n<li>Scale the application.<\/li>\n\n\n\n<li>Troubleshoot common image deployment issues.<\/li>\n\n\n\n<li>Clean up the lab environment.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Lab Scenario<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You already have a container image stored in a registry.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You want to run that image on OpenShift without building source code.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this lab, you will use the following public sample image:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quay.io\/openshiftroadshow\/parksmap:latest\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This image is used in Red Hat\u2019s OpenShift learning material as a sample front-end application.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Lab Architecture<\/h2>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">External Container Registry\n        |\n        v\nOpenShift pulls image\n        |\n        v\nDeployment\n        |\n        v\nReplicaSet\n        |\n        v\nPod\n        |\n        v\nService\n        |\n        v\nRoute\n        |\n        v\nBrowser\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Key Difference: Source Code Build vs Container Image Deployment<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Area<\/th><th>Build from Source Code<\/th><th>Deploy from Container Image<\/th><\/tr><\/thead><tbody><tr><td>Input<\/td><td>Git repository<\/td><td>Existing container image<\/td><\/tr><tr><td>Build required?<\/td><td>Yes<\/td><td>No<\/td><\/tr><tr><td>BuildConfig created?<\/td><td>Yes<\/td><td>No<\/td><\/tr><tr><td>ImageStream may be created?<\/td><td>Yes<\/td><td>Not always<\/td><\/tr><tr><td>Faster?<\/td><td>Usually slower<\/td><td>Usually faster<\/td><\/tr><tr><td>Best for<\/td><td>Developers building code<\/td><td>Teams deploying already-built images<\/td><\/tr><tr><td>Example<\/td><td>Node.js app from GitHub<\/td><td>App image from Quay, Docker Hub, or internal registry<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">OpenShift Resources Created in This Lab<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">When you deploy from a container image, OpenShift creates these resources:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Resource<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td>Project<\/td><td>Isolated namespace for this lab<\/td><\/tr><tr><td>Deployment<\/td><td>Defines and manages the running application<\/td><\/tr><tr><td>ReplicaSet<\/td><td>Maintains the desired number of pods<\/td><\/tr><tr><td>Pod<\/td><td>Runs the container<\/td><\/tr><tr><td>Service<\/td><td>Provides stable internal access to the pod<\/td><\/tr><tr><td>Route<\/td><td>Provides browser access from outside the cluster<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Unlike a source-code build lab, this lab does <strong>not<\/strong> create a BuildConfig or Build, because no build is needed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 1: Prerequisites<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Required Tools<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You need:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>OpenShift Local installed.<\/li>\n\n\n\n<li><code>crc<\/code> command available.<\/li>\n\n\n\n<li><code>oc<\/code> command available.<\/li>\n\n\n\n<li>Browser access to the OpenShift web console.<\/li>\n\n\n\n<li>Internet access from OpenShift Local to pull the container image.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Recommended Local Machine Resources<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Use at least:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Resource<\/th><th>Recommended<\/th><\/tr><\/thead><tbody><tr><td>CPU<\/td><td>4 cores or more<\/td><\/tr><tr><td>Memory<\/td><td>12 GB or more<\/td><\/tr><tr><td>Disk<\/td><td>35 GB or more<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 2: Start OpenShift Local<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Open a terminal.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check CRC version:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">crc version\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Set the OpenShift preset:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">crc config <span class=\"hljs-keyword\">set<\/span> preset openshift\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Run setup:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">crc setup\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Start OpenShift Local:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">crc start\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The startup may take several minutes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To view the OpenShift Local credentials:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">crc <span class=\"hljs-built_in\">console<\/span> --credentials\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">To open the web console:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">crc <span class=\"hljs-built_in\">console<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 3: Configure the <code>oc<\/code> CLI<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">crc oc-env\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">On Linux or macOS, run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">eval<\/span> $(crc oc-env)\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">On Windows PowerShell, copy and run the command printed by <code>crc oc-env<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Log in as the <code>developer<\/code> user:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc login -u developer https:<span class=\"hljs-comment\">\/\/api.crc.testing:6443<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Use the password from:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">crc <span class=\"hljs-built_in\">console<\/span> --credentials\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Verify login:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc whoami\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">developer\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check the node:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> nodes\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output should show one OpenShift Local node in <code>Ready<\/code> status.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 4: Create a New Project<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Option A: Create Project from Web Console<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the OpenShift web console.<\/li>\n\n\n\n<li>Log in as <code>developer<\/code>.<\/li>\n\n\n\n<li>Switch to the <strong>Developer<\/strong> perspective.<\/li>\n\n\n\n<li>Click the <strong>Project<\/strong> dropdown.<\/li>\n\n\n\n<li>Click <strong>Create Project<\/strong>.<\/li>\n\n\n\n<li>Enter:<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">lab12-container-image\n<\/code><\/span><\/pre>\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li>Optional display name:<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Lab 12 Container Image\n<\/code><\/span><\/pre>\n\n\n<ol start=\"8\" class=\"wp-block-list\">\n<li>Click <strong>Create<\/strong>.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Option B: Create Project from CLI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">new<\/span>-project lab12-container-image\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc project\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Using project <span class=\"hljs-string\">\"lab12-container-image\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 5: Deploy the Application from a Container Image<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In the OpenShift web console:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Make sure you are in the project:<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">lab12-container-image\n<\/code><\/span><\/pre>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Switch to the <strong>Developer<\/strong> perspective.<\/li>\n\n\n\n<li>Click <strong>+Add<\/strong>.<\/li>\n\n\n\n<li>Click <strong>Container images<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Depending on your OpenShift version, you may also see this from the quick-create <code>+<\/code> icon.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Image Section<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Select:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Image name <span class=\"hljs-keyword\">from<\/span> external registry\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">In the image name field, enter:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quay.io\/openshiftroadshow\/parksmap:latest\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">OpenShift will validate the image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If validation takes time, wait for a few seconds.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Runtime Icon<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For the runtime icon, you can select a suitable icon such as:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Java\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or keep the default detected icon.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The icon does not affect the deployment. It only changes how the workload appears in the Topology view.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 6: Configure General Settings<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Scroll to the <strong>General<\/strong> section.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use these values:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Field<\/th><th>Value<\/th><\/tr><\/thead><tbody><tr><td>Application name<\/td><td><code>national-parks-app<\/code><\/td><\/tr><tr><td>Name<\/td><td><code>parksmap<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Enter:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Application name: national-parks-app\nName: parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The <strong>Application name<\/strong> groups related components visually in the Topology view.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The <strong>Name<\/strong> is used for the actual OpenShift resources such as Deployment, Service, and Route.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 7: Select Resource Type<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In the <strong>Resource type<\/strong> section, select:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Deployment\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Do not select <code>DeploymentConfig<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A Deployment is the standard Kubernetes workload resource and is the best option for current beginner labs.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 8: Create a Route<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In the <strong>Advanced options<\/strong> section, make sure this is enabled:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Create a route to the application\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">A Route is required because this is a web application and students need to open it in a browser.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Without a Route, the application would run inside the cluster, but it would not be accessible from your browser.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 9: Add Labels<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Click the <strong>Labels<\/strong> section.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Add the following labels:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">app=national-parks-app\ncomponent=parksmap\nrole=frontend\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">These labels help organize the application and make it easier to identify resources.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">They are also useful for selectors, filtering, and the Topology view.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 10: Create the Application<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Review your configuration.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Setting<\/th><th>Expected Value<\/th><\/tr><\/thead><tbody><tr><td>Project<\/td><td><code>lab12-container-image<\/code><\/td><\/tr><tr><td>Image source<\/td><td>External registry<\/td><\/tr><tr><td>Image<\/td><td><code>quay.io\/openshiftroadshow\/parksmap:latest<\/code><\/td><\/tr><tr><td>Application name<\/td><td><code>national-parks-app<\/code><\/td><\/tr><tr><td>Name<\/td><td><code>parksmap<\/code><\/td><\/tr><tr><td>Resource type<\/td><td>Deployment<\/td><\/tr><tr><td>Create route<\/td><td>Enabled<\/td><\/tr><tr><td>Labels<\/td><td><code>app=national-parks-app<\/code>, <code>component=parksmap<\/code>, <code>role=frontend<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Click:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Create\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">OpenShift now creates the application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Because this lab uses an existing image, there is no build step.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 11: Watch the Application in Topology<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">After clicking <strong>Create<\/strong>, OpenShift redirects you to the <strong>Topology<\/strong> view.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You should see a workload named:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Wait until the workload shows as running.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Click the <code>parksmap<\/code> workload.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You should see tabs or sections such as:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Details<\/li>\n\n\n\n<li>Resources<\/li>\n\n\n\n<li>Observe<\/li>\n\n\n\n<li>Logs<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The exact layout may vary slightly by OpenShift version.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 12: Open the Application in a Browser<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In the Topology view:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Click the <code>parksmap<\/code> workload.<\/li>\n\n\n\n<li>Click the external URL or open-route icon.<\/li>\n\n\n\n<li>A browser tab should open.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">You should see the ParksMap web application page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the page does not load immediately, wait for the pod to become ready and refresh the browser.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 13: Validate the Deployment Using CLI<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Set the project:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc project lab12-container-image\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">List all created resources:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> all\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected resources include:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">deployment.apps\/parksmap\nreplicaset.apps\/parksmap-xxxxx\npod\/parksmap-xxxxx\nservice\/parksmap\nroute.route.openshift.io\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">List only the important resources:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> deployment,pod,svc,route\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output should show:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">deployment.apps\/parksmap\npod\/parksmap-xxxxx\nservice\/parksmap\nroute.route.openshift.io\/parksmap\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 14: Check the Deployment<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-13\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> deployment parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-13\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">NAME       READY   UP-TO-DATE   AVAILABLE   AGE\nparksmap   1\/1     1            1           ...\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check rollout status:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc rollout status deployment\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-14\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">deployment <span class=\"hljs-string\">\"parksmap\"<\/span> successfully rolled out\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-14\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Describe the Deployment:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc describe deployment parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check the image used by the Deployment:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-15\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">oc get deployment parksmap -o jsonpath=<span class=\"hljs-string\">'{.spec.template.spec.containers&#91;0].image}{\"\\n\"}'<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-15\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quay.io\/openshiftroadshow\/parksmap:latest\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 15: Check the Pod<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-16\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> pods\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-16\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">NAME                        READY   STATUS    RESTARTS   AGE\nparksmap-xxxxxxxxxx-xxxxx   1\/1     Running   0          ...\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">View pod logs:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc logs deployment\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If the pod is not running, describe it:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc describe pod -l deployment=parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If that selector does not work in your environment, list labels first:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-17\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> pods --show-labels\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-17\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then use the correct label shown in your output.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 16: Check the Service<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-18\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> svc parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-18\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-19\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">NAME       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE\nparksmap   ClusterIP   ...             <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">none<\/span>&gt;<\/span>        8080\/TCP   ...\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-19\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The Service provides internal cluster access to the application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inside the same OpenShift project, other pods can reach this app using:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-20\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">http:<span class=\"hljs-comment\">\/\/parksmap:8080<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-20\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Describe the Service:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc describe svc parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check endpoints:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-21\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> endpoints parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-21\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The endpoint should point to the running pod IP and port.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the endpoint is empty, the Service is not matching the pod labels.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 17: Check the Route<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-22\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> route parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-22\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">NAME       HOST\/PORT                                             SERVICES   PORT\nparksmap   parksmap-lab12-container-image.apps-crc.testing       parksmap   8080\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The exact hostname may be different.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Store the app URL:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-23\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">APP_URL=<span class=\"hljs-string\">\"http:\/\/$(oc get route parksmap -o jsonpath='{.spec.host}')\"<\/span>\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"$APP_URL\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-23\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Test the route:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-24\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">curl -I <span class=\"hljs-string\">\"$APP_URL\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-24\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected result:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-25\" data-shcb-language-name=\"HTTP\" data-shcb-language-slug=\"http\"><span><code class=\"hljs language-http\">HTTP\/1.1 <span class=\"hljs-number\">200<\/span> OK\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-25\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTTP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">http<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">A different successful HTTP response is also acceptable, depending on the image behavior.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 18: Confirm That No Build Was Created<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This lab deploys an existing image. It does not build a new image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check BuildConfigs:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-26\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> buildconfig\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-26\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-27\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">No resources found in lab12-container-image <span class=\"hljs-keyword\">namespace<\/span>.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-27\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check Builds:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-28\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> builds\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-28\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-29\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">No resources found in lab12-container-image <span class=\"hljs-keyword\">namespace<\/span>.\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-29\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This is correct.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No BuildConfig is needed because the container image already exists.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 19: Scale the Application<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You can scale the Deployment from the web console or CLI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Option A: Scale from Web Console<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <strong>Developer<\/strong> perspective.<\/li>\n\n\n\n<li>Open <strong>Topology<\/strong>.<\/li>\n\n\n\n<li>Click the <code>parksmap<\/code> workload.<\/li>\n\n\n\n<li>Open the <strong>Details<\/strong> tab.<\/li>\n\n\n\n<li>Increase the pod count from <code>1<\/code> to <code>2<\/code>.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Wait until two pods are running.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Option B: Scale from CLI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc scale deployment\/parksmap --replicas=2\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check pods:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-30\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> pods\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-30\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected result:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Two parksmap pods should be running.\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check Deployment:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-31\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> deployment parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-31\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">READY   2\/2\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Scale back to one pod:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc scale deployment\/parksmap --replicas=1\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-32\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> deployment parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-32\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">READY   1\/1\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 20: Update the Container Image Tag<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In real projects, teams often deploy a new application version by changing the image tag.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this beginner lab, do not change the image unless your instructor provides a tested tag.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can view the current image:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-33\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">oc get deployment parksmap -o jsonpath=<span class=\"hljs-string\">'{.spec.template.spec.containers&#91;0].image}{\"\\n\"}'<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-33\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Example output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quay.io\/openshiftroadshow\/parksmap:latest\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If you had another valid image tag, the update command would look like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-34\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">oc set image deployment\/parksmap parksmap=quay.io\/openshiftroadshow\/parksmap:<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">new-tag<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-34\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then check rollout:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc rollout status deployment\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">For this lab, keep the original image.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 21: Roll Out Restart<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You can restart the application without changing the image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc rollout restart deployment\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Watch rollout:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc rollout status deployment\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check pods:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-35\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> pods\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-35\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">You should see a new pod replacing the old pod.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 22: Student Checkpoint<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Students should be able to answer:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Question<\/th><th>Expected Answer<\/th><\/tr><\/thead><tbody><tr><td>Did OpenShift build the image in this lab?<\/td><td>No<\/td><\/tr><tr><td>Where did the image come from?<\/td><td>External container registry<\/td><\/tr><tr><td>Which image did we use?<\/td><td><code>quay.io\/openshiftroadshow\/parksmap:latest<\/code><\/td><\/tr><tr><td>Which resource runs the app?<\/td><td>Deployment<\/td><\/tr><tr><td>Which resource creates the pod?<\/td><td>Deployment through ReplicaSet<\/td><\/tr><tr><td>Which resource gives internal access?<\/td><td>Service<\/td><\/tr><tr><td>Which resource gives browser access?<\/td><td>Route<\/td><\/tr><tr><td>Why was no BuildConfig created?<\/td><td>Because no source build was needed<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 23: Full Validation Script<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Run this after completing the lab:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-36\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">oc project lab12-container-image\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking Deployment...\"<\/span>\noc get deployment parksmap\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking rollout...\"<\/span>\noc rollout status deployment\/parksmap\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking pods...\"<\/span>\noc get pods -o wide\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking image...\"<\/span>\noc get deployment parksmap -o jsonpath=<span class=\"hljs-string\">'{.spec.template.spec.containers&#91;0].image}{\"\\n\"}'<\/span>\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking service...\"<\/span>\noc get svc parksmap\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking endpoints...\"<\/span>\noc get endpoints parksmap\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking route...\"<\/span>\noc get route parksmap\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Checking that no build exists...\"<\/span>\noc get bc\noc get builds\n\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Testing application route...\"<\/span>\nAPP_URL=<span class=\"hljs-string\">\"http:\/\/$(oc get route parksmap -o jsonpath='{.spec.host}')\"<\/span>\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"$APP_URL\"<\/span>\ncurl -I <span class=\"hljs-string\">\"$APP_URL\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-36\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected result:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Deployment is available.<\/li>\n\n\n\n<li>Pod is running.<\/li>\n\n\n\n<li>Service exists.<\/li>\n\n\n\n<li>Endpoint exists.<\/li>\n\n\n\n<li>Route exists.<\/li>\n\n\n\n<li>No BuildConfig exists.<\/li>\n\n\n\n<li>No Build exists.<\/li>\n\n\n\n<li>Browser URL works.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 24: Troubleshooting<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Problem 1: ImagePullBackOff<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Symptom<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The pod is not running and shows:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">ImagePullBackOff\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">or:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">ErrImagePull\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Check<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-37\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> pods\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-37\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Describe the pod:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc describe pod -l app=parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If that selector does not work, run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-38\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> pods --show-labels\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-38\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then describe the pod by name:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-39\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">oc describe pod <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">pod-name<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-39\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h3 class=\"wp-block-heading\">Common Causes<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Wrong image name.<\/li>\n\n\n\n<li>Registry is temporarily unavailable.<\/li>\n\n\n\n<li>OpenShift Local cannot reach the registry.<\/li>\n\n\n\n<li>Image is private and needs a pull secret.<\/li>\n\n\n\n<li>VPN or firewall is blocking registry access.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Fix<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Verify the image name:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quay.io\/openshiftroadshow\/parksmap:latest\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check CRC status:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">crc status\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If using VPN, disconnect VPN and retry if possible.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Restart the rollout:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc rollout restart deployment\/parksmap\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem 2: Route Does Not Open<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Symptom<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The pod is running, but the browser page does not open.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Check<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-40\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> route parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-40\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check service:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-41\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> svc parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-41\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check endpoints:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-42\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> endpoints parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-42\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If endpoints are empty, the Service is not pointing to the pod.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check pod labels:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-43\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> pods --show-labels\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-43\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check Service selector:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc describe svc parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The Service selector must match the pod labels.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem 3: Pod Is Running but App Is Not Responding<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Check logs:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc logs deployment\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check pod status:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc describe deployment parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check whether the Service has endpoints:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-44\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> endpoints parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-44\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If the application listens on a different port than the Service expects, the route may fail.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this lab, the <code>parksmap<\/code> image is expected to expose the application through port <code>8080<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem 4: No Route Was Created<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">If you forgot to enable <strong>Create a route<\/strong>, create the Route manually:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc expose svc\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-45\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> route parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-45\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Open the route again.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem 5: BuildConfig Not Found<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is not an error.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This lab deploys an existing image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So this output is expected:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-46\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> bc\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-46\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">No resources found\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">A BuildConfig is only needed when OpenShift builds an image from source code or binary input.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Problem 6: Application Works in Browser but <code>curl<\/code> Fails<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Possible causes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Local DNS issue.<\/li>\n\n\n\n<li>Browser has a working DNS\/proxy setup but terminal does not.<\/li>\n\n\n\n<li>VPN or firewall issue.<\/li>\n\n\n\n<li>CRC networking issue.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Check CRC:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">crc status\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Print the route:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-47\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> route parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-47\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Try again after a minute.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 25: Optional CLI-Only Equivalent<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">The main purpose of this lab is to use the web console.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">However, the equivalent CLI workflow is useful to know.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Create a new project:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-48\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">new<\/span>-project lab12-container-image-cli\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-48\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create the application from image:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-49\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">new<\/span>-app quay.io\/openshiftroadshow\/parksmap:latest --name=parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-49\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expose the Service:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc expose svc\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Check resources:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-50\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> deployment,pod,svc,route\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-50\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Test the route:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-51\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">APP_URL=<span class=\"hljs-string\">\"http:\/\/$(oc get route parksmap -o jsonpath='{.spec.host}')\"<\/span>\ncurl -I <span class=\"hljs-string\">\"$APP_URL\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-51\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Clean up the CLI test project:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-52\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">delete<\/span> project lab12-container-image-cli\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-52\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 26: Cleanup<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Cleanup from Web Console<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to the <strong>Developer<\/strong> perspective.<\/li>\n\n\n\n<li>Select project:<\/li>\n<\/ol>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">lab12-container-image\n<\/code><\/span><\/pre>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Go to <strong>Topology<\/strong>.<\/li>\n\n\n\n<li>Open the action menu for the <code>parksmap<\/code> application.<\/li>\n\n\n\n<li>Click <strong>Delete Application<\/strong>.<\/li>\n\n\n\n<li>Confirm deletion.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">This deletes the application resources.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Cleanup from CLI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The easiest cleanup is to delete the whole project:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-53\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">delete<\/span> project lab12-container-image\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-53\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Verify:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-54\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> project lab12-container-image\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-54\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expected output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-55\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-built_in\">Error<\/span> <span class=\"hljs-keyword\">from<\/span> server (NotFound): projects.project.openshift.io <span class=\"hljs-string\">\"lab12-container-image\"<\/span> not found\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-55\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 27: Lab Summary<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In this lab, you deployed an application from an existing container image using the OpenShift web console.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You learned that:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Container images can be deployed directly without building source code.<\/li>\n\n\n\n<li>The <strong>Container images<\/strong> option is used when an image already exists in a registry.<\/li>\n\n\n\n<li>A Deployment runs the application.<\/li>\n\n\n\n<li>A Pod runs the actual container.<\/li>\n\n\n\n<li>A Service provides internal access.<\/li>\n\n\n\n<li>A Route provides external browser access.<\/li>\n\n\n\n<li>No BuildConfig or Build is created when deploying an existing image.<\/li>\n\n\n\n<li>OpenShift can scale and restart the application using Deployment features.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Part 28: Review Questions<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">Question 1<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">What was the input for this lab?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">An existing container image:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quay.io\/openshiftroadshow\/parksmap:latest\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 2<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Did OpenShift build a new image in this lab?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. OpenShift pulled and ran an existing image.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Which OpenShift web-console option did we use?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">+Add -&gt; Container images\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 4<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Which resource runs the application?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Deployment.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 5<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Which resource exposes the application inside the cluster?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Service.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 6<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Which resource exposes the application outside the cluster?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Route.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 7<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Why was no BuildConfig created?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Because OpenShift did not build source code. It deployed an image that already existed.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 8<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">What command checks the Deployment status?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc rollout status deployment\/parksmap\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 9<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">What command shows the Route?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-56\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">get<\/span> route parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-56\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Question 10<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">What command deletes the full lab project?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Answer<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-57\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">delete<\/span> project lab12-container-image\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-57\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Instructor Notes<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">This lab is designed as a replacement for the older short article about deploying an application from a container image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The old article\u2019s topic is correct, but the replacement lab improves it by:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Using OpenShift Local instead of Developer Sandbox.<\/li>\n\n\n\n<li>Using an official OpenShift sample image.<\/li>\n\n\n\n<li>Separating this lab from the Git\/source-code workflow.<\/li>\n\n\n\n<li>Using Deployment instead of DeploymentConfig.<\/li>\n\n\n\n<li>Adding route, service, pod, and deployment validation.<\/li>\n\n\n\n<li>Explaining why no BuildConfig is created.<\/li>\n\n\n\n<li>Adding CLI checks.<\/li>\n\n\n\n<li>Adding troubleshooting.<\/li>\n\n\n\n<li>Adding cleanup steps.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">For production or advanced courses, add follow-up labs for:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Deploying images from a private registry.<\/li>\n\n\n\n<li>Creating image pull secrets.<\/li>\n\n\n\n<li>Deploying from an internal OpenShift ImageStream.<\/li>\n\n\n\n<li>Updating images by tag and digest.<\/li>\n\n\n\n<li>Using immutable image digests instead of <code>latest<\/code>.<\/li>\n\n\n\n<li>Image vulnerability scanning.<\/li>\n\n\n\n<li>Image signing and verification.<\/li>\n\n\n\n<li>GitOps-based image deployment.<\/li>\n\n\n\n<li>Rollback and rollout history.<\/li>\n\n\n\n<li>Resource requests and limits.<\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Instructor Pre-Validation Checklist<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Before delivering this lab to students, run:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-58\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">crc status\noc whoami\noc <span class=\"hljs-keyword\">get<\/span> nodes\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-58\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Create a quick test project:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-59\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">new<\/span>-project lab12-test\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-59\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Deploy the sample image:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-60\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">new<\/span>-app quay.io\/openshiftroadshow\/parksmap:latest --name=parksmap\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-60\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Expose it:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc expose svc\/parksmap\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Validate:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-61\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">oc rollout status deployment\/parksmap\noc get pod,svc,route\nAPP_URL=<span class=\"hljs-string\">\"http:\/\/$(oc get route parksmap -o jsonpath='{.spec.host}')\"<\/span>\ncurl -I <span class=\"hljs-string\">\"$APP_URL\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-61\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Clean up:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-62\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">oc <span class=\"hljs-keyword\">delete<\/span> project lab12-test\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-62\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">If these commands pass, the lab is ready for students.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Final Outcome<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">You have successfully deployed an application from an existing container image using the OpenShift web console.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You now understand this workflow:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">Container Image\n  -&gt; Deployment\n  -&gt; Pod\n  -&gt; Service\n  -&gt; Route\n  -&gt; Browser\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">This is one of the most common real-world OpenShift workflows because many teams build images in CI\/CD pipelines and then deploy those already-built images into OpenShift.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lab Objective In this lab, you will deploy an application on OpenShift from an existing container image. This lab is different from building an application from source&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5153],"tags":[],"class_list":["post-50034","post","type-post","status-publish","format-standard","hentry","category-openshift"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50034","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=50034"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50034\/revisions"}],"predecessor-version":[{"id":77170,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50034\/revisions\/77170"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=50034"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=50034"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=50034"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}