This is the last part of the series. Part 1 covered the certified, containerized 14.1.2 platform, Part 2 the side-by-side migration off 12c, and Part 3 how we build and patch the image. What is left is the thing that actually runs the environment day to day: the Docker Compose file, and the handful of details we had to get right to make it production-grade.
I covered the general idea of using Docker Compose for SOA Suite in an earlier post. If you want the background on podman-compose on Oracle Linux, Oracle has a good walkthrough. Here I want to focus on what is specific to a real deployment. This is the compose file for one environment (our development environment, "entw"):
services:
adminserver:
image: xxis_soa14:latest
ports:
- '10.22.17.142:7001:7001'
environment:
CONNECTION_STRING: soacloudtestdb.intern.dns:1521/SOATESTPDB1
RCUPREFIX: SOADOCENTW
DB_PASSWORD: topSecret4321
DB_SCHEMA_PASSWORD: topSecret1234
ADMIN_PASSWORD: moreSecret5432
DOMAIN_NAME: soaentw
DOMAIN_TYPE: soa
ADMIN_HOST: soadockerentw.intern.dns
ADMIN_PORT: '7001'
PERSISTENCE_STORE: file
volumes:
- userprojects:/u01/oracle/user_projects
- /home/opc/soa-ops/entw/setUserOverridesLate.sh:/u01/oracle/user_projects/domains/soaentw/bin/setUserOverridesLate.sh
- /home/opc/soa-ops/entw/createDomain.py:/u01/oracle/container-scripts/createDomain.py
networks:
- soa_net
soamanagedserver1:
image: xxis_soa14:latest
command: /u01/oracle/container-scripts/startMS.sh
ports:
- '10.22.17.142:7003:7003'
environment:
MANAGED_SERVER: soa_server1
DOMAIN_NAME: soaentw
ADMIN_HOST: soadockerentw.intern.dns
ADMIN_PORT: '7001'
ADMIN_PASSWORD: moreSecret5432
MANAGED_SERVER_CONTAINER: 'true'
MANAGEDSERVER_PORT: '7003'
volumes:
- userprojects:/u01/oracle/user_projects
- /home/opc/sap_gp_xml_ENTW:/mnt/sap_gp_xml
- /home/opc/soa-ops/entw/setUserOverridesLate.sh:/u01/oracle/user_projects/domains/soaentw/bin/setUserOverridesLate.sh
- /home/opc/zugferd:/home/oracle/zugferd
depends_on:
adminserver:
condition: service_healthy
networks:
- soa_net
ohs1:
image: container-registry.oracle.com/middleware/ohs_cpu:14.1.2.0-jdk21-ol9
ports:
- '10.22.17.142:7777:7777'
volumes:
- /home/opc/soa-ops/entw/ohs_boot:/u01/oracle/bootdir
- /home/opc/soa-ops/entw/ohs_conf:/config
depends_on:
adminserver:
condition: service_healthy
networks:
- soa_net
networks:
soa_net:
driver: bridge
volumes:
userprojects:The passwords here are placeholders. In a real deployment you would inject them through an env file or a secrets mechanism rather than writing them inline. The admin server and the managed server share the domain home through the userprojects named volume, the managed server gets a couple of host directories mounted for file-based integrations (a SAP XML drop folder and a ZUGFeRD directory for e-invoicing), and depends_on ... service_healthy makes sure the managed server and OHS only start once the admin server is actually up. Most of that is unremarkable. The interesting parts are four things we had to solve.
