Dockerfile Requirements

The Dockerfile can be found in the root directory of your operator. For Certified Operator Image Dockerfile requirements are as follows:
  1. 1.
    You must configure the required labels (name, maintainer, vendor, version, release, summary)
  2. 2.
    Software license(s) must be included within the image.
Although typically labels and licenses are not required to successfully build a running image, they are required for the Red Hat build service and scanner.
Below is an example Dockerfile for a Ansible Operator which includes the aforementioned requirements:
Dockerfile
FROM registry.redhat.io/openshift4/ose-ansible-operator:v4.7
### Required OpenShift Labels
LABEL name="Mongodb Operator" \
vendor="RHSCL" \
version="v0.0.1" \
release="1" \
summary="This is an example of a mongodb ansible operator." \
description="This operator will deploy mongodb to the cluster."
COPY requirements.yml ${HOME}/requirements.yml
RUN ansible-galaxy collection install -r ${HOME}/requirements.yml \
&& chmod -R ug+rwx ${HOME}/.ansible
# Required Licenses
COPY licenses /licenses
COPY watches.yaml ${HOME}/watches.yaml
COPY roles/ ${HOME}/roles/
COPY playbooks/ ${HOME}/playbooks/
A few things to note about the Dockerfile above:
  • The default FROM line produced by the SDK needs to be replaced with the line listed above.
  • This Dockerfile contains all of the required labels. These labels must be manually added (name, vendor, version, release, summary, and description).
  • If you are planning to use a playbook, that file will also need to be copied.
  • Lastly, this Dockerfile also references a licenses/ directory, which needs to be manually added to the root of the project. This directory must include the software license(s) of your project.
Your project directory structure should look similar to the hierarchy below. Note the location of the licenses directory.
mongodb-operator
├── config
│   ├── crd
│   │   ├── bases
│   │   │   └── nosql.mogodb.com_mongodbs.yaml
│   │   └── kustomization.yaml
│   ├── default
│   │   ├── kustomization.yaml
│   │   └── manager_auth_proxy_patch.yaml
│   ├── manager
│   │   ├── kustomization.yaml
│   │   └── manager.yaml
│   ├── prometheus
│   │   ├── kustomization.yaml
│   │   └── monitor.yaml
│   ├── rbac
│   │   ├── auth_proxy_client_clusterrole.yaml
│   │   ├── auth_proxy_role_binding.yaml
│   │   ├── auth_proxy_role.yaml
│   │   ├── auth_proxy_service.yaml
│   │   ├── kustomization.yaml
│   │   ├── leader_election_role_binding.yaml
│   │   ├── leader_election_role.yaml
│   │   ├── mongodb_editor_role.yaml
│   │   ├── mongodb_viewer_role.yaml
│   │   ├── role_binding.yaml
│   │   └── role.yaml
│   ├── samples
│   │   ├── kustomization.yaml
│   │   └── nosql_v1alpha1_mongodb.yaml
│   ├── scorecard
│   │   ├── bases
│   │   │   └── config.yaml
│   │   ├── kustomization.yaml
│   │   └── patches
│   │   ├── basic.config.yaml
│   │   └── olm.config.yaml
│   └── testing
│   ├── debug_logs_patch.yaml
│   ├── kustomization.yaml
│   ├── manager_image.yaml
│   └── pull_policy
│   ├── Always.yaml
│   ├── IfNotPresent.yaml
│   └── Never.yaml
├── Dockerfile
├── licenses
│   └── MIT.txt
├── Makefile
├── molecule
│   ├── default
│   │   ├── converge.yml
│   │   ├── create.yml
│   │   ├── destroy.yml
│   │   ├── kustomize.yml
│   │   ├── molecule.yml
│   │   ├── prepare.yml
│   │   ├── tasks
│   │   │   └── mongodb_test.yml
│   │   └── verify.yml
│   └── kind
│   ├── converge.yml
│   ├── create.yml
│   ├── destroy.yml
│   └── molecule.yml
├── playbooks
├── PROJECT
├── requirements.yml
├── roles
│   └── mongodb
│   ├── defaults
│   │   └── main.yml
│   ├── files
│   ├── handlers
│   │   └── main.yml
│   ├── meta
│   │   └── main.yml
│   ├── README.md
│   ├── tasks
│   │   └── main.yml
│   ├── templates
│   └── vars
│   └── main.yml
└── watches.yaml