This glossary explains the terms and concepts most commonly used in CodeNOW’s documentation site. Some common terms may have a different meaning according to the context in which they are used. Feel free to visit the glossary every time you need to understand the precise meaning of a term in a CodeNOW context.
An application consists of a set of components that cooperate to implement requirements. Applications can be packaged (selecting which components make the application) and versioned (several application versions may gather different components and component versions); deployed to a deployment target; and monitored.
Application components are software components whose coordinated operation produces the functions required from the parent application. As such, application components implement a portion of the requirements of an application. If the context is clear, application components are simply referred to as components.
Components’ code artifacts are stored in a remote repository. Components can be versioned, configured, and built. Versioned components can be included in an application package. CodeNOW components can be connected straightforwardly to a predefined set of CodeNOW managed services.
Managed services can be considered application components in their own right. They however distinguish themselves from standard components:
- They implement functionalities that are common to a large set of applications.
- They are intended to be reused in a large series of contexts as part of a larger application.
In other words, you are likely to need them, and they can be configured, integrated, and deployed easily. Reusing carefully curated and integrated components increases development velocity.
An application package groups together specific versions of application components. Application packages are themselves versioned. To deploy an application, group first in an application package the application components that must be deployed together.
In CodeNOW, a deployment target is the combination of a target deployment environment (e.g., development, staging, production) and an application package.
A deployment configuration is a set of configuration files that contain environment variables. Those environment variables allow customizing the deployment of an application without modifying application code. Separating configuration and code is a key principle of cloud-native deployments.
A deployment configuration is uniquely associated with one deployment target. Deployment configurations can be edited at deployment time. Deployment configurations are stored internally in CodeNOW. Deployment configuration template files are stored in the corresponding component's repository.
Dockerfiles list instructions to package software components into a Docker container. Containers package an application together with all it needs to run. This includes its dependencies and configuration. Containers run seamlessly on Mac, Windows, and Linux. A Docker container can then seamlessly be shared and ported from the developer's laptop to internal datacenters to different cloud providers. Dockerfiles thus make application development and deployment more efficient.
Dockerfiles generally include instructions to build and run a software component. Dockerfiles can be built from scratch or reuse other Docker images.
COPY . /app
RUN rm -rf /app/node_modules/.bin
RUN npm rebuild
CMD [ "npm", "run", "serve" ]
The reproduced Dockerfile reuses a publicly available image of Node 14, builds the application (
npm rebuild), and runs it (
npm run serve) on port 3000.
Docker Hub is a container repository for Docker containers. Container repositories store container images so they can be shared and reused.
Helm is a package manager for Kubernetes. Helm charts package together the configuration files used to deploy software components to a Kubernetes cluster. Helm also implements a templating mechanism that allows separating configuration values that are not subject to change from those that are subject to runtime configuration. By providing the latter at deployment time, you can customize the deployment of your software component to a Kubernetes cluster — without writing new configuration files. Because some software components may have a complex cloud deployment setup, reusing already made and tested Helm charts often boost the productivity of cloud software development and operations.
Kubernetes is an open-source container orchestration tool. Kubernetes thus helps operate software applications that are made of several software components packaged in containers. Kubernetes manages applications across many different deployment environments (e.g., actual machine, virtual machine, cloud environment).
Kubernetes handles the availability, scalability, and disaster recovery of cloud applications. Kubernetes restarts containers that failed automatically (disaster recovery). Kubernetes also guarantees that a given number of container instances run in parallel (scalability, availability).