This document discusses running Domino on Docker containers for both testing and production use cases. It provides background on Docker and compares Docker containers to traditional virtual machines. It also discusses challenges faced and considerations for running Domino on Docker in production environments, including:
- Automating container launch without additional configuration
- Running multiple containers of the same app for scaling
- Restarting applications if they crash
- Managing replication and avoiding out of date replicas
- Potential alternatives to creating many server IDs and internet site docs
2. Domino on Docker
Slobodan Lohja
Software Engineer
Canal Barge Company
Over 18 years in software
engineering
website: uxdesign.xpagesbeast.com
LinkedIn:
linkedin.com/in/slobodanlohja/
Twitter: @xpagesbeast
Lokesh Venkatesan
DevOps Engineer
Royal Cyber
Over 8 years in software
engineering
LinkedIn:
linkedin.com/in/lokeshm89/
Twitter: @lokeshm1989
Tom Hillebrand
Domino SME
SurfDomino
Over 24 years in software engineering
website: surfdomino.com
LinkedIn:
linkedin.com/in/tomhillebrand/
Twitter: @tchildy
3. What is Docker?
A technology that isolates
applications in memory on
a single host machine
where VMs duplicate the
host.
Where is VM in all of this?
VM is about the box, when
you need more space and
need to scale boxes.
https://learning-continuous-deployment.github.io/docker/conclusion/2015/06/14/conclusion/
4. History of Containers
2004 Oracle released a Solaris Container that combines system resource oracle history of
containerscontrols and boundary separation provided by zones, which were able to leverage features like
snapshots and cloning from ZFS.
2008 LXC (LinuX Containers) was the first, most complete implementation of Linux container manager. It
was implemented in 2008 using cgroups and Linux namespaces, and it works on a single Linux kernel
without requiring any patches.
2011: CloudFoundry started Warden in 2011, using LXC.
2013: Docker. Docker separated itself from the pack by offering an entire ecosystem for container
management.
2017: Kubernetes Orchestration proved itself (Google). Docker, IBM, AWS, Azure all support Kubernetes.
This field is continuing to evolve by the open source community
https://blog.aquasec.com/a-brief-history-of-containers-from-1970s-chroot-to-docker-2016
5. Docker Comparison with traditional VM
CONTAINER TECHNOLOGY
Concern is about the application not the O/S
Single host can run many applications
efficiently. Each applications ‘thinks’ they are
a single computer.
Quick to stand up a machine (minutes)
Easily switch hosting providers
VIRTUAL MACHINE TECHNOLOGY
Its about the server O/S and application
Less efficient (better than bare metal). A
computer, hard drive, memory all have to be
allocated for every VM even if the application
installed on it does not use all resources.
Takes longer to build a VM if you have the
room (hours, could be days)
* With Kubernetes to orchestrate containers, we will see IP addressing and load balancing
automated, like a plug and play network infrastructure.
6. Docker can stand up an entire solution
The host machine can be a vanilla Linux server with no JVM for example.
Install Docker, and script the stand up of many application servers.
Install Docker and start Domino:
$ docker pull lokeshm89/domino9.0.1
Install NGINX
◦ $ docker pull nginx
Scripts can install git, and you can script pulling applications from a repository.
7. XPages Apps on Domino Docker
XPages application shares same
NSF with data storage.
Turn on Domino Data Access
Services other tech uses Domino
NoSQL
Easy to get to, similar to on prem
iOS / Android Native
Apps
Docker Container – NoSQL Storage & UI
NSF NoSQL
Storage
(DominoDataAccess)
RESTAPI
XPages
8. XPages Apps on Domino Docker
Separate UI and NSF
Turn on Domino Data Access Services
other tech uses Domino NoSQL
Also easy, XPages UI and data
storage in different NSF files.
iOS / Android Native
Apps
Docker Container
NSF 2
NoSQLStorage
(DominoDataAccess)
RESTAPI
Xpages (NSF 1)
9. XPages Apps on Domino Docker
Use Domino Data Access Services to
expose to other technologies
Run UI in its own container and scale it
without causing issues with data
persistence.
NGINX Proxy to provide https
Difficult: Were we want to be
iOS / Android Native
Apps
Docker Container – NoSQL Storage
NSF NoSQL
Storage
(DominoDataAccess)
RESTAPI
Docker Container 1
XPages
Docker Container xx
XPages
<< Scale Horizontally>>
Domino SDK or REST API
10. Domino On Docker- where we started
First was to follow the great details presented by ekori.de
https://www.eknori.de/2017-08-20/domino-on-docker/
Vitalii Sharavara:
http://sharavara.com/2016/10/ibm-domino-in-docker-en/
Both of these folks assumed I wanted to launch a Container and leave it in a state where the
Domino server was listening for my “Remote Server Setup” client expecting I would then
manually configure the Domino server.
This isn’t what I wanted to do.
11. Domino On Docker
Used a Linux OS, CentOS 7.x, tiny footprint
Domino 9.0.1 FeaturePack 9 (also FP10)
Daniel Nashed Domino scripts for launching Domino
Linux is an excellent OS for a Domino server. Learn it!!!
It’s amazing to me how fast a Docker container launches
Need to mount a static volume to your container
Open port 1392 on your firewall
12. Domino On Docker – Use Case Testing
This approach is great if…
You want to build a server quickly with any version of Domino
You can make many Docker files that piece together the Domino Releases and Feature Packs you
want to test
You can then move the application you want to test to a container that has the specific version
of Domino you want to test your app on
Issues I ran into:
The network would not allow my Remote Server Setup client to connect to the container that
was waiting in listener mode
13. Domino on Docker- Use Case Production
We want to use Docker containers for production apps
We need a way to launch the container and just run without additional configuration -
Automation
We want multiple containers running with the same app to scale.
We want Docker to restart the application if the app crashes.
14. Domino on Docker- Use Case Production
In my Domino Directory:
Register a Domino server ID
Configure Connection docs and Internet Site docs in my directory for the server (and any others
you might need)
Pre-load the static volume with:
The Domino server ID for that server
a Notes.ini file I created that points to the correct ID file and contains the correct server name
information
15. Domino on Docker- Use Case Production
When the Container launches, I have a connection document in our directory to make sure it
replicates at startup so it can pull an updated directory and changes to the apps.
We can setup multiple static volumes. Each volume is for a specific Domino server. So when we
launch a container the volume we map to will be the Domino server.
We need to make sure we don’t launch more than one container against the same static volume.
16. Domino on Docker-Production
Other thoughts I need to test and figure out:
Configure the Docker file and notes.ini to put view rebuilds in a directory that is not in the static
volume (no need to save those)
Use the Domino start scripts to compact system dbs. We also don’t want the replicas to get out of
date
Is there another way to run Domino in a container instead of making many server ID’s and internet
site docs for each server?
IBM recommendations for Domino 9.0.1FP10 on Docker
http://www-01.ibm.com/support/docview.wss?uid=swg22013200
In CentOS when launching a container instead of “docker run –d” you must use “docker run –t –d”
When the Domino Service stops so does the container, but for testing you can get it to stay running by
launching into a bash shell instead.