Domino-docker explained – Part 3 : Running your first Domino server in a container

In part 2 we created a Domino container image. Now we want to start the image. Of course, we could just use docker run <options> <imagename>, but with the scripts from the Domino Docker project, there’s a much easier option. In this part, I’ll show you what to do to make running, restarting and stopping images super easy.

Installing the domino_container scripts

In the previous part we cloned the domino-docker repository from GitHub. This means you should have a directory like this on your system:

-rw-r--r--  1 root root 1039  Jun 5   23:15 build.cfg
-rwxr-xr-x  1 root root 14866 Jun 3   23:29 build.sh
-rw-r--r--  1 root root 7110  May 27  11:02 check_software.sh
-rw-r--r--. 1 root root 3524  Jan 30  2021  CONTRIBUTING.md
drwxr-xr-x. 5 root root 4096  Jan 30  2021  dockerfiles
drwxr-xr-x. 3 root root 4096  Jun 3   23:29 docs
-rw-r--r--. 1 root root 1438  Feb 2   2021  env
drwxr-xr-x. 4 root root 4096  Jan 30  2021  examples
drwxr-xr-x  4 root root 4096  May 27  11:02 lab
-rw-r--r--. 1 root root 11399 Jan 30  2021  LICENSE
drwxr-xr-x. 3 root root 4096  Jan 30  2021  management
-rw-r--r--. 1 root root 7447  Jan 30  2021  README.md
drwxr-xr-x. 2 root root 4096  Jun 5   23:16 software
drwxr-xr-x. 6 root root 4096  Jun 3   23:29 start_script
drwxr-xr-x. 4 root root 4096  Jan 30  2021  tools

The magic is in the start_script directory. Here you’ll find a script called “install_domino_container”. This script does the following:

  • Install a script domino_container and a file software.txt in /opt/nashcom/startscript
  • Make a symbolic link in /usr/bin to this script
  • Install configuration scripts domino_container, env_container_domino11 and env_container_domino12 in /etc/sysconfig
  • Install a systemd service file, domino.service, in /etc/systemd/system (only if you’re using podman)
cd /local/github/domino-docker/start_script
./install_domino_container

Configuring the Domino container

Next, you have to configure the Domino server container. The key file for this is the domino_container file in the /etc/sysconfig directory. The content of this file is used for the container parameters. Normally, you would add these parameters to a docker run command or a docker-compose yaml file. This has been made much easier by using the domino_container script and this configuration file.

Instead of opening this file, there’s an easier command to edit it, though:

domino_container config

Let’s have a look at this file:

CONTAINER_NAME=domino

This is the name under which you can find your container back if you do a docker/podman container ls. You can choose any name you want.

# Domino Docker Community/GitHub image
CONTAINER_IMAGE=hclcom/domino:latest

# Standard HCL image
#CONTAINER_IMAGE=domino-docker:latest

Here you define the Container image that will be used for the Domino container. You can enter your just created Domino image here (in which case you don’t have to change anything), choose to use the HCL docker image, or enter the name of your custom image (like one of the images from later parts of this blog series).

# If not set, machine hostname is used by default
#CONTAINER_HOSTNAME=domino.acme.loc

For the sake of portability, I would advise to uncomment this line and enter a specific hostname for this domino server.

DOMINO_SHUTDOWN_TIMEOUT=180

By default, a container has to stop within 10 seconds. If it doesn’t, it will be killed ungracefully. As Domino needs more time to stop gracefully, it’s important to add a parameter to prevent this default behaviour. The value of DOMINO_SHUTDOWN_TIMEOUT is used for this parameter.

# Using the host network is the best choice for a single Domino container running in a container
CONTAINER_NETWORK_NAME=host
#CONTAINER_PORTS="-p 1352:1352 -p 80:80 -p 443:443"

You can choose here to either use the host network, which means all Domino services in the container will listen on the IP address of the host or specify specific ports that will be forwarded to the container. For the latter, you have to comment the CONTAINER_NETWORK_NAME parameter and uncomment the CONTAINER_PORTS parameter. In my own setup, I added an extra IP address to my host (the IP address which used to belong to the virtual machine where my Domino server was running) and use the CONTAINER_PORTS parameter to forward only calls on this IP address to the Domino container.

CONTAINER_VOLUMES="-v notesdata_domino:/local/notesdata"

This is a parameter which you have to change. This parameter defines the path or paths on your host that you wish to map to the Domino server. Personally I mapped the directory /local/domino on my host to the /local directory of the container, but if you wish, you can map for example the translog directory to a different disk from your data directory etc. important: You need to make sure that the directories that you assign to the container have the proper access rights. Inside the container, the notes user has uid:gid 1000:1000, so all directories which you assign to the container have to be owned by this uid/gid. If you, for example, created a directory /local/domino on your host and assigned this to /local in the container, do a chown -R 1000:1000 /local/domino before you start the container.

# Environment file is used for first container start (run) to pass setup parameters

# Domino V12 One Touch Configuration
CONTAINER_ENV_FILE=env_container_domino12

# Domino V11 configuration with community image setup
#CONTAINER_ENV_FILE=env_container_domino11

You can use environment files to set up your Domino server. This is only applicable if you create a new server. If you copied the data directory of an existing server which you want to move to Domino inside a container, you can ignore these settings.

Domino V12 introduced the one-touch Domino setup to automatically set up your Domino server. That’s why, starting with Domino V12, there’s another environment file, env_container_domino12, for automatically setting up your server, compared to older server version which have to use the env_container_domino11 file. As an alternative, you can choose to not use any environment file. This will open the server in listen mode and let you use the remote server setup to set up the server.

# Docker Restart policy
CONTAINER_RESTART_POLICY=unless-stopped
CONTAINER_RESTART_POLICY=on-failure:3

These settings are specific for Docker and set the restart policy for the Domino container in the Docker daemon. If you use podman, you can comment out these settings, as podman uses a systemd file to start/restart/stop the domino container.

# Domino V12 Borg Backup support (enables FUSE device)
#BORG_BACKUP=yes

Domino V12 added the Domino backup solution, where you can back up Domino databases with a variety of backup tools. One of these tools is the open source Borg backup. If you want to use Borg backup, you need to install borgbackup on your host, build an image with Borg enabled and uncomment this line. See Daniel’s blog for more information.

# Editor Command
#EDIT_COMMAND=nano

The domino container script allows you to easily edit some files. By default, it uses vi for this. If you prefer nano, you need to uncomment this line.

Configuring your firewall

Before you start your server, make sure that all ports that your Domino services use are opened in the firewall of your host. Which ports/services those are depends of course on which services you want to make available. Below is an example of the commands you could use.

cp /local/github/domino-docker/start_script/extra/firewalld/nrpc.xml /etc/firewalld/services/
firewall-cmd --permanent --add-service=nrpc
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-service=smtp
firewall-cmd --permanent --add-service=ldaps
etc
firewall-cmd --reload

Starting your container

When you’ve configured your Domino server, you can start it by typing

domino_container start

That’s it. If all went well, your Domino server should start, and you should be able to access your server. To see what’s happening, you can type

domino_container console

To stop your domino server, type

domino_container stop

There are a lot of domino-container commands to assist you if something is not working or to manage your container in general, but that’s the topic of the next part.