{"id":50056,"date":"2026-06-23T06:21:14","date_gmt":"2026-06-23T06:21:14","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=50056"},"modified":"2026-06-23T06:21:16","modified_gmt":"2026-06-23T06:21:16","slug":"openshift-lab-4-install-an-application-from-a-linux-container-image-using-the-oc-cli-tool","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/openshift-lab-4-install-an-application-from-a-linux-container-image-using-the-oc-cli-tool\/","title":{"rendered":"Openshift: Lab 4 &#8211; Install an application from a Linux container image using the oc CLI tool"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">What Lab 4 teaches<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lab 4 teaches how to use the <strong><code>oc<\/code> CLI tool<\/strong> from a local machine to deploy an application on a remote OpenShift cluster from a Linux container image stored in a container image repository.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The sample image used is:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">quay.io\/rhdevelopers\/greeter\n<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">The main deployment command in the PDF is:<\/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\">oc <span class=\"hljs-keyword\">new<\/span>-app quay.io\/rhdevelopers\/greeter\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\">The expected output shows OpenShift creating:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">imagestream<\/span><span class=\"hljs-selector-class\">.image<\/span><span class=\"hljs-selector-class\">.openshift<\/span><span class=\"hljs-selector-class\">.io<\/span> \"<span class=\"hljs-selector-tag\">greeter<\/span>\" <span class=\"hljs-selector-tag\">created<\/span>\n<span class=\"hljs-selector-tag\">deployment<\/span><span class=\"hljs-selector-class\">.apps<\/span> \"<span class=\"hljs-selector-tag\">greeter<\/span>\" <span class=\"hljs-selector-tag\">created<\/span>\n<span class=\"hljs-selector-tag\">service<\/span> \"<span class=\"hljs-selector-tag\">greeter<\/span>\" <span class=\"hljs-selector-tag\">created<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Then OpenShift says the application is not exposed and suggests:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">oc expose service\/greeter\n<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Main lab flow<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>What the learner does<\/th><th>Command \/ Action<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Open Developer Sandbox web console<\/td><td>Browser action<\/td><\/tr><tr><td>2<\/td><td>Open command-line login page<\/td><td>Question mark \u2192 Command Line tools<\/td><\/tr><tr><td>3<\/td><td>Display token<\/td><td>Click <strong>Display Token<\/strong><\/td><\/tr><tr><td>4<\/td><td>Copy login command<\/td><td>Copy <strong>Log in with this token<\/strong><\/td><\/tr><tr><td>5<\/td><td>Log in from local terminal<\/td><td>Paste the copied <code>oc login --token=... --server=...<\/code> command<\/td><\/tr><tr><td>6<\/td><td>Deploy app from image<\/td><td><code>oc new-app quay.io\/rhdevelopers\/greeter<\/code><\/td><\/tr><tr><td>7<\/td><td>Expose app externally<\/td><td><code>oc expose service\/greeter<\/code><\/td><\/tr><tr><td>8<\/td><td>Open app from Topology<\/td><td>Click external URL icon<\/td><\/tr><tr><td>9<\/td><td>Check labels<\/td><td><code>oc get deployment --show-labels<\/code><\/td><\/tr><tr><td>10<\/td><td>Delete app resources<\/td><td><code>oc delete all -l app=greeter<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Clean CLI version of Lab 4<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Log in using the token command copied from OpenShift web console<\/span>\noc login --token=&lt;your-token&gt; --server=&lt;your-api-server&gt;\n\n<span class=\"hljs-comment\"># Confirm login<\/span>\noc whoami\n\n<span class=\"hljs-comment\"># Check current project<\/span>\noc project\n\n<span class=\"hljs-comment\"># Deploy the app from a container image<\/span>\noc <span class=\"hljs-keyword\">new<\/span>-app quay.io\/rhdevelopers\/greeter\n\n<span class=\"hljs-comment\"># Check created resources<\/span>\noc get all\n\n<span class=\"hljs-comment\"># Expose the service as a route<\/span>\noc expose service\/greeter\n\n<span class=\"hljs-comment\"># Get the route<\/span>\noc get route greeter\n\n<span class=\"hljs-comment\"># Open\/test the app<\/span>\ncurl -I http:<span class=\"hljs-comment\">\/\/$(oc get route greeter -o jsonpath='{.spec.host}')<\/span>\n\n<span class=\"hljs-comment\"># View deployment labels<\/span>\noc get deployment --show-labels\n\n<span class=\"hljs-comment\"># Delete all app resources by label<\/span>\noc delete all -l app=greeter\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><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\">So yes, this lab is basically the <strong>CLI version of Lab 3<\/strong>, but it uses a different sample image: <strong><code>quay.io\/rhdevelopers\/greeter<\/code><\/strong> instead of the Lab 3 ParksMap image.<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/07\/Openshift-Lab4.pdf\" type=\"application\/pdf\" style=\"width:100%;height:2000px\" aria-label=\"Embed of Openshift Lab4.\"><\/object><a id=\"wp-block-file--media-97542135-cea1-4f99-94b9-32d10974839a\" href=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/07\/Openshift-Lab4.pdf\">Openshift Lab4<\/a><a href=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2025\/07\/Openshift-Lab4.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-97542135-cea1-4f99-94b9-32d10974839a\">Download<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>What Lab 4 teaches Lab 4 teaches how to use the oc CLI tool from a local machine to deploy an application on a remote OpenShift cluster&#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-50056","post","type-post","status-publish","format-standard","hentry","category-openshift"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50056","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=50056"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50056\/revisions"}],"predecessor-version":[{"id":77147,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/50056\/revisions\/77147"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=50056"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=50056"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=50056"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}