Documentum D2 container image (or how not to build container images)

We already saw that OpenText clearly fails to understand the concept of container (TIP: a container is a process, not a VM) so it keeps providing “D2/da/webtop/rest” containers, when what they should provide is an “application server” container where end users would mount the custom war file on /webapps or whatever (by the way, this would simplify the yaml/helm charts from hell with the million options to try to configure D2/da/etc. via yaml).

Anyway, it seems that understanding that concept is a lost battle, however, you would expect that at least OpenText would know by now how to properly build a Docker image. Well, to anyone’s surprise (except to OpenText engineers I guess), latest D2 (22.2) image is 3.65GB!!!!!! (This is bigger than Content Server itself)

registry.opentext.com/dctm-d2pp-classic-ol 22.2 1eee2a974793 5 weeks ago 3.65GB

Let’s investigate this wizardry… If we open the image we can see several “big” folders:

Wonder what’s going on here… let’s check that 700mb folder:

Not only we have D2 exploded on Tomcat’s webapps folder, we also have the D2.war on the image… What else do we have on those +100mb folders?

Yum-update cache… (several times)

Python? on a Tomcat (D2) application server??

But, what’s going on here? Well, when you run a multi-staged container build, you need to understand that every command creates a new layer (something clearly explained in the Docker documentation) so you should be extra-careful and delete everything you copy/create in the same step if it doesn’t have to be present on the final image (as explained in the Docker best-practices documentation). So basically, when creating the image, OpenText is first copying D2.war image, then in another stage they extract the files, and then on another step the war file is deleted (or that’s what they think they are doing, but they’re just creating a new layer without the file, not really deleting it). Also, instead of running a single yum-update and deleting the cache on the same stage, the just keep running yum-updates as they need it, effectively creating multiple cache folders…

This image can be easily squashed and you’ll end up with this:

dctm-d2222 22.2 d3d968108687 13 days ago 1.83GB

Exactly the same image, but nearly 2GB smaller, and this is without even bothering to remove the cache/unnecesarry files:

We’ll see if for 22.3 OpenText learns to deliver proper containers or we still have to deal with these +3GB images…

Documentum Search 20.4 Docker install guide

Opentext has released with the 20.4 release a new search engine that will replace xPlore, and that currently is supported in “testing” mode.

Documentation for Documentum Search is better than previous documentations (parameters are finally “properly” explained), and you can also find a full .yaml file to use as template. However, as we could have expected, that didn’t work, so some changes are required.

Environment

Host:
Windows 10 x64 8GB RAM
VMware Workstation Player 15

Guest:
CentOS 7.7 x64 25GB HD 4GB RAM 2 cores
PostgreSQL 11
Documentum 20.4

VM Creation

Just follow the Documentum 20.4 PostgreSQL post as I’ve used that VM.

Install Docker

Refer to Documentum 20.2 Docker install guide if you need help

Documentum Search 20.4

  • Get the images from the Opentext registry:

[dmadmin@dctm204 opt]$ docker login registry.opentext.com
[dmadmin@dctm204 opt]$ docker pull registry.opentext.com/dctm-search-agent:20.4.0
[dmadmin@dctm204 opt]$ docker pull registry.opentext.com/dctm-search-admin:20.4.0
[dmadmin@dctm204 opt]$ docker pull registry.opentext.com/dctm-search-cps:20.4.0
[dmadmin@dctm204 opt]$ docker pull registry.opentext.com/dctm-search-lunr:20.4.0
[dmadmin@dctm204 opt]$ docker pull registry.opentext.com/dctm-search-solr:20.4.0

  • Create folder structure. This is the one I’ve used:

[dmadmin@dctm204 opt]$ tree search
search/
|– admin
| `– logs
|– agent
| `– logs
|– cps
| `– logs
|– cps2
| `– logs
|– dfc.properties
|– lunr
| `– logs
|– search.yaml
|– solr
| |– base
| | |– log4j2.xml
| | `– logs
| |– logs
|– solr2
| |– base
| | |– log4j2.xml
| | `– logs
| |– logs
|– zoo
| |– data
| |– datalog
| `– logs
`– zoo.cfg

  • Create configuration files:

[dmadmin@dctm204 search]$ cp ../documentum/config/dfc.properties .
[dmadmin@dctm204 search] vi zoo.cfg
dataDir=/data
dataLogDir=/datalog
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
standaloneEnabled=true
admin.enableServer=true
4lw.commands.whitelist=mntr,conf,ruok
[dmadmin@dctm204 search] vi solr/base/log4j2.xml
<extract this file from the solr container>

  • Create search.yaml:

[dmadmin@dctm204 search]$ sudo vi search.yaml
<copy the template from the documentation>

At this point, I had several issues with the solr image. First, the container could not write into the mounted folder. In order to fix this, I had to force the uid in the yaml file by adding the following:

user: ‘1000:1000’

After this, Java could not allocate memory for large memory pages. In the end I create a custom image based on the the one from OT (follow the steps detailed on the Reducing Opentext Documentum 20.2 Docker image size post:

[dmadmin@dctm204 search]$ docker run -u 0 –privileged -it –entrypoint /bin/bash registry.opentext.com/dctm-search-solr:20.4.0
echo 22960 &gt; /proc/sys/vm/nr_hugepages
echo 1000 &gt; /proc/sys/vm/hugetlb_shm_group
echo “* soft memlock 626688” &gt;&gt; /etc/security/limits.conf
echo “* hard memlock 626688” &gt;&gt; /etc/security/limits.conf

  • Now if you’ve adjusted the values correctly on the yaml file (stick to 2 “replicas” or the container will also fail) you should be able to run

[dmadmin@dctm204 search]$ docker-compose -f search.yaml up

After a while, you should be able to login into the Documentum Search admin page (http://your-host:8800/):

search_consoleAnd if you log in Documentum Administrator:

index_agent

However, if you run a search, you’ll see that there’s an error and the search is not perfomed. If you watched the Opentext World breakout session for Documentum Search, you’ll probably notice the extra settings used on server.ini to configure the fulltext engine. I’ve tried those without luck, so I just took another approach, to $DOCUMENTUM/product/20.4/bin and do the following:

[dmadmin@dctm204 bin]$ mv libDsearchQueryPlugin.so libDsearchQueryPlugin.bak
[dmadmin@dctm204 bin]$ cp libsolrplugin.so libDsearchQueryPlugin.so

UPDATE: The “nice way” is doing this by editing the dmfulltext.ini file located in $DOCUMENTUM/fulltext.

Then restart the repository and searches should be working on the new search engine:

Improving Opentext’s Documentum Administrator 20.2 Docker container

If you go looking for Documentum’s DA 20.2 Docker file you’ll find the following:

documentum_adminstrator_20.2_docker_centos.tar (1.4 GB)

What’s wrong with this? Well, in a container world (specially when using application servers) why is there the word “centos” and why a tomcat is 1.4 GB?

The answer is simple: Whoever built this image didn’t know what a container is, and it seems that nobody knows yet at Opentext.

What is a container? Well you can google it, but a container IS NOT A VM, it is a process. The idea behind containers is to have an isolated process that can be easily scalable (ie: deploy multiple similar tomcat instances quickly). So what’s the point of running a Docker environment when what we are doing is simply deploying VM’s? None at all.

So let’s assume we can use an actual container, that can be scaled up quickly, and won’t force us to “redeploy” a Centos OS on each container (for Tomcat, as DA is not a process and should not be “a container”), what should we do? Here we go (Note that I’ve used the same VM used for Opentext Documentum 20.2 Docker with PostgreSQL install guide):

  • Pull Tomcat 9 + openJDK 11 image from DockerHub:
[dmadmin@dctm202 ~]$ docker pull tomcat:9-jdk11
9-jdk11: Pulling from library/tomcat
f15005b0235f: Pull complete
41ebfd3d2fd0: Pull complete
b998346ba308: Pull complete
f01ec562c947: Pull complete
74c11ae3efe8: Pull complete
c65829cc6c71: Pull complete
b98eacc09bf1: Pull complete
b12b9c976670: Pull complete
62a47f54db4c: Pull complete
8c872760f50c: Pull complete
Digest: sha256:2254679f4958efe7c9810d6a66d449f58b58-p 8888:80808ecd253e83e9d3afb68c51637cf4
Status: Downloaded newer image for tomcat:9-jdk11
docker.io/library/tomcat:9-jdk11

[dmadmin@dctm202 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 9-jdk11 54877c1fa80a 40 hours ago 647MB
  • Create the following folder structure and copy there these files:
/opt/docker/tomcat/conf/web.xml (just for Tag Pooling)
/opt/docker/tomcat/webapps/da.war (Da to deploy)
/opt/docker/tomcat/java.security (with anon whitelisted)
  • Run container (I’ve used 8888 as external port as the VM has another Tomcat running on 8080):
[dmadmin@dctm202 tomcat]$ docker run -it --rm -p 8888:8080 --name tomcatda -v /opt/docker/tomcat/java.security:/usr/local/openjdk-11/conf/security/java.security -v /opt/docker/tomcat/conf/web.xml:/usr/local/tomcat/conf/web.xml -v /opt/docker/tomcat/webapps:/usr/local/tomcat/webapps tomcat:9-jdk11

And that’s it, you now have a 650MB real container for DA.

Reducing Opentext Documentum 20.2 Docker image size

The Docker image size provided by Opentext for the Content Server is a ~3.5GB tar file:

[dmadmin@dctm202 ~]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
contentserver/centos/stateless/cs 20.2.0000.0110 f83cfb099daf 3 weeks ago 3.48GB

But if you run the image, you’ll see that the actual size of the container is ~2.6GB.

This difference comes from the intermediate layers stored on the original image. If you want to have a smaller image, you could export the container to a .tar file, but if you do this, you will lose all the default configurations required for running the container (ports exposed, entry point, etc.). But there’s a workaround to get a working trimmed image:

docker run -it --entrypoint /bin/bash contentserver/centos/stateless/cs:20.2.0000.0110
  • You can be as “aggressive” as you want removing unused stuff. You can skip this point, but I would at least delete all .dll files and aix/hpux/sol/win folders from com.emc.ide.external.dfc_1.0.0/dmbasic on Composer’s plugin folder, as those don’t make sense on a Linux image.
  • Run the docker rebase script:
./docker-rebase <CONTAINER_ID> contentserver/centos/stateless/cs:20.2.4
  • Export the generated image:
docker save contentserver/centos/stateless/cs:20.2.4 > cs202clean.tar

Now, you’ll have the following:

[dmadmin@dctm202 Scripts]$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
contentserver/centos/stateless/cs 20.2.4 5336da9204b0 34 minutes ago 2.49GB

Opentext Documentum 20.2 Docker with PostgreSQL install guide

This is a step-by-step guide to install Documentum 20.2 in a Linux environment with PostgreSQL 11 and Docker.

Some notes before starting:

  • Bundled scripts are from 16.7 (be careful with the paths)
  • Container image still has a lot of “wasted” space:
    • +0.5GB on /tmp
    • +0.5GB on files for windows/hpux/aix on a Linux image
  • Provided yml scripts are for an outdated docker composer version and don’t work OOTB

Environment

Host:
Windows 10 x64 8GB RAM
VMware Workstation Player 15

Guest:
CentOS 7.7 x64 25GB HD 4GB RAM 2 cores
PostgreSQL 11
Docker 19.03.4

VM Creation + PostgreSQL 11 configuration

You can just follow the procedure described in Opentext Documentum 20.2 PostgreSQL Developer Edition, as I’ve used the same VM for this one.

Docker configuration

  • Install docker:
[dmadmin@dctm202 ~]$ sudo yum install -y yum-utils && device-mapper-persistent-data && lvm2
[dmadmin@dctm202 ~]$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[dmadmin@dctm202 ~]$ sudo yum install -y docker-ce docker-ce-cli containerd.io
[dmadmin@dctm202 ~]$ sudo systemctl start docker
  • Install docker compose and check it is correctly installed:
[dmadmin@dctm202 docker]$ sudo yum install -y epel-release
[dmadmin@dctm202 docker]$ sudo yum install -y python-pip
[dmadmin@dctm202 docker]$ sudo pip install docker-compose
[dmadmin@dctm202 docker]$ sudo yum upgrade python*
[dmadmin@dctm202 docker]$ docker-compose version
docker-compose version 1.25.4, build unknown
docker-py version: 4.2.0
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017

Docker configuration

  • Import image:
[dmadmin@dctm202 docker]$ docker load -i Contentserver_Centos.tar
9e607bb861a7: Loading layer [==================================================>]  227.4MB/227.4MB
0b8351dad8f5: Loading layer [==================================================>]    156MB/156MB
0bdffe493043: Loading layer [==================================================>]  331.9MB/331.9MB
4477c4933872: Loading layer [==================================================>]  3.072kB/3.072kB
2cb92160ff08: Loading layer [==================================================>]  83.45MB/83.45MB
3791acd2392f: Loading layer [==================================================>]  11.92MB/11.92MB
9edf87e7e96b: Loading layer [==================================================>]  267.3kB/267.3kB
f823733197a1: Loading layer [==================================================>]  3.297MB/3.297MB
8175917577fb: Loading layer [==================================================>]  46.08kB/46.08kB
66c808159e56: Loading layer [==================================================>]  15.53MB/15.53MB
c60aa2091bd5: Loading layer [==================================================>]   98.3kB/98.3kB
b148e43b1fc1: Loading layer [==================================================>]  2.667GB/2.667GB
2cd48c26512d: Loading layer [==================================================>]  7.168kB/7.168kB
03eb108f7247: Loading layer [==================================================>]   12.6MB/12.6MB
ba3de33f6548: Loading layer [==================================================>]   2.56kB/2.56kB
Loaded image: contentserver/centos/stateless/cs:20.2.0000.0110
  • Create PostgreSQL tablespace file (Remember that you also need to add the container’s IP to the pg_hba file in order to be able to connect from the contanier)
[dmadmin@dctm202 dctmdocker]$ su - postgres
Password:
Last login: Sat Oct 19 19:39:49 CEST 2019 on pts/0
-bash-4.2$ mkdir /var/lib/pgsql/11/data/db_dockerdctm167_dat.dat
-bash-4.2$ exit
logout
  • Set required environment variables:
[dmadmin@dctm202 Scripts]$ vi ~/.bash_profile
export APP_SERVER_PASSWORD=dmadmin
export INSTALL_OWNER_PASSWORD=dmadmin
export ROOT_PASSWORD=dmadmin
export DOCBASE_PASSWORD=dmadmin
export DATABASE_PASSWORD=dmadmin
export GLOBAL_REGISTRY_PASSWORD=dmadmin
export AEK_PASSPHRASE=dmadmin
  • Configure file CS-Docker-Compose_Stateless.yml:
version: '3.7'
services:
  rcs:
    image: contentserver/centos/stateless/cs:20.2.0000.0110
    environment:
      - DOCKER_HOST=192.168.94.130
      - DATABASE_HOST=192.168.94.130
      - DATABASE_USER=postgres
      - DATABASE_PASSWORD=${DATABASE_PASSWORD}
      - DATABASE_SERVER_PORT=5432
      - SERVICE_NAME=MyPostgres
      - ROOT_PASSWORD=${ROOT_PASSWORD}
      - INSTALL_OWNER=dmadmin
      - INSTALL_OWNER_PASSWORD=${INSTALL_OWNER_PASSWORD}
      - DOCBASE_NAME=dctmdocker202
      - GLOBAL_REGISTRY_PASSWORD=${GLOBAL_REGISTRY_PASSWORD}
      - AEK_ALGORITHM=AES_256_CBC
      - AEK_PASSPHRASE=${AEK_PASSPHRASE}
      - AEK_NAME=CSaek
      - CONFIGURE_THUMBNAIL_SERVER=NO
      - THUMBNAIL_SERVER_PORT=8081
      - THUMBNAIL_SERVER_SSL_PORT=8443
      - EXTERNAL_DOCBROKER_PORT=1689
      - CONTENTSERVER_PORT=50000
      - APP_SERVER_PASSWORD=${APP_SERVER_PASSWORD}
      - INSTALL_OWNER_UID=1000
      - HIGH_VOLUME_SERVER_LICENSE=
      - TRUSTED_LICENSE=
      - STORAGEAWARE_LICENSE=
      - XMLSTORE_LICENSE=
      - SNAPLOCKSTORE_LICENSE=
      - RPS_LICENSE=
      - FED_RECD_SERVICE_LICENSE=
      - RECORD_MANAGER_LICENSE=
      - PRM_LICENSE=
      - DOCBASE_PASSWORD=${DOCBASE_PASSWORD}
      - INSTALLER_UI=silent
      - KEEP_TEMP_FILE=true
      - INSTALLER_DEBUG_LOG=true
      - DOCBASE_ID=453216
      - USE_EXISTING_DATABASE_ACCOUNT=
      - INDEXSPACE_NAME=DM_XCHIVE_DOCBASE
      - USE_EXISTING_AEK=false
    hostname:
      "dctmdocker202"
    container_name:
      "dctmdocker202"
    ports:
      - "1689:1689"
      - "1690:1690"
      - "50000:50000"
      - "50001:50001"
      - "9080:9080"
      - "9082:9082"
      - "9081:9081"
      - "9084:9084"
      - "8081:8081"
      - "8443:8443"
    volumes:
      - DocbaseName_odbc:/opt/dctm/odbc
      - DocbaseName_data:/opt/dctm/data
      - DocbaseName_dba:/opt/dctm/dba
      - DocbaseName_share:/opt/dctm/share
      - DocbaseName_dfc:/opt/dctm/config
      - DocbaseName_mdserver_conf:/opt/dctm/mdserver_conf
      - DocbaseName_mdserver_log:/opt/dctm/wildfly17.0.1/server/DctmServer_MethodServer/log
      - DocbaseName_mdserver_logs:/opt/dctm/wildfly17.0.1/server/DctmServer_MethodServer/logs
      - DocbaseName_Thumbnail_Server_conf:/opt/dctm/product/20.2/thumbsrv/conf
      - DocbaseName_Thumbnail_Server_webinf:/opt/dctm/product/20.2/thumbsrv/container/webapps/thumbsrv/WEB-INF
      - DocbaseName_xhive_storage:/opt/dctm/xhive_storage
      - DocbaseName_XhiveConnector:/opt/dctm/wildfly17.0.1/server/DctmServer_MethodServer/deployments/XhiveConnector.ear
      - DocbaseName_MigrationUtility:/opt/dctm/product/20.2/install/external_apps/MigrationUtil
    privileged: true
#'volumes' service definition:
volumes:
 DocbaseName_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/docker/data
 DocbaseName_share:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/docker/share
 DocbaseName_dba:
 DocbaseName_dfc:
 DocbaseName_odbc:
 DocbaseName_mdserver_conf:
 DocbaseName_mdserver_log:
 DocbaseName_mdserver_logs:
 DocbaseName_Thumbnail_Server_conf:
 DocbaseName_Thumbnail_Server_webinf:
 DocbaseName_XhiveConnector:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/docker/xhive
 DocbaseName_xhive_storage:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/docker/xhive_storage
 DocbaseName_MigrationUtility:

Note: As usual, documentation is lacking/wrong and the scripts don’t work at all. This is the list of parameters that I had to change in CS-Docker-Compose_Stateless.yml file in order for docker compose to work:

    image: contentserver/centos/stateless/cs:16.7.0000.0810
    environment:
      - DOCKER_HOST=192.168.94.130
      - DATABASE_HOST=192.168.94.130
      - DOCBASE_NAME=dctmdocker202
    hostname:
      "dctmdocker202"
    container_name:
      "dctmdocker202"
    ports:
      - "1689:1689"
      - "1690:1690"
      - "50000:50000"
      - "50001:50001"
      - "9080:9080"
      - "9082:9082"
      - "9081:9081"
      - "9084:9084"
      - "8081:8081"
      - "8443:8443"
volumes:
 DocbaseName_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/docker/data
 DocbaseName_share:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/docker/share
 DocbaseName_XhiveConnector:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/docker/xhive
 DocbaseName_xhive_storage:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/docker/xhive_storage
  • Run the docker compose file:
[dmadmin@dctm202 Scripts]$ docker-compose -f CS-Docker-Compose_Stateless.yml up -d
Creating volume "scripts_DocbaseName_mdserver_logs" with default driver
Creating volume "scripts_DocbaseName_dfc" with default driver
Creating volume "scripts_DocbaseName_XhiveConnector" with local driver
Creating volume "scripts_DocbaseName_Thumbnail_Server_conf" with default driver
Creating volume "scripts_DocbaseName_Thumbnail_Server_webinf" with default driver
Creating volume "scripts_DocbaseName_data" with local driver
Creating volume "scripts_DocbaseName_dba" with default driver
Creating volume "scripts_DocbaseName_mdserver_conf" with default driver
Creating volume "scripts_DocbaseName_mdserver_log" with default driver
Creating volume "scripts_DocbaseName_odbc" with default driver
Creating volume "scripts_DocbaseName_share" with local driver
Creating volume "scripts_DocbaseName_xhive_storage" with local driver
Creating volume "scripts_DocbaseName_MigrationUtility" with default driver
Creating dctmdocker202 ... done

 

Remember that if something goes wrong you’ll have to:

  • Stop the container
  • Delete the container
  • Delete the volumes created

Once the process finishes, you should be able to idql from the container:

[dmadmin@dctm202 ~]$ docker exec -i -t dctmdocker202 /bin/basht dctmdocker202 /bin/bash
[root@dctmdocker202 /]# su - dmadmin

[dmadmin@dctmdocker202 ~]$ idql dctmdocker202
Please enter a user (dmadmin):
Please enter password for dmadmin:
OpenText Documentum idql - Interactive document query interface
Copyright (c) 2020. OpenText Corporation
All rights reserved.
Client Library Release 20.2.0000.0082
Connecting to Server using docbase dctmdocker202
[DM_SESSION_I_SESSION_START]info: "Session 0106ea608000016c started for user dmadmin."
Connected to OpenText Documentum Server running Release 20.2.0000.0110 Linux64.Postgres
1>

DCTM 16.7 Docker with PostgreSQL install guide

This is a step-by-step guide to install Documentum 16.7 in a Linux environment with PostgreSQL 11 and Docker.

Environment

Host:
Windows 10 x64 8GB RAM
VMware Workstation Player 15

Guest:
CentOS 7.7 x64 25GB HD 4GB RAM 2 cores
PostgreSQL 11
Docker 19.03.4

VM Creation + PostgreSQL 11 configuration

You can just follow the procedure described in Opentext Documentum 16.7 PostgreSQL Developer Edition

Docker configuration

  • Install docker:
[dmadmin@dctm167docker ~]$ sudo yum install -y yum-utils && device-mapper-persistent-data && lvm2
[dmadmin@dctm167docker ~]$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
[dmadmin@dctm167docker ~]$ sudo yum install -y docker-ce docker-ce-cli containerd.io
[dmadmin@dctm167docker ~]$ sudo systemctl start docker
  • Install docker compose and check it is correctly installed:
[dmadmin@dctm167docker dctmdocker]$ sudo yum install -y epel-release
[dmadmin@dctm167docker dctmdocker]$ sudo yum install -y python-pip
[dmadmin@dctm167docker dctmdocker]$ sudo pip install docker-compose
[dmadmin@dctm167docker dctmdocker]$ sudo yum upgrade python*
[dmadmin@dctm167docker dctmdocker]$ docker-compose version
docker-compose version 1.24.1, build 4667896
docker-py version: 3.7.3
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017

Docker configuration

  • Import image:
[dmadmin@dctm167docker dockerimage]$ docker load -i Contentserver_Centos.tar
d69483a6face: Loading layer [==================================================>]  209.5MB/209.5MB
72dea7bec644: Loading layer [==================================================>]  217.2MB/217.2MB
d3468dffaa29: Loading layer [==================================================>]  315.1MB/315.1MB
1f70936ed489: Loading layer [==================================================>]  3.072kB/3.072kB
6a28c1188813: Loading layer [==================================================>]  239.6MB/239.6MB
07cf201dbdc0: Loading layer [==================================================>]  225.8kB/225.8kB
abe3ca337db9: Loading layer [==================================================>]  3.297MB/3.297MB
628e629128da: Loading layer [==================================================>]  46.08kB/46.08kB
4893b60dc3f1: Loading layer [==================================================>]  3.568MB/3.568MB
46d106ddfac4: Loading layer [==================================================>]  94.21kB/94.21kB
49adcbc15f60: Loading layer [==================================================>]  4.121GB/4.121GB
e5fd2930e234: Loading layer [==================================================>]  508.5MB/508.5MB
be7e1221aecc: Loading layer [==================================================>]  679.4kB/679.4kB
6a0c0059135d: Loading layer [==================================================>]  7.168kB/7.168kB
4151aa90b006: Loading layer [==================================================>]   2.56kB/2.56kB
Loaded image: contentserver/centos/stateless/cs:16.7.0000.0810
[dmadmin@dctm167docker dockerimage]$ docker images
REPOSITORY                          TAG                 IMAGE ID            CREATED             SIZE
contentserver/centos/stateless/cs   16.7.0000.0810      589b5cf8dbc7        8 weeks ago         5.59GB
  • Create PostgreSQL tablespace file:
[dmadmin@dctm167docker dctmdocker]$ su - postgres
Password:
Last login: Sat Oct 19 19:39:49 CEST 2019 on pts/0
-bash-4.2$ mkdir /var/lib/pgsql/11/data/db_dockerdctm167_dat.dat
-bash-4.2$ exit
logout
  • Set required environment variables:
[dmadmin@dctm167docker Scripts]$ vi ~/.bash_profile
export APP_SERVER_PASSWORD=dmadmin
export INSTALL_OWNER_PASSWORD=dmadmin
export ROOT_PASSWORD=dmadmin
export DOCBASE_PASSWORD=dmadmin
export DATABASE_PASSWORD=dmadmin
export GLOBAL_REGISTRY_PASSWORD=dmadmin
export AEK_PASSPHRASE=dmadmin
  • Configure file CS-Docker-Compose_Stateless.yml:
#For description of parameter please do refer to Readme.txt
version: '3.7'
services:
  rcs:
    image: contentserver/centos/stateless/cs:16.7.0000.0810
    environment:
      - DOCKER_HOST=192.168.94.129
      - DATABASE_HOST=192.168.94.129
      - DATABASE_USER=postgres
      - DATABASE_PASSWORD=${DATABASE_PASSWORD}
      - DATABASE_SERVER_PORT=5432
      - SERVICE_NAME=MyPostgres
      - ROOT_PASSWORD=${ROOT_PASSWORD}
      - INSTALL_OWNER=dmadmin
      - INSTALL_OWNER_PASSWORD=${INSTALL_OWNER_PASSWORD}
      - DOCBASE_NAME=dockerdctm167
      - GLOBAL_REGISTRY_PASSWORD=${GLOBAL_REGISTRY_PASSWORD}
      - AEK_ALGORITHM=AES_256_CBC
      - AEK_PASSPHRASE=${AEK_PASSPHRASE}
      - AEK_NAME=CSaek
      - CONFIGURE_THUMBNAIL_SERVER=NO
      - THUMBNAIL_SERVER_PORT=8081
      - THUMBNAIL_SERVER_SSL_PORT=8443
      - EXTERNAL_DOCBROKER_PORT=1689
      - CONTENTSERVER_PORT=50000
      - APP_SERVER_PASSWORD=${APP_SERVER_PASSWORD}
      - INSTALL_OWNER_UID=1000
      - HIGH_VOLUME_SERVER_LICENSE=
      - TRUSTED_LICENSE=
      - STORAGEAWARE_LICENSE=
      - XMLSTORE_LICENSE=
      - SNAPLOCKSTORE_LICENSE=
      - RPS_LICENSE=
      - FED_RECD_SERVICE_LICENSE=
      - RECORD_MANAGER_LICENSE=
      - PRM_LICENSE=
      - DOCBASE_PASSWORD=${DOCBASE_PASSWORD}
      - INSTALLER_UI=silent
      - KEEP_TEMP_FILE=false
      - INSTALLER_DEBUG_LOG=true
      - DOCBASE_ID=453216
      - USE_EXISTING_DATABASE_ACCOUNT=
      - INDEXSPACE_NAME=DM_XCHIVE_DOCBASE
      - USE_EXISTING_AEK=false
    hostname:
      "dockerdctm167"
    container_name:
      "dockerdctm167"
    ports:
      - "1689:1689"
      - "1690:1690"
      - "50000:50000"
      - "50001:50001"
      - "9080:9080"
      - "9082:9082"
      - "9081:9081"
      - "9084:9084"
      - "8081:8081"
      - "8443:8443"
    volumes:
      - DocbaseName_odbc:/opt/dctm/odbc
      - DocbaseName_data:/opt/dctm/data
      - DocbaseName_dba:/opt/dctm/dba
      - DocbaseName_share:/opt/dctm/share
      - DocbaseName_dfc:/opt/dctm/config
      - DocbaseName_mdserver_conf:/opt/dctm/mdserver_conf
      - DocbaseName_mdserver_log:/opt/dctm/wildfly11.0.0/server/DctmServer_MethodServer/log
      - DocbaseName_mdserver_logs:/opt/dctm/wildfly11.0.0/server/DctmServer_MethodServer/logs
      - DocbaseName_Thumbnail_Server_conf:/opt/dctm/product/16.7/thumbsrv/conf
      - DocbaseName_Thumbnail_Server_webinf:/opt/dctm/product/16.7/thumbsrv/container/webapps/thumbsrv/WEB-INF
      - DocbaseName_xhive_storage:/opt/dctm/xhive_storage
      - DocbaseName_XhiveConnector:/opt/dctm/wildfly11.0.0/server/DctmServer_MethodServer/deployments/XhiveConnector.ear
      - DocbaseName_MigrationUtility:/opt/dctm/product/16.7/install/external_apps/MigrationUtil
    privileged: true
#'volumes' service definition:
volumes:
 DocbaseName_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/dctmdocker/data
 DocbaseName_share:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/dctmdocker/share
 DocbaseName_dba:
 DocbaseName_dfc:
 DocbaseName_odbc:
 DocbaseName_mdserver_conf:
 DocbaseName_mdserver_log:
 DocbaseName_mdserver_logs:
 DocbaseName_Thumbnail_Server_conf:
 DocbaseName_Thumbnail_Server_webinf:
 DocbaseName_XhiveConnector:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/dctmdocker/xhive
 DocbaseName_xhive_storage:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/dctmdocker/xhive_storage
DocbaseName_MigrationUtility:

Note: As usual, documentation is lacking/wrong and the scripts don’t work at all. This is the list of parameters that I had to change in CS-Docker-Compose_Stateless.yml file in order for docker compose to work:

    image: contentserver/centos/stateless/cs:16.7.0000.0810
    environment:
      - DOCKER_HOST=192.168.94.129
      - DATABASE_HOST=192.168.94.129
      - DOCBASE_NAME=dockerdctm167
    hostname:
      "dockerdctm167"
    container_name:
      "dockerdctm167"
    ports:
      - "1689:1689"
      - "1690:1690"
      - "50000:50000"
      - "50001:50001"
      - "9080:9080"
      - "9082:9082"
      - "9081:9081"
      - "9084:9084"
      - "8081:8081"
      - "8443:8443"
volumes:
 DocbaseName_data:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/dctmdocker/data
 DocbaseName_share:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/dctmdocker/share
 DocbaseName_XhiveConnector:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/dctmdocker/xhive
 DocbaseName_xhive_storage:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /opt/dctmdocker/xhive_storage

Remember that if something goes wrong you’ll have to:

  • Stop the container
  • Delete the container
  • Delete the volumes created

Once the process finishes, you should be able to idql from the container:

[dmadmin@dockerdctm167 ~]$ idql dockerdctm167
Please enter a user (dmadmin):
Please enter password for dmadmin:

        OpenText Documentum idql - Interactive document query interface
        Copyright (c) 2018. OpenText Corporation
        All rights reserved.
        Client Library Release 16.7.0000.0322

Connecting to Server using docbase dockerdctm167
[DM_SESSION_I_SESSION_START]info:  "Session 0106ea608000050f started for user dmadmin."

Connected to OpenText Documentum Server running Release 16.7.0000.0810  Linux64.Postgres
1>

DCTM 16.4 Docker+Oracle installation guide

Since v16.4, Opentext doesn’t provide a “preconfigured” Docker image for Documentum running on Oracle. If you want to use a docker image running PostgreSQL you can use the same procedure as described for Full docker CS7.3 PostgreSQL + D2 4.7 installation guide or DCTM 7.3 PostgreSQL with Docker install guide, and you should not have too many issues 😀

This guide will help you setup a VM running CentOS 7 where we will install Oracle (Express) and docker, and will be building a Documentum image. We will split the build in several images to avoid having to do a full rebuild if something goes wrong 😀

Environment

Host:
Windows 10 x64 8GB RAM
VMware Workstation Player 12

Guest:
CentOS 7 x64 25GB HD 4GB RAM 2 cores
Docker 1.13.1

VM Creation

Mount the CentOS 7 DVD image, boot the machine and follow the steps. You can choose to let EasyInstall do the work for you. I used minimal package install to save resources, named the machine vm-dctmdocker, configure the network and set the root password.

Oracle XE setup

  • I copied every installer in $DOCUMENTUM/installers, so:

[dmadmin@vm-dctmdocker opt]$ sudo mkdir documentum
[dmadmin@vm-dctmdocker opt]$ sudo chown dmadmin.dmadmin documentum
[dmadmin@vm-dctmdocker documentum]$ mkdir installers
[dmadmin@dctmdocker installers]$ cp /mnt/hgfs/dctm72/oracle-xe-11.2.0-1.0.x86_64.rpm/Disk1/oracle-xe-11.2.0-1.0.x86_64.rpm .

  • Install needed libraries, run installer, run configuration tool (remember to change the default 8080 port to something else to avoid conflicts with tomcat if you want to use an application server):

[dmadmin@vm-dctmdocker installers]$ sudo yum install libaio bc
[dmadmin@vm-dctmdocker installers]$ sudo rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm
[dmadmin@vm-dctmdocker installers]$ sudo /etc/init.d/oracle-xe configure

  • Launch sqlplus to enable remote access and remove the password expiration:

[dmadmin@vm-dctmdocker installers]$ . /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh

[dmadmin@vm-dctmdocker installers]$ /u01/app/oracle/product/11.2.0/xe/bin/sqlplus system
EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
quit

Docker setup

We’ll just install docker, adding dmadmin user to the docker group so we don’t need to use sudo every time we want to run the “docker” command

[dmadmin@vm-dctmdocker installers]$ sudo yum install docker
[dmadmin@vm-dctmdocker installers]$ sudo usermod -a -G docker dmadmin
[dmadmin@vm-dctmdocker installers]$ systemctl restart docker.service

Centos docker image setup

This base image will just add required packages and minor configurations:

[dmadmin@vm-dctmdocker installers]$ docker pull centos
[dmadmin@vm-dctmdocker installers]$ docker build –no-cache -f ./customCentosDockerfile -t custom_centos .

customCentosDockerfile:

FROM centos

MAINTAINER aldago

RUN echo root:root | chpasswd

RUN yum install -y rng-tools.x86_64 unzip libaio sudo tail vi openssh-server; \
yum clean all; \
sed -i ‘s/PermitRootLogin without-password/PermitRootLogin yes/’ /etc/ssh/sshd_config; \
sed ‘s@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g’ -i /etc/pam.d/sshd

RUN /sbin/rngd -b -r /dev/urandom -p /dev/random

Documentum base image setup

This image will install Documentum binaries and Oracle client:

[dmadmin@vm-dctmdocker installers]$ docker build –no-cache -f ./dctmcentosDockerfile -t centos_dctm .

Dockerfile:

FROM custom_centos

MAINTAINER aldago

RUN echo root:root | chpasswd

ADD db/install/oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm /tmp/oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm
ADD db/install/oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm /tmp/oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm

RUN rpm -ivh /tmp/oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm /tmp/oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm; \
rm /tmp/oracle-instantclient11.2-sqlplus-11.2.0.3.0-1.x86_64.rpm; \
rm /tmp/oracle-instantclient11.2-basic-11.2.0.3.0-1.x86_64.rpm

## create dmadmin user
RUN useradd dmadmin; \
passwd -f -u dmadmin; \
mkdir -p /home/dmadmin/.ssh; chown dmadmin /home/dmadmin/.ssh; chmod 700 /home/dmadmin/.ssh; \
echo “dmadmin ALL=(ALL) ALL” >> /etc/sudoers.d/dmadmin; \
sed -i -e ‘s/Defaults requiretty.*/ #Defaults requiretty/g’ /etc/sudoers

# Create folder structure
RUN mkdir /opt/documentum; \
mkdir /opt/documentum/product; \
mkdir /opt/documentum/product/16.4; \
mkdir /opt/documentum/install; \
mkdir /opt/documentum/db; \
chown -R dmadmin:dmadmin /opt/documentum

ADD cs/install/* /opt/documentum/install/
ADD cs/config/installProperties.properties /opt/documentum/install/
ADD cs/config/configProperties.properties /opt/documentum/install/
ADD cs/config/configPropertiesDoc.properties /opt/documentum/install/

ADD db/config/tnsnames.ora /opt/documentum/db/
ADD db/config/fix_tnsnames.sh /opt/documentum/
RUN chown dmadmin.dmadmin /opt/documentum/fix_tnsnames.sh; \
chown dmadmin.dmadmin /opt/documentum/db/tnsnames.ora; \
chmod u+x /opt/documentum/fix_tnsnames.sh; \
chmod u+g /opt/documentum/db/tnsnames.ora

RUN echo “#dctm services” >> /etc/services ; \
echo “dctm164 49001/tcp # 16.4 Repository native connection” >> /etc/services ; \
echo “dctm164_s 49002/tcp # 16.4 Repository secure connection” >> /etc/services ; \
ln /usr/lib64/libsasl2.so.3 /usr/lib64/libsasl2.so.2; \
ln -s /usr/lib/oracle/11.2/client64/lib/libclntsh.so.11.1 /usr/lib/oracle/11.2/client64/lib/libclntsh.so; \
ln -s /usr/lib/oracle/11.2/client64/lib/libocci.so.11.1 /usr/lib/oracle/11.2/client64/lib/libocci.so; \
chown -R dmadmin:dmadmin /opt/documentum/install; \
chmod u+x /opt/documentum/install/serverSetup.bin

USER dmadmin

ENV DOCUMENTUM /opt/documentum
ENV DM_HOME $DOCUMENTUM/product/16.4
ENV LC_ALL C
ENV JAVA_HOME /opt/documentum/java64/1.8.0_152
ENV ORACLE_HOME /usr/lib/oracle/11.2/client64
ENV ORACLE_SID XE
ENV PATH $ORACLE_HOME/bin:$DM_HOME/bin:$PATH
ENV NLS_LANG AMERICAN_AMERICA.AL32UTF8
ENV LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:$DM_HOME/bin/FIPS/:$JAVA_HOME/jre/lib/amd64/server:$DM_HOME/bin:$LD_LIBRARY_PATH
ENV R_SHLIB_LD_LIBRARY_PATH=$DM_HOME/bin/FIPS
ENV PATH=/usr/lib/oracle/11.2/client64/bin:$PATH
ENV TNS_ADMIN=/opt/documentum/db

RUN $DOCUMENTUM/install/serverSetup.bin -f installProperties.properties

ENV DBHOST 192.168.231.135

RUN /opt/documentum/fix_tnsnames.sh; \
mv $DM_HOME/bin/dmdbtest $DM_HOME/bin/dmdbtest.bak; \
echo “exit 0” >> $DM_HOME/bin/dmdbtest; \
chmod u+x $DM_HOME/bin/dmdbtest

EXPOSE 22

Documentum repository:

This image will run the repository configuration:

[dmadmin@vm-dctmdocker installers]$ docker build –no-cache -t dctm164 .

Dockerfile:

FROM centos_dctm

MAINTAINER aldago

USER dmadmin

ENV DBHOST 192.168.231.135

RUN sed -i “/SERVER.PROJECTED_DOCBROKER_HOST/cSERVER.PROJECTED_DOCBROKER_HOST=$HOSTNAME” /opt/documentum/install/configProperties.properties; \
sed -i “/SERVER.SMTP_SERVER_NAME/cSERVER.SMTP_SERVER_NAME=$HOSTNAME” /opt/documentum/install/configProperties.properties; \
sed -i “/SERVER.FQDN/cSERVER.FQDN=$HOSTNAME” /opt/documentum/install/configProperties.properties; \
/opt/documentum/product/16.4/install/dm_launch_server_config_program.sh -f /opt/documentum/install/configProperties.properties

RUN sed -i “/dfc.session.secure_connect_default/cdfc.session.secure_connect_default=try_native_first” /opt/documentum/config/dfc.properties

EXPOSE 22 1489 1492 49001 49002

ADD cs/config/startup-dctm.sh /opt/documentum/startup-dctm.sh

USER root
RUN chown dmadmin.dmadmin /opt/documentum/startup-dctm.sh; \
chmod u+x /opt/documentum/startup-dctm.sh

USER dmadmin
CMD /opt/documentum/fix_tnsnames.sh; /opt/documentum/startup-dctm.sh ; bash

Additional information

Custom scripts created for the install:

  • startup-dctm.sh: updates hostname, dfc.properties, runs dm_crypto_boot and starts the repository services.
  • fix_tnsnames.sh: updates tnsnames with Oracle server public IP (which in this example is hardcoded)
  • configProperties.properties: Standard silent install script

If something goes wrong at some point, remember you’ll need to:

  • Delete docker dangling containers
  • Delete user created on database by the installer
  • Delete tablespaces created on database by the installer

 

 

Full docker CS7.3 PostgreSQL + D2 4.7 installation guide

Some thoughts on this before the guide:

  • EMC Dell keeps messing the documentation. Still there are mistakes, lack of information and some misleading procedures. Anyway, with time and by trial-error method, you can set up the environment “quickly”.
  • Oh, the consistency! Dockerized D2 uses 3 containers (plus Documentum Administrator)
    • Content Server with D2 files (on CentOS)
    • D2 Config (Ubuntu)
    • D2 Client (Ubuntu)

Why they start with a CentOS and then move to Ubuntu is beyond my understanding, but I would like to know if there’s some technical reasons for this. Also, do we really need a different content server image for using D2?

  • I’m sure there are easier methods to configure everything, but well, for the “first” dockerized version we shouldn’t ask for much more…

Let’s go!

Environment

Host:
Windows 10 x64 8GB RAM
VMware Workstation Player 12

Guest:
CentOS 7 x64 25GB HD 4GB RAM 2 cores
Docker 1.12

I’ve used the same VM I created in DCTM 7.3 PostgreSQL with Docker install guide, just remember to stop the PostgreSQL and httpd services to avoid conflics.

PostgreSQL 9.6.1

You can follow the instructions in https://hub.docker.com/_/postgres/ to configure the postgres container:

  • Download the image:

[dmdocker@vm-dctm73 installers]$ docker pull postgres

  • Start the container:

[dmdocker@vm-dctm73 installers]$ docker run –name psql -p 5432:5432 -e POSTGRES_PASSWORD=dmadmin -e POSTGRES_USER=dba -v cs_db_data:/var/lib/postgresql/data -d postgres

  • Configure the user and tablespace folder:

[dmdocker@vm-dctm73 installers]$ docker exec -it psql /bin/bash
root@35d05a7640ff:/# su postgres
$ mkdir /var/lib/postgresql/data/db_d2repo_dat.dat

If you want to check if it is running, you can connect with any client such as SquirrelSQL

Content Server 7.3 + D2 files

This is similar to the “normal” content server configuration with docker:

  • Load the image:

[dmdocker@vm-dctm73 ~]$ docker load -i D2cs_Corepack_Centos.tar

  • Update environment variables:

dmdocker@vm-dctm73 ~]$ vi .bash_profile

#app server admin password
export APP_SERVER_ADMIN_PASSWORD=dmadmin
#This is install owner password
export INSTALL_OWNER_PASSWORD=dmadmin
#This is root user password
export ROOT_USER_PASSWORD=dmadmin
#Repository password. Required only for stateless configuration
export REPOSITORY_PASSWORD=dmadmin
#External Data base Server Admin password
export EXTERNALDB_ADMIN_PASSWORD=dmadmin
#Global Registry password
export BOF_REGISTRY_USER_PASSWORD=dmadmin
#AEK passphrase
export AEK_PASSPHRASE=dmadmin
export LOCKBOX_PASSPHRASE=Documentum.73

  • Update configuration files:

[dmdocker@vm-dctm73 Scripts]$ vi statelesscs.conf

###EMC Documentum on Docker
###(c) Copyright EMC Corp., 1992 – 2016
###All rights reserved.
###Version 1.0 dated 08/Sep/2016

#Documentum Content Server Image name
#Here 10.31.4.205 is Bangalore HUB.
#For PLE hub please change the ip as 10.8.46.202
#Here 7.3.0000 pointing to the latest 7.3 CS image. If we need perticular build version then just use 7.3.0000.0xxx
#Ex :  7.3.0000.0176
#Ubuntu Image:  10.31.4.205:5000/contentserver/ubuntu/stateless/cs:7.3.0000
#CentOS Image: 10.31.4.205:5000/contentserver/centos/stateless/cs:7.3.0000
#RHEL Image : 10.31.4.205:5000/contentserver/rhelora/stateless/cs:7.3.0000
IMAGE_NAME = d2cs_corepack_centos:4.7.0000.0246

#documentum License
HIGH_VOLUME_SERVER_LICENSE =
TRUSTED_LICNESE=
STORAGEAWARE_LICENSE=
XMLSTORE_LICENSE=
SNAPLOCKSTORE_LICENSE=LDNAPJEWPXQ
RPS_LICENSE=
FED_RECD_SERVICE_LICENSE=
RECORD_MANAGER_LICENSE=
PRM_LICENSE=

#Docbase configuration details
#Base machine IP
EXTERNAL_IP = 192.168.42.131

#External Data base server IP
EXTERNALDB_IP = 192.168.42.131

#External Data base Server Admin User
EXTERNALDB_ADMIN_USER = dba

#External Data base Server Port number
#Default port for postgres is 5432. Oracle is 1521
DB_SERVER_PORT=5432

#Docbase ID
DOCBASE_ID = 45321

#Docbase name
DOCBASE_NAME = d2repo

#Container host name.
CONTAINER_HOSTNAME = d2cs

#Container name.
CONTAINER_NAME = d2cs

#Conent Server port number to map in the base machine
CONTENT_SERVER_PORT= 50000
#Docbroker port number to map in the base machine
DOCBROKER_PORT =1689
#Method Server port number to map in the base machine
METHOD_SVR_PORT=9080

#App server management port
APP_SERVER_MGMNT_PORT=9084

#lockbox and aek related info
AEK_ALGORITHM = AES_256_CBC
#aek name
AEK_NAME = CSaek
#User wants to enable lock box then make it as true and provide the name and passphrase. To disable  lockbox then make it as false
ENABLE_LOCKBOX = true
LOCKBOX_FILE_NAME = lockbox.lb

#These are default values for 7.3. IF any thing is change like Jboss version or product version the change the values here
INSTALL_OWNER_USER=dmadmin
INSTALL_HOME=/opt
JBOSS=wildfly9.0.1
PRODUCT_MAJOR_VERSION=7.3

### remote data machine and docker plugin details.
#docker plugin type local,cifs,nfs etc. By default plugin is local, means the data file system is local. If you use the file system has remote then use proper plugin type and remote host details.
DOCKER_PLUGIN_TYPE=local
#Remote data machine.
EXTERNALDATA_HOST=192.168.42.131
#Data path folder which is on remote machine.You need to create a folder and share it on remote machine
REMOTE_DATA_PATH=/opt/dctmdocker/data
#Share path which is on remote machine. You need to create a folder and share it on remote machine
REMOTE_SHARE_PATH=/opt/dctmdocker/share
#If the docker plugin type is cifs then create a dmadmin user in base machine and provide the uid here. Otherwise this filed is empty.
#While starting the nethsare plugin please use  the same uid and gid as -o parameter
INSTALL_OWNER_UID=

#THUMBNAIL SERVER Configuration parameters. To enable Thumnail server make it as YES.
CONFIGURE_THUMBNAIL_SERVER = NO
THUMBNAIL_SERVER_PORT = 8081
THUMBNAIL_SERVER_SSL_PORT = 8443

[dmdocker@vm-dctm73 Scripts]$ vi statelesscs_config_compose.yml

version: ‘2’
services:
dctm_cs:
image: d2cs_corepack_centos:4.7.0000.0246
environment:
– HIGH_VOLUME_SERVER_LICENSE=
– TRUSTED_LICNESE=
– STORAGEAWARE_LICENSE=
– XMLSTORE_LICENSE=
– SNAPLOCKSTORE_LICENSE=
– RPS_LICENSE=
– FED_RECD_SERVICE_LICENSE=
– RECORD_MANAGER_LICENSE=
– PRM_LICENSE=
– ROOT_USER_PASSWORD=${ROOT_USER_PASSWORD}
– INSTALL_OWNER_PASSWORD=${INSTALL_OWNER_PASSWORD}
– INSTALL_OWNER_USER=dmadmin
– REPOSITORY_PASSWORD=${REPOSITORY_PASSWORD}
– EXTERNAL_IP=192.168.42.131
– EXTERNALDB_IP=192.168.42.131
– EXTERNALDB_ADMIN_USER=dba
– EXTERNALDB_ADMIN_PASSWORD=${EXTERNALDB_ADMIN_PASSWORD}
– DB_SERVER_PORT=5432
– DOCBASE_ID=45321
– DOCBASE_NAME=centdb
– USE_EXISTING_DATABASE_ACCOUNT=false
– INDEXSPACE_NAME=dm_repo_docbase
– BOF_REGISTRY_USER_PASSWORD=${BOF_REGISTRY_USER_PASSWORD}
– AEK_ALGORITHM=AES_256_CBC
– AEK_PASSPHRASE=${AEK_PASSPHRASE}
– AEK_NAME=CSaek
– ENABLE_LOCKBOX=true
– LOCKBOX_FILE_NAME=lockbox.lb
– LOCKBOX_PASSPHRASE=${LOCKBOX_PASSPHRASE}
– USE_EXISTING_AEK_LOCKBOX=false
– CONFIGURE_THUMBNAIL_SERVER=NO
– EXTDOCBROKERPORT=1689
– CONTENTSERVER_PORT=50000
– APP_SERVER_ADMIN_PASSWORD=${APP_SERVER_ADMIN_PASSWORD}
– INSTALL_OWNER_UID=
hostname:
“cont-d2cs”
container_name:
“d2csdocker”
ports:
– “DOCBROKER_PORT:DOCBROKER_PORT”
– “DOCBROKER_SECURE_PORT:DOCBROKER_SECURE_PORT”
– “CONTENT_SERVER_PORT:CONTENT_SERVER_PORT”
– “CONTENT_SERVER_SECURE_PORT:CONTENT_SERVER_SECURE_PORT”
– “METHOD_SVR_PORT:9080”
– “METHOD_SVR_SECURE_PORT:9082”
– “METHOD_SVR_JMX_PORT:9081”
– “THUMBNAIL_SERVER_PORT:8081”
– “THUMBNAIL_SERVER_SSL_PORT:8443”
– “APP_SERVER_MGMNT_PORT:9084”
volumes:
– DocbaseName_odbc:INSTALL_HOME/dctm/odbc
– DocbaseName_data:INSTALL_HOME/dctm/data
– DocbaseName_dba:INSTALL_HOME/dctm/dba
– DocbaseName_share:INSTALL_HOME/dctm/share
– DocbaseName_dfc:INSTALL_HOME/dctm/config
– DocbaseName_xhive_storage:INSTALL_HOME/dctm/xhive_storage
– DocbaseName_XhiveConnector:INSTALL_HOME/dctm/JBOSS/server/DctmServer_MethodServer/deployments/XhiveConnector.ear
– DocbaseName_mdserver_conf:INSTALL_HOME/dctm/mdserver_conf
– DocbaseName_mdserver_log:INSTALL_HOME/dctm/JBOSS/server/DctmServer_MethodServer/log
– DocbaseName_mdserver_logs:INSTALL_HOME/dctm/JBOSS/server/DctmServer_MethodServer/logs
– DocbaseName_Thumbnail_Server_conf:INSTALL_HOME/dctm/product/PRODUCT_MAJOR_VERSION/thumbsrv/conf
– DocbaseName_Thumbnail_Server_webinf:INSTALL_HOME/dctm/product/PRODUCT_MAJOR_VERSION/thumbsrv/container/webapps/thumbsrv/WEB-INF
– DocbaseName_ServerApps:INSTALL_HOME/dctm/wildfly9.0.1/server/DctmServer_MethodServer/deployments/ServerApps.ear
– DocbaseName_acs:INSTALL_HOME/dctm/wildfly9.0.1/server/DctmServer_MethodServer/deployments/acs.ear
– DocbaseName_mdserver_modules_emc:INSTALL_HOME/dctm/wildfly9.0.1/modules/system/layers/base/emc
– DocbaseName_opt_emc_d2:/opt/EMC/D2
privileged: true
volumes:
DocbaseName_data:
driver: DOCKER_PLUGIN_TYPE
driver_opts:
share: EXTERNALDATA_HOST/REMOTE_DATA_PATH
DocbaseName_dba:
DocbaseName_share:
driver: DOCKER_PLUGIN_TYPE
driver_opts:
share: EXTERNALDATA_HOST/REMOTE_SHARE_PATH
DocbaseName_dfc:
DocbaseName_odbc:
DocbaseName_XhiveConnector:
DocbaseName_mdserver_conf:
DocbaseName_mdserver_log:
DocbaseName_mdserver_logs:
DocbaseName_Thumbnail_Server_conf:
DocbaseName_Thumbnail_Server_webinf:
DocbaseName_xhive_storage:
DocbaseName_ServerApps:
DocbaseName_acs:
DocbaseName_mdserver_modules_emc:
DocbaseName_opt_emc_d2:

  • Run the creation script (the container will keep running with the repository started)

[dmdocker@vm-dctm73 Scripts]$ ./stateless_config.sh

DA

  • Load the image:

[dmdocker@vm-dctm73 da]$ docker load -i Documentum_Adminstrator_Centos.tar

  • Update configuration files (I’ve mapped the port used by DA to 80, so D2 can use the default 8080 and 8181, you can change this to any port you want):

[dmdocker@vm-dctm73 Scripts]$ vi statelessda_compose.yml

version: ‘2’
services:
dastateless:
image: dastatelessimage
environment:
– DOCBROKER_IP=192.168.42.131
– DOCBROKER_PORT=1689
– GLOBAL_REGISTRY_DOCBASE_NAME=d2repo
– BOF_REGISTRY_USER_PASSWORD=dmadmin
– CRYPTO_REGISTRY_DOCBASE_NAME=d2repo
– PRESETS_PREFERENCES_USER_PASSWORD=webtop
– APPSERVER_PORT=8080
– DFC_SESSION_SECURE_CONNECT_DEFAULT=try_native_first
container_name:
“da”
ports:
– “80:8080”
volumes:
– dalogs:/opt/tomcat/logs
– dacustom:/opt/tomcat/webapps/da/custom
privileged: true
volumes:
dalogs:
dacustom:

[dmdocker@vm-dctm73 Scripts]$ vi statelessda.conf

DOCBROKER_IP = 192.168.42.131
DOCBROKER_PORT = 1689
GLOBAL_REGISTRY_DOCBASE_NAME = d2repo
BOF_REGISTRY_USER_PASSWORD = dmadmin
CRYPTO_REGISTRY_DOCBASE_NAME = d2repo
PRESETS_PREFERENCES_USER_PASSWORD = webtop
IMAGE_NAME = da_centos:7.3.0000.0074
CONTAINER_HOSTNAME = dastatelessimage
APPSERVER_PORT = 8080
DFC_SESSION_SECURE_CONNECT_DEFAULT = try_native_first

  • Run the configuration script:

[dmdocker@vm-dctm73 Scripts]$ ./statelessda_config.sh

And you should be able to access DA in http://<your_vm_ip/da

D2 Config

  • Update provided dfc.properties in Config folder:

dfc.data.dir=/home/root/dctm
dfc.tokenstorage.dir=/home/root/dctm/apptoken
dfc.tokenstorage.enable=false
dfc.docbroker.host[0]=cont-d2cs
dfc.docbroker.port[0]=1489
dfc.docbroker.host[1]=cont-d2cs
dfc.docbroker.port[1]=1689
dfc.crypto.repository=d2repo
dfc.session.secure_connect_default=try_native_first
dfc.globalregistry.repository=d2repo
dfc.globalregistry.username=dm_bof_registry
dfc.globalregistry.password=AAAAEKirNMA6wt15JG4eDkp2cZ39euSH+HZGKgH+x3j7H4dK

  • Load the image:

[dmdocker@vm-dctm73 d2-config]$ docker load -i D2config_Corepack_Ubuntu.tar

  • Create a volume to store the log files:

[dmdocker@vm-dctm73 d2-config]$ docker volume create –name=d2configlogs

  • Start a container with the following command:

[dmdocker@vm-dctm73 Configfiles]$ docker run -h d2config –name d2config -d -v /opt/dctmdocker/installers/d2-config/Configfiles:/usr/local/tomcat/CustomConf -v d2configlogs:/usr/local/tomcat/webapps/D2-Config/logs -ti –add-host cont-d2cs:192.168.42.131 -p 8181:8080 d2config_corepack_ubuntu:4.7.0000.0246

Now we need to add the D2 Config instance to the privileged clients list, so if you don’t have Java in the machine, install it:

[dmdocker@vm-dctm73 Configfiles]$ sudo yum install java-1.8.0-openjdk

  • Get the keystore info:

[dmdocker@vm-dctm73 Configfiles]$ keytool -list -keystore dfc.keystore -storepass dfc -v

The line you want is the one that starts with “Owner”:

Owner: CN=dfc_K26safmZbYRvAPA6Q2XkHBGvOZQa, O=EMC, OU=Documentum

Now, go to DA, Client Rights Management, Privileged clients, Manage Clients, add the DFC instance to the privileged client list and then approve the client.

Now you should be able to access D2-Config in http://<your_vm_ip&gt;:8181/D2-Config

D2 Client

This exactly the same procedure described for D2 Config:

  • Update provided dfc.properties in Config folder

dfc.data.dir=/home/root/dctm
dfc.tokenstorage.dir=/home/root/dctm/apptoken
dfc.tokenstorage.enable=false
dfc.docbroker.host[0]=cont-d2cs
dfc.docbroker.port[0]=1489
dfc.docbroker.host[1]=cont-d2cs
dfc.docbroker.port[1]=1689
dfc.crypto.repository=d2repo
dfc.session.secure_connect_default=try_native_first
dfc.globalregistry.repository=d2repo
dfc.globalregistry.username=dm_bof_registry
dfc.globalregistry.password=AAAAEKirNMA6wt15JG4eDkp2cZ39euSH+HZGKgH+x3j7H4dK

  • Load the image:

[dmdocker@vm-dctm73 d2-client]$ docker load -i D2client_Corepack_Ubuntu.tar

  • Create a volume to store the log files:

[dmdocker@vm-dctm73 d2-client]$ docker volume create –name=d2clientlogs

  • Start a container with the following command:

[dmdocker@vm-dctm73 Configfiles]$ docker run -h d2client –name d2client -d -v /opt/dctmdocker/installers/d2-client/Configfiles:/usr/local/tomcat/CustomConf -v d2clientlogs:/usr/local/tomcat/webapps/D2/logs -ti –add-host cont-d2cs:192.168.42.131 -p 8080:8080 d2client_corepack_ubuntu:4.7.0000.0246

  • Get the keystore info:

[dmdocker@vm-dctm73 Configfiles]$ keytool -list -keystore dfc.keystore -storepass dfc -v

Again, get the owner info:

Owner: CN=dfc_nwacq6MGbSWEGIYstBDnukYIYWUa, O=EMC, OU=Documentum

Now, go to DA, Client Rights Management, Privileged clients, Manage Clients, add the DFC instance to the privileged client list and then approve the client.

Now you should be able to access D2 in http://<your_vm_ip&gt;:8080/D2, and a full docker Documentum environtment.

DCTM 7.3 PostgreSQL with Docker install guide

This is a step-by-step guide to install Documentum 7.3 with Docker in a Linux host with PostgreSQL 9.4.

Environment

Host:
Windows 10 x64 8GB RAM
VMware Workstation Player 12

Guest:
CentOS 7 x64 25GB HD 4GB RAM 2 cores
PostgreSQL 9.4
Docker 1.12
Documentum 7.3 PostgreSQL docker tar file

VM Creation

Mount the CentOS 7 DVD image, boot the machine and follow the steps. You can choose to let EasyInstall do the work for you. I used minimal package install to save resources, named the machine vm-dctm73, configure the network and set the root password.

OS Configuration

Follow the instructions posted in the DCTM 7.3 PostgreSQL Dev. Edition post for configuring the OS and PostgreSQL 9.4 (no need to configure the ODBC, just install PostgreSQL and phpPgAdmin). This time I’ve used “dmdocker” instead of “dmadmin”.

Extra steps to perform:

  • Create the following folder structure:

[dmdocker@vm-dctm73 ~]$ sudo mkdir /opt/dctmdocker
[dmdocker@vm-dctm73 ~]$ sudo chown dmdocker.dmdocker /opt/dctmdocker
[dmdocker@vm-dctm73 ~]$ mkdir /opt/dctmdocker/installers
[dmdocker@vm-dctm73 ~]$ mkdir /opt/dctmdocker/data
[dmdocker@vm-dctm73 ~]$ mkdir /opt/dctmdocker/share

  • Update the distribution (you need at least kernel 3.10.0.229, you can check the version by running “uname -r”)

[dmdocker@vm-dctm73 ~]$ sudo yum update

  • Enable connections from 172.18.x.x to the database (IP used by docker containers, you can set this up after you run a docker contanier and know which IP range will be using, or you can enable access for anyone):

[dmadmin@vm-dctm73 opt]$ sudo vi /var/lib/pgsql/9.4/data/pg_hba.conf
host    all             all             172.18.0.1/24           md5
[dmadmin@vm-dctm73 opt]$ sudo systemctl restart postgresql-9.4

And don’t forget to copy the Documentum 7.3 docker tar file to /opt/dctmdocker/installers

Docker Configuration

  • Install docker:

[dmdocker@vm-dctm73 ~]$ curl -fsSL https://get.docker.com/ | sh

  • I had to remove docker selinux due to incompatibily problems so:

[dmdocker@vm-dctm73 ~]$ yum remove docker-engine-selinux

  • Add user to docker group to avoid using sudo every time we use the docker command:

[dmdocker@vm-dctm73 ~]$ sudo usermod -aG docker dmdocker

  • Enable the service and start docker daemon:

[dmdocker@vm-dctm73 ~]$ sudo systemctl enable docker.service
[dmdocker@vm-dctm73 ~]$ sudo systemctl start docker

  • Check docker is correctly installed by running the hello-world container:

[dmdocker@vm-dctm73 ~]$ docker run –rm hello-world

  • Install docker-compose (using root):

[root@vm-dctm73 ~]# curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
[root@vm-dctm73 ~]# chmod +x /usr/local/bin/docker-compose

Content Server Configuration

  • Import the docker image:

[dmdocker@vm-dctm73 installers]$ docker load -i Contentserver_Centos.tar

  • Check the image is listed now in the local docker repository:

[dmdocker@vm-dctm73 ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
contentserver_centos    7.3.0000.0214        5a22b41bc55f        10 seconds ago      2.252 GB
hello-world         latest              c54a2cc56cbb        5 months ago        1.848 kB

  • Create the tablespace file:

[dmdocker@vm-dctm73 cs]$ su –
[root@vm-dctm73 ~]# su – postgres
-bash-4.2$ mkdir /var/lib/pgsql/9.4/data/db_centdb_dat.dat

  • Configure the required environment variables (remember that lockbox passphrase requires at least one uppercase letter, one symbol and one number):

[dmdocker@vm-dctm73 ~]$ vi .bash_profile

#app server admin password
export APP_SERVER_ADMIN_PASSWORD=dmadmin
#This is install owner password
export INSTALL_OWNER_PASSWORD=dmadmin
#This is root user password
export ROOT_USER_PASSWORD=dmadmin
#Repository password. Required only for stateless configuration
export REPOSITORY_PASSWORD=dmadmin
#External Data base Server Admin password
export EXTERNALDB_ADMIN_PASSWORD=dmadmin
#Global Registry password
export BOF_REGISTRY_USER_PASSWORD=dmadmin
#AEK passphrase
export AEK_PASSPHRASE=dmadmin
export LOCKBOX_PASSPHRASE=Documentum.73

  • Configure statelesscs.conf. Few notes:
    • Change IMAGE_NAME to the name of your image in your docker repository.
    • IP here is the IP of the virtual machine (CentOS) because our database is installed in the host.
    • ENABLE_LOCKBOX=false doesn’t work. It didn’t work for me when I did the (Unofficial) D7.2 Developer Docker edition (I) and it still doesn’t work. It’s probably a misconfiguration of the installer though.

[dmdocker@vm-dctm73 ~]$ vi /opt/dctmdocker/installers/Scripts/statelesscs.conf

###EMC Documentum on Docker
###(c) Copyright EMC Corp., 1992 – 2016
###All rights reserved.
###Version 1.0 dated 08/Sep/2016

#Documentum Content Server Image name
#Here 10.31.4.205 is Bangalore HUB.
#For PLE hub please change the ip as 10.8.46.202
#Here 7.3.0000 pointing to the latest 7.3 CS image. If we need perticular build version then just use 7.3.0000.0xxx
#Ex :  7.3.0000.0176
#Ubuntu Image:  10.31.4.205:5000/contentserver/ubuntu/stateless/cs:7.3.0000
#CentOS Image: 10.31.4.205:5000/contentserver/centos/stateless/cs:7.3.0000
#RHEL Image : 10.31.4.205:5000/contentserver/rhelora/stateless/cs:7.3.0000
IMAGE_NAME = contentserver_centos:7.3.0000.0214

#documentum License
HIGH_VOLUME_SERVER_LICENSE =
TRUSTED_LICNESE=
STORAGEAWARE_LICENSE=
XMLSTORE_LICENSE=
SNAPLOCKSTORE_LICENSE=LDNAPJEWPXQ
RPS_LICENSE=
FED_RECD_SERVICE_LICENSE=
RECORD_MANAGER_LICENSE=
PRM_LICENSE=

#Docbase configuration details
#Base machine IP
EXTERNAL_IP = 192.168.42.131

#External Data base server IP
EXTERNALDB_IP = 192.168.42.131

#External Data base Server Admin User
EXTERNALDB_ADMIN_USER = postgres

#External Data base Server Port number
#Default port for postgres is 5432. Oracle is 1521
DB_SERVER_PORT=5432

#Docbase ID
DOCBASE_ID = 45321

#Docbase name
DOCBASE_NAME = centdb

#Container host name.
CONTAINER_HOSTNAME = centstateless

#Container name.
CONTAINER_NAME = centstateless

#Conent Server port number to map in the base machine
CONTENT_SERVER_PORT= 50000
#Docbroker port number to map in the base machine
DOCBROKER_PORT =1689
#Method Server port number to map in the base machine
METHOD_SVR_PORT=9080

#App server management port
APP_SERVER_MGMNT_PORT=9084

#lockbox and aek related info
AEK_ALGORITHM = AES_256_CBC
#aek name
AEK_NAME = CSaek
#User wants to enable lock box then make it as true and provide the name and passphrase. To disable  lockbox then make it as false
ENABLE_LOCKBOX = true
LOCKBOX_FILE_NAME = lockbox.lb

#These are default values for 7.3. IF any thing is change like Jboss version or product version the change the values here
INSTALL_OWNER_USER=dmadmin
INSTALL_HOME=/opt
JBOSS=wildfly9.0.1
PRODUCT_MAJOR_VERSION=7.3

### remote data machine and docker plugin details.
#docker plugin type local,cifs,nfs etc. By default plugin is local, means the data file system is local. If you use the file system has remote then use proper plugin type and remote host details.
DOCKER_PLUGIN_TYPE=local
#Remote data machine.
EXTERNALDATA_HOST=192.168.42.131
#Data path folder which is on remote machine.You need to create a folder and share it on remote machine
REMOTE_DATA_PATH=/opt/dctmdocker/data
#Share path which is on remote machine. You need to create a folder and share it on remote machine
REMOTE_SHARE_PATH=/opt/dctmdocker/share
#If the docker plugin type is cifs then create a dmadmin user in base machine and provide the uid here. Otherwise this filed is empty.
#While starting the nethsare plugin please use  the same uid and gid as -o parameter
INSTALL_OWNER_UID=

#THUMBNAIL SERVER Configuration parameters. To enable Thumnail server make it as YES.
CONFIGURE_THUMBNAIL_SERVER = NO
THUMBNAIL_SERVER_PORT = 8081
THUMBNAIL_SERVER_SSL_PORT = 8443

  • Configure statelesscs_config_compose.yml:

[dmdocker@vm-dctm73 ~]$ vi /opt/dctmdocker/installers/Scripts/statelesscs_config_compose.yml

version: ‘2’
services:
dctm_cs:
image: contentserver_centos:7.3.0000.0214
environment:
– HIGH_VOLUME_SERVER_LICENSE=
– TRUSTED_LICNESE=
– STORAGEAWARE_LICENSE=
– XMLSTORE_LICENSE=
– SNAPLOCKSTORE_LICENSE=
– RPS_LICENSE=
– FED_RECD_SERVICE_LICENSE=
– RECORD_MANAGER_LICENSE=
– PRM_LICENSE=
– ROOT_USER_PASSWORD=${ROOT_USER_PASSWORD}
– INSTALL_OWNER_PASSWORD=${INSTALL_OWNER_PASSWORD}
– INSTALL_OWNER_USER=dmadmin
– REPOSITORY_PASSWORD=${REPOSITORY_PASSWORD}
– EXTERNAL_IP=192.168.42.131
– EXTERNALDB_IP=192.168.42.131
– EXTERNALDB_ADMIN_USER=postgres
– EXTERNALDB_ADMIN_PASSWORD=${EXTERNALDB_ADMIN_PASSWORD}
– DB_SERVER_PORT=5432
– DOCBASE_ID=45321
– DOCBASE_NAME=centdb
– USE_EXISTING_DATABASE_ACCOUNT=false
– INDEXSPACE_NAME=dm_repo_docbase
– BOF_REGISTRY_USER_PASSWORD=${BOF_REGISTRY_USER_PASSWORD}
– AEK_ALGORITHM=AES_256_CBC
– AEK_PASSPHRASE=${AEK_PASSPHRASE}
– AEK_NAME=CSaek
– ENABLE_LOCKBOX=true
– LOCKBOX_FILE_NAME=lockbox.lb
– LOCKBOX_PASSPHRASE=${LOCKBOX_PASSPHRASE}
– USE_EXISTING_AEK_LOCKBOX=false
– CONFIGURE_THUMBNAIL_SERVER=NO
– EXTDOCBROKERPORT=1689
– CONTENTSERVER_PORT=50000
– APP_SERVER_ADMIN_PASSWORD=${APP_SERVER_ADMIN_PASSWORD}
– INSTALL_OWNER_UID=1001
hostname:
“cont-dctm73”
container_name:
“dctm73docker”
ports:
– “DOCBROKER_PORT:DOCBROKER_PORT”
– “DOCBROKER_SECURE_PORT:DOCBROKER_SECURE_PORT”
– “CONTENT_SERVER_PORT:CONTENT_SERVER_PORT”
– “CONTENT_SERVER_SECURE_PORT:CONTENT_SERVER_SECURE_PORT”
– “METHOD_SVR_PORT:9080”
– “METHOD_SVR_SECURE_PORT:9082”
– “METHOD_SVR_JMX_PORT:9081”
– “THUMBNAIL_SERVER_PORT:8081”
– “THUMBNAIL_SERVER_SSL_PORT:8443”
– “APP_SERVER_MGMNT_PORT:9084”
volumes:
– DocbaseName_odbc:INSTALL_HOME/dctm/odbc
– DocbaseName_data:INSTALL_HOME/dctm/data
– DocbaseName_dba:INSTALL_HOME/dctm/dba
– DocbaseName_share:INSTALL_HOME/dctm/share
– DocbaseName_dfc:INSTALL_HOME/dctm/config
– DocbaseName_xhive_storage:INSTALL_HOME/dctm/xhive_storage
– DocbaseName_XhiveConnector:INSTALL_HOME/dctm/JBOSS/server/DctmServer_MethodServer/deployments/XhiveConnector.ear
– DocbaseName_mdserver_conf:INSTALL_HOME/dctm/mdserver_conf
– DocbaseName_mdserver_log:INSTALL_HOME/dctm/JBOSS/server/DctmServer_MethodServer/log
– DocbaseName_mdserver_logs:INSTALL_HOME/dctm/JBOSS/server/DctmServer_MethodServer/logs
– DocbaseName_Thumbnail_Server_conf:INSTALL_HOME/dctm/product/PRODUCT_MAJOR_VERSION/thumbsrv/conf
– DocbaseName_Thumbnail_Server_webinf:INSTALL_HOME/dctm/product/PRODUCT_MAJOR_VERSION/thumbsrv/container/webapps/thumbsrv/WEB-INF
privileged: true
volumes:
DocbaseName_data:
driver: DOCKER_PLUGIN_TYPE
driver_opts:
share: EXTERNALDATA_HOST/REMOTE_DATA_PATH
DocbaseName_dba:
DocbaseName_share:
driver: DOCKER_PLUGIN_TYPE
driver_opts:
share: EXTERNALDATA_HOST/REMOTE_SHARE_PATH
DocbaseName_dfc:
DocbaseName_odbc:
DocbaseName_XhiveConnector:
DocbaseName_mdserver_conf:
DocbaseName_mdserver_log:
DocbaseName_mdserver_logs:
DocbaseName_Thumbnail_Server_conf:
DocbaseName_Thumbnail_Server_webinf:
DocbaseName_xhive_storage:

  • Run the configuration script:

[dmdocker@vm-dctm73 ~]$ cd /opt/dctmdocker/installers/Scripts/
[dmdocker@vm-dctm73 Scripts]$ chmod 755 stateless_config.sh
[dmdocker@vm-dctm73 Scripts]$ ./stateless_config.sh

  • Now you can get a terminal from the container:

[dmdocker@vm-dctm73 Scripts]$ docker exec -i -t dctm73docker /bin/bash

And check the progress of the installation in /opt/dctm_docker/logs/centstateless/cont-dctm73.log

If anything fails and you need to run the script again, make sure the created volumes (docker volume ls) are removed before running again the script or the installer will fail.