DEV Community

Abhay Singh Kathayat
Abhay Singh Kathayat

Posted on

Docker in OpenShift: Managing and Deploying Containerized Applications with Kubernetes

Docker in OpenShift

OpenShift is an enterprise-grade Kubernetes container orchestration platform built by Red Hat. It extends Kubernetes with additional features for managing containerized applications, making it more secure, scalable, and efficient. OpenShift integrates tightly with Docker, allowing users to build, deploy, and manage Docker containers within a Kubernetes-based environment.


1. What is OpenShift?

OpenShift is a comprehensive platform-as-a-service (PaaS) that provides a complete solution for building, deploying, and scaling containerized applications using Kubernetes as the core orchestrator. It adds several layers of security, management, and automation on top of Kubernetes, with features like integrated CI/CD pipelines, multi-tenancy, and a rich web console.

While Kubernetes focuses on orchestration and management of containers, OpenShift provides an enterprise-ready solution with user-friendly features for developers and operators.

Key Features of OpenShift

  • Kubernetes-based Orchestration: OpenShift uses Kubernetes for container orchestration, providing the power of Kubernetes along with added security and ease of use.
  • Integrated CI/CD Pipelines: OpenShift includes tools to automate the build, test, and deployment of applications.
  • Self-Service Developer Platform: Developers can create and deploy applications with minimal intervention from system administrators.
  • Enhanced Security: OpenShift enforces strict security policies, including automatic image scanning for vulnerabilities and role-based access control (RBAC).
  • Multi-Tenancy: OpenShift supports the deployment of multiple applications in isolated environments (projects), allowing for multi-user collaboration.

2. Docker in OpenShift: How It Works

OpenShift builds on top of Docker to manage containerized applications, using Docker images as the format for packaging and distributing applications. OpenShift handles these Docker containers with additional security and operational tools to ensure they work efficiently in a production environment.

Key Components of OpenShift

  • OpenShift Node: Each node in an OpenShift cluster is a server running Docker and a Kubernetes instance to orchestrate containers.
  • Pod: A pod is the smallest deployable unit in OpenShift, containing one or more containers. These containers are typically Docker containers.
  • OpenShift Build: A build is a process by which a Docker image is created from application code. OpenShift supports source-to-image (S2I), which allows building images directly from source code.
  • OpenShift Deployment: Manages the deployment and scaling of applications. It ensures that the desired number of pods are running based on the specified configurations.

OpenShift’s Interaction with Docker

  1. Docker Images: In OpenShift, Docker images are used as the base for containerized applications. These images are stored in a registry and can be pulled for deployment in OpenShift.
  2. OpenShift Builds: OpenShift can create Docker images from your application code using its S2I process or from pre-built images. When you commit changes to your repository, OpenShift automatically builds a new Docker image.
  3. Docker Runtime: OpenShift uses Docker (or any CRI-compatible runtime) to run containers within pods. Docker manages the container's lifecycle, from creation to running the application inside the container.
  4. Image Streams: OpenShift uses Image Streams to manage Docker images and integrate with its internal image registry.

3. Using Docker in OpenShift

Step 1: Setting Up OpenShift Cluster

You can install OpenShift on various platforms, including local systems (using Minishift), on-premise, or on cloud providers like AWS and Azure. The easiest way to get started with OpenShift is to use the Minishift tool, which sets up a local OpenShift cluster.

minishift start
Enter fullscreen mode Exit fullscreen mode

Alternatively, you can deploy OpenShift on Kubernetes clusters using OpenShift Origin or use the Red Hat OpenShift Container Platform for enterprise environments.

Step 2: Push Docker Images to OpenShift

OpenShift uses its own registry to store Docker images. You can push your Docker images to the OpenShift registry or an external Docker registry.

  1. Tag Docker Image: Tag your Docker image to match the OpenShift registry.
   docker tag my-app my-openshift-registry.example.com/my-project/my-app:v1
Enter fullscreen mode Exit fullscreen mode
  1. Login to OpenShift Registry: Use the OpenShift CLI (oc) to log in and push the image.
   docker login -u myuser -p mypassword my-openshift-registry.example.com
Enter fullscreen mode Exit fullscreen mode
  1. Push the Image: Push the tagged Docker image to the OpenShift registry.
   docker push my-openshift-registry.example.com/my-project/my-app:v1
Enter fullscreen mode Exit fullscreen mode

Step 3: Create and Deploy Applications on OpenShift

  1. Create a Project: A project in OpenShift is a container for your application and associated resources.
   oc new-project my-app-project
Enter fullscreen mode Exit fullscreen mode
  1. Deploy Application Using Docker Image: You can create a deployment for your Docker image by specifying the image in the deployment configuration.
   oc new-app my-openshift-registry.example.com/my-project/my-app:v1
Enter fullscreen mode Exit fullscreen mode
  1. Expose the Application: To access the application externally, expose the service with a route.
   oc expose svc/my-app
Enter fullscreen mode Exit fullscreen mode
  1. Scaling the Application: OpenShift allows you to easily scale your application up or down.
   oc scale --replicas=3 deployment/my-app
Enter fullscreen mode Exit fullscreen mode

Step 4: Automate Builds with OpenShift Pipelines

You can integrate Docker with OpenShift’s OpenShift Pipelines (based on Tekton) to automate CI/CD workflows. This allows you to automatically build Docker images when code is committed to a Git repository.

  1. Create a Pipeline:

    Define a pipeline that builds the Docker image and pushes it to the OpenShift registry.

  2. Trigger Builds:

    Set up triggers to automatically start the pipeline whenever there is a new code commit or merge.


4. Docker and OpenShift Security Features

OpenShift includes additional security features beyond Docker for a more secure containerized environment.

  • Security Contexts: Define security settings for containers running in OpenShift, such as restricting privileges or running as a specific user.
  • Role-Based Access Control (RBAC): Manage access to resources in OpenShift by assigning roles to users.
  • Image Scanning: OpenShift can automatically scan Docker images for vulnerabilities before they are deployed.

5. Benefits of Using Docker with OpenShift

  • Streamlined Development and Deployment: Docker containers ensure consistency across different environments, and OpenShift handles scaling and orchestration with Kubernetes.
  • Security: OpenShift adds enhanced security policies, including image scanning, access control, and secure networking, on top of Docker.
  • Automatic Builds and Continuous Integration: OpenShift integrates well with Docker for building images and setting up automated CI/CD pipelines.
  • Enterprise Support: OpenShift provides enterprise-grade support, including multi-tenant architecture and integrated monitoring, with Docker-based application deployment.

6. Conclusion

Using Docker in OpenShift allows developers to leverage the power of containerized applications with Docker while benefiting from OpenShift's additional management, security, and automation features. Whether you're using Docker to package applications or OpenShift for orchestration, this combination creates a powerful, secure, and scalable environment for modern application development and deployment.


Top comments (0)