Yesterday OpenNTF hosted the November webinar about Docker in general and Domino on Docker in particular. The aspects were diverse: from a manager's point of view, a developers perspective and for administrators. Christian Güdemann, our OpenNTF chairman opened the session by talking about general benefits using container. Then Dan Dumont, also OpenNTF board member, demonstrated how he uses 3 (!) Dominos on his machine to work on the AppDev pack - impressive! The last block was performed by Roberto Boccadoro (you guess it, OpenNTF board member, too) who showed how to get the Domino Early Access Program code drop up and running which is delivered exclusively as a Docker image and has no installers. This was done in several minutes including the server configuration - awesome!
The last part inspired me again to have a look to Domino on Docker. I already used the project from Daniel Nashed and Thomas Hampel to run Domino on my Mac. This approach is a bit different but also offers some convenience functionality like Daniel's console shell and start-stop scripts. I managed to destroy my local Domino on Docker installation a while back and never returned to create a new one - until yesterday. I am not a Docker pro and I had some issues using the official docs, but finally I managed it - also with help from Roberto.
Though it is recommended to start from a Linux environment like CentOS or RedHat, you can also use Docker on Windows (which in general is PITA) or macOS - which I did. Docker on macOS also spins up a small Linux subsystem where the Domino container runs perfectly - though not officially supported.
The documentation is good, although I missed a few explanations or examples. The docs assume you are used to use Docker in general and it's not updated to the new file names etc. so you have to change some parts.
The official documentation can be found here.
If you only want to get Domino 12 EAP running without caring too much about Docker itself, it can be quite confusing, so I decided to write down my approach. Everything you need happens in a terminal window.
First, get your Docker image with the latest version from FlexNet, which is the November code drop:
Domino_12.0_DockerImage_Nov2020EAP.tgz
Creating the image
With docker installed and running, type
docker load --input Domino_12.0_DockerImage_Nov2020EAP.tgz
This will take some time, be patient!
Creating the data volume
Domino needs a persistent data folder which is created with
docker volume create notesdata
Server configuration
For the next step you have to know the correct name of the image that you have to use:
docker image ls
This lists all images that are already available in your Docker environment. For example this looks like this:
REPOSITORY TAG IMAGE ID CREATED SIZE
domino-docker V1200_11042020prod 268c36ad9df7 2 weeks ago 1.44GB
portainer/portainer latest 62771b0b9b09 4 months ago 79.1MB
For all the next steps you need to know the name OR id of the Domino Docker image, which in this case is either
domino-docker:V1200_11042020prod
or
268c36ad9df7
I recommend to use the name (and the tag) as the id will be different for you. If you want to copy and paste the next command, use the name and tag like this:
docker run --rm --name dominosetup -v notesdata:/local/notesdata --hostname d12.local -p 8585:8585 -p 1352:1352 domino-docker:V1200_11042020prod --setup
This command explained:
Parameter |
Explanation |
run |
This starts the container in general |
--rm |
Removes the container after it is stopped |
--name |
Unique name which is not important, name it whatever you want but remember it as we need it in the next step again! |
-v |
Defines the volume that will be added to the container, in this case the data directory you created before. This will also be used later in the final container. The syntax is: volume name:real path. Domino expects the data folder in /local/notesdata, the name notesdata is the same as used above when you created the volume, so it also can be freely named |
--hostname |
This sould be a FQHN. This also will be used in the server document and during the configuration. It can be changed later of course |
-p |
This defines a port that should be exposed from the container to the outside world. For the first setup of the server we need 1352 (of course we do) and 8585, which is used by the Remote Server Configuration utility |
imagename |
In this case domino-docker:V1200_11042020prod , the image name that you saw before |
--setup |
This is an extra parameter which is passed to the container. The image from HCL recognizes this and starts the server in listen mode to run the configuration |
What does this do? This simply spins up a temporary container to run the server configuration. This will generate all the stuff you know in the data directory (which is persistent here thanks to the volume we are using). After stopping this container, it will be removed as we do not need it anymore. If you experienced problems during the configuration though, you can always re-start it to start over with a new attempt to setup the server.
After you have this container running you need to prepare the setup: we need a server id. You should generate it or use spare id. Once you created the server id, you need to copy it to the data folder of the server, preferably in a new terminal window. With the temporary container still running, you can do this with
docker cp -a server.id dominosetup:/local/notesdata
What does those parameter mean?
Parameter |
Explanation |
cp |
Copy a file to a container |
-a |
Archive flag, preserves all file attributes |
server.id |
The name of the id file on your local machine |
dominosetup |
The container name you used in the step before |
/local/notesdata |
The real path of the data folder in the container. Remember: this is persistent! |
When running your server configuration (which I do not explain here) you can see the server id when browsing to the data folder in the setup dialog - regardless if you are setting up a new or additional server.
After the setup program ended successfully you are asked if you want to stop the server listener - select yes and the container will stop running (and is removed automatically).
Starting Domino
The server setup now is done, so it's time to spin up your new Domino machine. There are several options explained in the docs (with or without seeing the console). I prefer the so called "detached" execution without a secret file that contains the server id credentials:
docker run -d --name domino12-nov -v notesdata:/local/notesdata --hostname d12.local --cap-add=SYS_PTRACE -p 1352:1352 -p 80:80 -p 443:443 domino-docker:V1200_11042020prod
Parameter |
Explanation |
run |
This starts the container in general |
-d |
So called "detached" mode which means this won't block your terminal (aka background process) |
--name |
The name of your container. This container is persistent and available when you start your Docker environment. In this case I chose a name which reflects that this is the November code drop |
-v |
The persistent volume again for the Domino data directory |
--hostname |
Your FQHN you used before. You can choose a different one here of course, but you then should change it also in the server document later |
--cap-add |
Enables settings to allow NSD to capture callstacks via the ptrace tool |
-p |
The lists of ports you want to expose. If you plan to use SMTP etc. then add their ports here as well. In this case we just expose Notes, HTTP and HTTPS |
imagename |
In this case domino-docker:V1200_11042020prod , the image name that we used before |
Congratulations, you've just created your first Domino server running on Docker - and it even belongs to your Domain, if you created the server id accordingly. It took only 5 steps (including downloading the image itself) - cool, isn't it?
One more thing...
Though the container is persistent and available once you start your Docker environment, it won't start automatically (unless you add the --restart option). I also do not recommend to start Domino automatically all the time. Though I like consoles, sometimes typing all these commands can be a hassle. I prefer a nice UI to manage my containers. I recommend to use Portainer which is installed by typing just 2 lines in the terminal - as a Docker container of course.
docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce
This will be started automatically with Docker itself and offers a nice UI. From there you are able to start your Domino container with a few clicks.