Red Hat blog
This blog will cover how to deploy an application from an existing container image using oc
in the command line for OpenShift. The first part of the series covered deploying from the web console UI.
Deleting the Application
Instead of deploying the existing container image from the web console, you can use the command line. Before doing that, let's delete the application we have already deployed.
To do this from the web console, you could visit each resource type created, and delete them one at a time. The simpler way to delete an application is from the command line, using the oc
program.
To see a list of all the resources that have been created in the project so far, you can run the command:
oc get all -o name
This will display output similar to the following:
imagestreams/blog-django-py
deploymentconfigs/blog-django-py
replicationcontrollers/blog-django-py-1
routes/blog-django-py
services/blog-django-py
pods/blog-django-py-1-9fshs
If you have only created one application, you would know that all the resources listed are related to it. When you have multiple applications deployed, you need to identify those which are specific to the application that you're deleting. You can do this by applying a command to a subset of resources using a label selector.
To determine which labels have been added to the resources, select one and display the details on it. To look at the Route which was created, run the following command:
oc describe route/blog-django-py
This should display output similar to:
Name: blog-django-py
Namespace: myproject
Created: 17 minutes ago
Labels: app=blog-django-py
Annotations: openshift.io/host-generated=true
Requested Host: blog-django-py-myproject.2886795279-80-ollie02.environments.katacoda.com
exposed on router router 17 minutes ago
Path: <none>
TLS Termination: <none>
Insecure Policy: <none>
Endpoint Port: 8080-tcp
Service: blog-django-py
Weight: 100 (100%)
Endpoints: 172.18.0.3:8080
In this case, when deploying the existing container image via the OpenShift web console, OpenShift has applied automatically to all resources the label app=blog-django-py
. You can confirm this by running this command:
oc get all --selector app=blog-django-py -o name
Having a way of selecting just the resources for the one application, you can now schedule them for deletion by running this command:
oc delete all --selector app=blog-django-py
To confirm that the resources have been deleted, run again the command:
oc get all -o name
If you still see any resources listed for the application, keep running this command until it shows they have all been deleted. You may find that the resources may not have been deleted immediately when you only schedule them for deletion, and how quickly they can be deleted will depend upon how quickly the application can be shut down.
Although label selectors can be used to qualify what resources are being queried or deleted, be aware that it may not always be the app
label that you need to use. When an application is created from a template, the labels applied and their names are dictated by the template. As a result, a template may use a different labeling convention. Always use oc describe
to verify what labels have been applied and use oc get all --selector
to verify what resources are matched before deleting any resources.
Deployment with the Command Line
You have now deleted the application, so let's deploy the same existing container image, but this time, we'll use the oc
command line program.
The name of the image you used previously was:
openshiftkatacoda/blog-django-py
If you have been given the name of an image to deploy and want to verify that it's valid from the command line, you can use the oc new-app --search
command. For this image, run:
oc new-app --search openshiftkatacoda/blog-django-py
This should display output similar to this:
Docker images (oc new-app --docker-image=<docker-image> [--code=<source>])
-----
openshiftkatacoda/blog-django-py
Registry: Docker Hub
Tags: latest
This confirms that the image is found on the Docker Hub Registry.
To deploy the image, you can run the following command:
oc new-app openshiftkatacoda/blog-django-py
This will display output like this:
--> Found Docker image d7eda0c (22 hours old) from Docker Hub for "openshiftkatacoda/blog-django-py"
Python 3.5
----------
...Tags: builder, python, python35, rh-python35
* An image stream will be created as "blog-django-py:latest" that will track this image
* This image will be deployed in deployment config "blog-django-py"
* Port 8080/tcp will be load balanced by service "blog-django-py"
* Other containers can access this service through the hostname "blog-django-py"
--> Creating resources ...
imagestream "blog-django-py" created
deploymentconfig "blog-django-py" created
service "blog-django-py" created
--> Success
Run 'oc status' to view your app.
OpenShift will assign a default name based on the name of the image, in this case, blog-django-py
. You can specify a different name to be given to the application, and the resources created, by supplying the --name
option along with the name you wish to use as an argument. Keep in mind that changing the name will change the value of the app
label and when deleting the application you will then need to use this name.
As with deploying an existing container image from the web console, it's not exposed outside of the OpenShift cluster by default. To expose the application created so it's available outside of the OpenShift cluster, you can run this command:
oc expose service/blog-django-py
Switch to the OpenShift web console to verify that the application has been deployed. Click on the URL displayed on the Overview page for the project to visit the application.
Alternatively, to view the hostname assigned to the route created from the command line, you can run this command:
oc get route/blog-django-py
Summary of Part Two
In this blog, we went over deploying an existing container image in OpenShift using oc
in the command line. We deployed an image directly from an external image registry. In the next part of the series, we’ll cover importing an image into the OpenShift internal image registry, and then deploying the image from the internal image registry.
Here's a summary of the key commands used. To see more information on each oc
command, run it with the --help
option.
oc new-app <docker-image> --name <name
: Deploy an application from a container image found on an external image registry. If there is any ambiguity as to the source of the image, use the--docker-image
option.
Would You Like to Learn More?
This post is based on one of OpenShift’s interactive learning scenarios. To try it and our other tutorials without needing to install OpenShift, visit: https://learn.openshift.com
Do you have an OpenShift Online account? There's no reason to wait. Get your applications running in minutes with no installation needed. Sign up for the free trial of OpenShift Online.
What other topics would you like to see in the future on this blog? We're happy to make tutorials about anything that helps you with your OpenShift experience. Comment and let us know!