based on docker containers - oracle · make your operations teams and development teams more agile....

71
Deploying Containerized JD Edwards EnterpriseOne on Oracle Cloud Infrastructure Based on Docker Containers ORACLE WHITE PAPER | JANUARY 2018

Upload: hoangque

Post on 05-May-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

Deploying Containerized JD Edwards EnterpriseOne on Oracle Cloud Infrastructure Based on Docker Containers O R A C L E W H I T E P A P E R | J A N U A R Y 2 0 1 8

DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Disclaimer

The following is intended to outline our general product direction. It is intended for information

purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any

material, code, or functionality, and should not be relied upon in making purchasing decisions. The

development, release, and timing of any features or functionality described for Oracle’s products

remains at the sole discretion of Oracle.

0 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Table of Contents

Disclaimer 1

Introduction 1

Docker Overview 2

Docker Swarm Mode........................................................................................................................ 2

Docker Images and Layers .............................................................................................................. 2

Oracle Cloud Infrastructure 3

JD Edwards EnterpriseOne High-Availability Architecture 4

Containerized JD Edwards EnterpriseOne Deployment in Oracle Cloud Infrastructure 5

Creating a Docker Swarm on Oracle Cloud Infrastructure 6

Use Cases 9

High Availability ................................................................................................................................ 9

Hot Upgrades ................................................................................................................................. 10

Elastic Scaling................................................................................................................................ 13

Load Balancer Configuration for High Availability 14

How to Build JD Edwards EnterpriseOne Docker Images 17

Sample Scripts ............................................................................................................................... 17

Prerequisites .................................................................................................................................. 56

Oracle Linux Host Pre-requisite Setup ..................................................................................... 56

Windows VM hosts file entry .................................................................................................... 57

Build image Oracle DB Server 12.1.0.2 SE2 .................................................................................. 57

Build Image Oracle Java 8 ............................................................................................................. 57

Build image Oracle WebLogic 12.2.1.0 .......................................................................................... 58

1 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Generate the SSH keys in OpenSSH format .................................................................................. 58

Build the JDE Base Images............................................................................................................ 58

Deploy the JD Edwards EnterpriseOne Software Components Using the JD Edwards One-Click

Provisioning Console ..................................................................................................................... 58

Build the JDE Final Images ............................................................................................................ 62

Run the JDE servers ...................................................................................................................... 62

Sample Docker Compose File to Run JD Edwards EnterpriseOne in a Swarm 63

Conclusion 66

1 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Introduction

The cloud application development and deployment paradigm is changing. Docker containers1 make

your operations teams and development teams more agile. By using Docker containers, enterprises

achieve both greater flexibility and lower infrastructure costs. Rather than deploying separate physical

servers or virtual machine (VM) instances, containerizing JD Edwards EnterpriseOne servers enables

efficient usage of available resources. All containers share the OS kernel of the host operating system;

they start instantly and use less RAM. Containers isolate applications from one another and the

underlying infrastructure, and are more streamlined and lightweight compared to VMs. Container

images are constructed from layered file systems and share common files, making disk usage and

image downloads much more efficient. Docker containers are not tied to any specific infrastructure and

can run on any computer, on any infrastructure, and in any cloud. Docker containers provide portability

and guarantee that the software will run the same regardless of its underlying infrastructure (on

premises or in the cloud).

This white paper provides a technical overview of deploying containerized JD Edwards EnterpriseOne

servers in Oracle Cloud Infrastructure to achieve high availability and scalability.

1 Information about Docker containers is based on content from the Docker site.

2 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Docker Overview Docker provides a lightweight container runtime and robust tooling that helps you build and run your containers. Docker enables you to package a piece of software and all of its dependencies into an isolated container. All containers share the OS kernel on the host system, making resource utilization far more efficient.

For more information about containers see the documentation at: https://www.docker.com/what-docker.

Figure 1. Docker Engine

Docker Swarm Mode

Docker swarm is a cluster of Docker engines. Docker swarm mode is available in Docker Engine 1.12 and later. You can use the Docker command-line interface to create a swarm, deploy services to a swarm, and manage swarm behavior. Some of the features of Docker swarm mode include:

» Cluster management integrated with Docker Engine » Scaling » Desired state reconciliation » Multi-host networking » Service discovery » Load balancing

For more information about Docker swarm mode, see the documentation at: https://docs.docker.com/engine/swarm.

Docker Images and Layers

Docker images reference read-only layers that represent file system differences. These layers are stacked on top of each other to form a base for the container’s root file system.

For more information about the internal structure of Docker images and layers, see the documentation at: https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers.

3 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Figure 2. An example of layers in a JD Edwards EnterpriseOne Server Manager Docker image

Only the layers that change are downloaded (see figure below), making transfers extremely efficient:

Figure 3. A JD Edwards EnterpriseOne Server Manager Docker image being downloaded

Oracle Cloud Infrastructure Oracle Cloud Infrastructure combines the elasticity and utility of public cloud with the granular control, security, and predictability of on-premises infrastructure to deliver high-performance, high availability, and cost-effective infrastructure services.

4 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Figure 4. Oracle Cloud Infrastructure components

Each region has three fault-independent Availability Domains. Each of these Availability Domains contain an independent data center with power, thermal, and network isolation. Low latency and high-bandwidth interconnect enables zero-data-loss architectures for applications like Oracle Database.

Figure 5. Oracle Cloud Infrastructure Availability Domains

For more information about Oracle Cloud Infrastructure, see the documentation at: https://cloud.oracle.com/en_US/infrastructure/architecture.

JD Edwards EnterpriseOne High-Availability Architecture A typical high-availability architecture for JD Edwards EnterpriseOne servers is shown in Figure 6. The HTML, Application Interface Services (AIS), and Enterprise servers are logically grouped. These logical groups may be replicated and load balanced to achieve better reliability and improved performance by distributing traffic across servers. A failover IP may also be used to seamlessly switch to servers in another availability zone in case of downtime at one zone.

5 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Figure 6. JD Edwards EnterpriseOne high-availability architecture

Containerized JD Edwards EnterpriseOne Deployment in Oracle Cloud Infrastructure Figure 7 shows four Docker nodes connected in a swarm configuration. A swarm is a cluster of Docker Engines where you deploy services. Each node is an instance running Oracle Linux 7.3 with the Docker Engine installed. Manager nodes perform swarm management while worker nodes only run services. By default, manager nodes are also configured to run services in addition to managing the swarm. The nodes are spread across three availability domains. Three of the nodes are configured as manager nodes. This allows the swarm to recover if one manager node fails. For example, if the primary manager node on AD1 fails, another manager is elected as the leader which then automatically recovers the desired state of the swarm.

The JD Edwards EnterpriseOne server containers are deployed on the nodes. The HTML, AIS, and Enterprise servers are logically grouped (shown as three color-coded groups). The HTML and AIS servers may be load balanced using load balancers such as Oracle Traffic Director (OTD), HAProxy, or NGINX. The DB server is hosted on an Oracle Cloud Infrastructure DB System for high performance while the Deployment Server is running on a VM instance.

6 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Figure 7. Containerized JD Edwards EnterpriseOne servers deployed in Oracle Cloud Infrastructure

Creating a Docker Swarm on Oracle Cloud Infrastructure 1. Create the compartment, virtual cloud network (VCN), subnets, and instances.

In Figure 8, the instances dockervm1 and dockervm2 are on AD-1, while dockervm1c and dockervm2c are on AD-3.

2. Edit the security list rules to allow traffic on the ports required by Docker and JD Edwards EnterpriseOne servers. Also ensure that the firewall rules on the OS are modified to open the required ports.

For example: $ sudo -i $ iptables -I INPUT -p tcp --dport 2377 -j ACCEPT

Alternately the OS firewall may be disabled by executing the command below as root user.

$ systemctl stop firewalld && systemctl disable firewalld

$ /sbin/iptables -P FORWARD ACCEPT

The ports required by Docker are:

» TCP port 2377 for cluster management communications » TCP and UDP port 7946 for communication among nodes

7 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

» TCP and UDP port 4789 for overlay network traffic

For information about creating Oracle Cloud Infrastructure resources, see the documentation at:

https://docs.us-phoenix-1.oraclecloud.com/Content/home.htm

Figure 8. Instances

3. Attach a 256 GB block storage volume to each instance and partition the volume as ext4 with fdisk.

Figure 9. Block storage volumes

8 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

4. Mount the block storage volume instance on each instance:

$ sudo –i $ mkdir -p /mnt/store $ mount /dev/sdb1 /mnt/store $ chown -R opc:opc /mnt/store

5. Install the latest version of Docker on each instance.

$ yum-config-manager --enable ol7_addons

$ yum-config-manager --enable ol7_optional_latest

$ yum -y install docker-engine

$ usermod -aG docker opc

$ curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

$ chmod +x /usr/local/bin/docker-compose

6. Configure Docker to use the overlay2 storage driver.

$ mkdir -p /etc/docker && tee /etc/docker/daemon.json <<- EOF

{

"graph": "/mnt/store/docker",

"storage-driver": "overlay2",

"insecure-registries": ["jderepo:5000","127.0.0.0/8"],

"tls": false,

"hosts": ["unix:///var/run/docker.sock","tcp://0.0.0.0:4243"]

}

EOF

$ systemctl daemon-reload

$ systemctl start docker

7. Initialize the Docker swarm on instance dockervm1 (private IP address 10.0.0.2)

$ docker swarm init --advertise-addr 10.0.0.2

8. Execute the following commands to get the token for other nodes to join the swarm:

$ docker swarm join-token manager $ docker swarm join-token worker

In this example, dockervm1 and dockervm1c are manager nodes.

9 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Figure 10. Docker swarm nodes

Use Cases Below are some of the use cases that containerized JD Edwards EnterpriseOne enables:

» Rapid provisioning of instances, which can be used for: » Development and test purposes

• Cloud, local desktop/laptop, private data center » Training purposes » General disposable environments

» High availability/on-demand disaster recovery – Spin up new JD Edwards instances that are fully configured and ready to use (with all the required wiring with other running instances) when existing instances go down.

» Hot upgrades – Upgrade JD Edwards instances with near zero downtime. » Elastic scale up/down – Increase or decrease the number of replicas based on some threshold value such as

the total number of connections.

High Availability

When a running service instance fails, the Docker engine automatically launches a new instance to maintain the desired state (number of replicas). A monitoring script runs in the background and dynamically reconfigures the JD Edwards logical server groups when a new service instance is launched.

In this example, the environment has four VM instances connected in a swarm.

Figure 11. Docker swarm nodes

There are two replicas of JD Edwards EnterpriseOne server groups (each containing an Enterprise Server, HTML Web Server, and AIS Server logically linked together). For example, the first logical group consists of containers entserv.1, webserv.1, and aisserv.1. The servers are load balanced using HAProxy.

Figure 12. JD Edwards EnterpriseOne containerized services

A sample monitoring script is shown below:

10 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

while true

do

date

docker service ls -q | xargs -n1 docker service ps | grep Failed | grep -v nginx | grep -v haproxy | grep -v otd | grep 'seconds ago'

if [ $? == "0" ]; then

printf "Failure found\n\n"

./ExecRubyServiceConfigAndLBConf.sh

printf "Configuration updated\n\n"

else

printf "No failure\n\n"

fi

sleep 55

done

With the monitoring script running in the background, simulate a failure by logging in to node dockervm2 and terminating instance entserv.1.

The Docker engine detects that an instance has failed and automatically launches a new instance with ID b1xo7i6v3pds9vixqlyy6gpid.

Figure 13. New Enterprise Server container automatically launched by the Docker engine to replace the failed container

The monitoring script detects that a failure occurred and automatically reconfigures/rewires the JD Edwards logical server groups in a few seconds.

Figure 14. Logical server groups being rewired automatically after a failure

Hot Upgrades

JD Edwards EnterpriseOne server instances can be updated with near zero downtime by using containerized services.

11 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Figure 15 shows JD Edwards EnterpriseOne v9.2.1.0 servers deployed as a stack named jdeapp. The Web and AIS servers are load balanced using HAProxy.

Figure 15. JD Edwards EnterpriseOne v9.2.1.0 stack

A sample HAProxy configuration file snippet is shown below. The Web and AIS containers are named s1 and a1 in the configuration.

frontend http-in-websrv

bind *:7003

option httplog

option logasap

default_backend webservers

backend webservers

mode http

balance roundrobin

cookie JSESSIONID prefix nocache

server s1 jdeapp_jdeweb.1.ucd9deri7bq1mtr0374exj45y:7003 maxconn 32 check cookie s1

frontend http-in-aissrv

bind *:7004

option httplog

option logasap

default_backend aisservers

backend aisservers

mode http

balance roundrobin

stick-table type ip size 20k

stick on src

server a1 jdeapp_jdeais.1.pipc1s0yjwjyfgm8scpa2uc95:7003 maxconn 32 check

12 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

The below figure shows a client connected to server s1, identified by the s1~ prefix in the JSESSIONID value.

Figure 16. A client connected to Web Server s1

With the above configuration running, deploy a new stack named jdeappv2 containing version updates or bug fixes. The new v9.2.1.2 services are named jdewebv2, jdeentv2, and jdeaisv2.

Figure 17. Updated JD Edwards services deployed alongside existing services

The HAProxy configuration is updated as shown below with the new Web and AIS servers being named t1 and b1:

frontend http-in-websrv

bind *:7003

option httplog

option logasap

default_backend webservers

backend webservers

mode http

balance roundrobin

cookie JSESSIONID prefix nocache

server s1 jdeapp_jdeweb.1.ucd9deri7bq1mtr0374exj45y:7003 maxconn 32 check cookie s1

server t1 jdeappv2_jdewebv2.1.xhwvcsja9k288xm2764dzucok:7003 maxconn 32 check cookie

frontend http-in-aissrv

bind *:7004

option httplog

option logasap

default_backend aisservers

13 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

backend aisservers

mode http

balance roundrobin

stick-table type ip size 20k

stick on src

server a1 jdeapp_jdeais.1.pipc1s0yjwjyfgm8scpa2uc95:7003 maxconn 32 check

server b1 jdeappv2_jdeaisv2.1.trcq8dq11cncph6uq0e44lbyg:7003 maxconn 32 check

The servers s1 and a1 are then set to a “drain” state (identified by the number 8 in the 7th column).

Figure 18. Web and AIS Servers s1 and a1 in “drain” state

With this configuration, a new client is connected to the updated Web server t1 while a persistent connection continues to be serviced by s1 until the session terminates.

Figure 19. A new client is connected to updated Web server t1

Elastic Scaling

The JD Edwards EnterpriseOne server instances can be scaled up or down depending on the number of connections as determined from the load balancer. A monitoring script runs in the background and scales instances up or down based on the number of active connections to the HAProxy load balancer.

Figure 20. JD Edwards EnterpriseOne containerized services with two replicas

In this example, the script is configured to increase the number of instances when the number of current connections is greater than a value of 5.

14 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Figure 21. JD Edwards EnterpriseOne containerized services being scaled to a value of 3

Figure 22. JD Edwards EnterpriseOne containerized services with 3 replicas

The script also updates the load balancer configuration to include the third replica.

Load Balancer Configuration for High Availability

15 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

JD Edwards EnterpriseOne containers may be deployed using a high availability architecture as shown in Figure 23. The HTML and AIS servers are load balanced using HTTP mode while the Enterprise Servers are load balanced using TCP mode. The DB server may be deployed as a container or as an Oracle Cloud Infrastructure DB System. The hosts file of the HTML and AIS servers is updated with the IP of the load balancer.

Figure 23. JD Edwards EnterpriseOne High Availability

Below is a sample configuration file for the load balancer HAProxy. The Web servers are s1 and s2, the AIS servers are a1 and a2, and the Enterprise Servers are e1 and e2.

global

daemon

maxconn 30000

log 127.0.0.1 local0

stats socket /var/run/haproxy.sock mode 600 level admin

stats timeout 2m

defaults

mode http

log global

option redispatch

timeout connect 5s

timeout client 60s

timeout server 60s

frontend http-in-websrv

16 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

bind *:7003

option httplog

default_backend webservers

backend webservers

mode http

option httplog

balance roundrobin

cookie JSESSIONID prefix nocache

server s1 172.28.5.14:7003 maxconn 32 check cookie s1

server s2 172.28.5.13:7003 maxconn 32 check cookie s2

frontend http-in-aissrv

bind *:7004

option httplog

default_backend aisservers

backend aisservers

mode http

option httplog

balance roundrobin

cookie SERVERID insert indirect nocache

server a1 172.28.5.5:7003 maxconn 32 check cookie a1

server a2 172.28.5.6:7003 maxconn 32 check cookie a2

frontend tcp-in-entsrv

bind *:6017-6027

mode tcp

option tcplog

timeout client 2m

default_backend entservers

17 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

backend entservers

mode tcp

option tcplog

balance roundrobin

timeout connect 10s

timeout server 2m

server e1 172.28.5.12

server e2 172.28.5.11

How to Build JD Edwards EnterpriseOne Docker Images Dockerfiles for Oracle products are available at https://github.com/oracle/docker-images. The following folders are required for building the base images that are used to deploy JD Edwards EnterpriseOne software:

» OracleJava » OracleWebLogic » OracleDatabase

The sequence of building JD Edwards EnterpriseOne Docker images is as follows:

1. Build the Docker base images for Provisioning server, Oracle DB server, Enterprise server, HTML Web server and AIS server.

2. Launch the containers created above by executing the Docker Compose file. 3. Use the JD Edwards One-Click Provisioning Console to deploy the JD Edwards EnterpriseOne software

components onto the base images. 4. Commit the containers to create the Docker images for the various JD Edwards EnterpriseOne servers. 5. Backup the DB data volume and Provisioning Server (Server Manager Console) volume.

Sample Scripts

File: OracleJDE/dockerfiles/build-base-images.sh

#!/bin/bash # # Author: [email protected] # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # DIR=`pwd` REPO="oracle/jde" WLS_ADMIN_PASSWORD="welcome1"

18 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

SSH_PUBLIC_KEY="$DIR/build/ssh_keys/docker_key.pub" jde_build_image() { IMAGE_NAME=$1 BUILD_DIR=$2 # ################## # # BUILDING THE IMAGE # # ################## # echo "Building image '$IMAGE_NAME' ..." cd $BUILD_DIR # BUILD THE IMAGE (replace all environment variables) BUILD_START=$(date '+%s') docker build -t $IMAGE_NAME . || { echo "There was an error building the image." exit 1 } BUILD_END=$(date '+%s') BUILD_ELAPSED=`expr $BUILD_END - $BUILD_START` echo "" if [ $? -eq 0 ]; then cat << EOF Docker Image is ready to be extended: --> $IMAGE_NAME Build completed in $BUILD_ELAPSED seconds. EOF else echo "Docker Image $IMAGE_NAME was NOT successfully created. Check the output and correct any reported problems with the docker build operation." fi } jde_build_image_wls() { IMAGE_NAME=$1 BUILD_DIR=$2 WLSADMIN_PASS=$3

19 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

# ################## # # BUILDING THE IMAGE # # ################## # echo "Building image '$IMAGE_NAME' ..." cd $BUILD_DIR # BUILD THE IMAGE (replace all environment variables) BUILD_START=$(date '+%s') docker build -t $IMAGE_NAME --build-arg ADMIN_PASSWORD=$WLSADMIN_PASS . || { echo "There was an error building the image." exit 1 } BUILD_END=$(date '+%s') BUILD_ELAPSED=`expr $BUILD_END - $BUILD_START` echo "" if [ $? -eq 0 ]; then cat << EOF Docker Image is ready to be extended: --> $IMAGE_NAME Build completed in $BUILD_ELAPSED seconds. EOF else echo "Docker Image $IMAGE_NAME was NOT successfully created. Check the output and correct any reported problems with the docker build operation." fi } jde_copy_public_key() { cp $SSH_PUBLIC_KEY $1 } jde_copy_public_key $DIR/build/oc_jdedb jde_copy_public_key $DIR/build/oc_jdeprov jde_copy_public_key $DIR/build/oc_jdeent jde_copy_public_key $DIR/build/oc_jdeweb jde_copy_public_key $DIR/build/oc_jdeais

20 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

jde_build_image $REPO/oradb:12.1.0.2-se2-9.2.2.1-base $DIR/build/oc_jdedb jde_build_image $REPO/prov:9.2.2.1-base $DIR/build/oc_jdeprov jde_build_image $REPO/ent:9.2.2.1-base $DIR/build/oc_jdeent jde_build_image_wls $REPO/web:12.2.1.0-g-9.2.2.1-base $DIR/build/oc_jdeweb $WLS_ADMIN_PASSWORD jde_build_image_wls $REPO/ais:12.2.1.0-g-9.2.2.1-base $DIR/build/oc_jdeais $WLS_ADMIN_PASSWORD

File: OracleJDE/dockerfiles/build-final-images.sh

#!/bin/bash # # Author: [email protected] # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # DIR=`pwd` REPO="oracle/jde" jde_build_image() { IMAGE_NAME=$1 BUILD_DIR=$2 # ################## # # BUILDING THE IMAGE # # ################## # echo "Building image '$IMAGE_NAME' ..." cd $BUILD_DIR # BUILD THE IMAGE (replace all environment variables) BUILD_START=$(date '+%s') docker build -t $IMAGE_NAME . || { echo "There was an error building the image." exit 1 } BUILD_END=$(date '+%s') BUILD_ELAPSED=`expr $BUILD_END - $BUILD_START` echo "" if [ $? -eq 0 ]; then cat << EOF

21 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Docker Image is ready to be extended: --> $IMAGE_NAME Build completed in $BUILD_ELAPSED seconds. EOF else echo "Docker Image $IMAGE_NAME was NOT successfully created. Check the output and correct any reported problems with the docker build operation." fi } # $1 - file # $2 - target dir jde_copy_script() { cp $1 $2 } jde_copy_script ./run/scripts/jdeStartDB.sh $DIR/build/final_jdedb jde_copy_script ./run/scripts/jdeStartSMC.sh $DIR/build/final_jdeprov jde_copy_script ./run/scripts/jdeStartEntServ.sh $DIR/build/final_jdeent jde_copy_script ./run/scripts/jdeStartWebServ.sh $DIR/build/final_jdeweb jde_copy_script ./run/scripts/jdeStartAisServ.sh $DIR/build/final_jdeais jde_build_image $REPO/oradb:12.1.0.2-se2-9.2.2.1-pp-dv-s $DIR/build/final_jdedb jde_build_image $REPO/prov:9.2.2.1-pp-dv-s $DIR/build/final_jdeprov jde_build_image $REPO/ent:9.2.2.1-pp-dv-s $DIR/build/final_jdeent jde_build_image $REPO/web:12.2.1.0-g-9.2.2.1-pp-dv-s $DIR/build/final_jdeweb jde_build_image $REPO/ais:12.2.1.0-g-9.2.2.1-pp-dv-s $DIR/build/final_jdeais

File: OracleJDE/dockerfiles/docker-compose-deploy-oc.yml

version: '2.1' services: jdedb: hostname: jdedb container_name: jdedb image: oracle/jde/oradb:12.1.0.2-se2-9.2.2.1-base

22 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

ports: - 1521:1521 - 5500:5500 volumes: - jdedb-ora12102-pp-data-volume:/opt/oracle/oradata/ networks: jdenet: aliases: - jdedb extra_hosts: - "jdedep:10.0.2.9" - "jdeprov:172.28.0.3" - "jdeent:172.28.0.4" - "jdeweb:172.28.0.5" - "jdeais:172.28.0.6" environment: ORACLE_SID: orcl ORACLE_PDB: jdeorcl restart: on-failure healthcheck: disable: true privileged: true jdeprov: hostname: jdeprov container_name: jdeprov image: oracle/jde/prov:9.2.2.1-base ports: - "3000:3000" - "8999:8999" - "8998:8998" - "7001:7001" - "14501:14501" - "14502:14502" - "137:137" - "138:138" - "139:139" - "445:445" volumes: - jdeprov-pp-u01-volume:/u01/ - /sys/fs/cgroup:/sys/fs/cgroup:ro networks:

23 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

jdenet: aliases: - jdeprov extra_hosts: - "jdedep:10.0.2.9" - "jdedb:172.28.0.2" - "jdeent:172.28.0.4" - "jdeweb:172.28.0.5" - "jdeais:172.28.0.6" restart: on-failure depends_on: jdedb: condition: service_started tty: true privileged: true jdeent: hostname: jdeent container_name: jdeent image: oracle/jde/ent:9.2.2.1-base ports: - "6017-6027:6017-6027" networks: jdenet: aliases: - jdeent extra_hosts: - "jdedep:10.0.2.9" - "jdedb:172.28.0.2" - "jdeprov:172.28.0.3" - "jdeweb:172.28.0.5" - "jdeais:172.28.0.6" depends_on: jdeprov: condition: service_started restart: on-failure jdeweb: hostname: jdeweb container_name: jdeweb image: oracle/jde/web:12.2.1.0-g-9.2.2.1-base ports:

24 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

- "7002:7002" - "8002:8002" - "8003:8003" environment: - NM_HOST=localhost networks: jdenet: aliases: - jdeweb extra_hosts: - "jdedep:10.0.2.9" - "jdedb:172.28.0.2" - "jdeprov:172.28.0.3" - "jdeent:172.28.0.4" - "jdeais:172.28.0.6" - "wlsadmin:127.0.0.1" depends_on: jdeent: condition: service_started restart: on-failure jdeais: hostname: jdeais container_name: jdeais image: oracle/jde/ais:12.2.1.0-g-9.2.2.1-base ports: - "7004:7004" - "8004:8004" - "8005:8005" environment: - NM_HOST=localhost networks: jdenet: aliases: - jdeais extra_hosts: - "jdedep:10.0.2.9" - "jdedb:172.28.0.2" - "jdeprov:172.28.0.3" - "jdeent:172.28.0.4" - "jdeweb:172.28.0.5" - "wlsadmin:127.0.0.1"

25 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

depends_on: jdeweb: condition: service_started restart: on-failure

# docker volume create jdedb-ora12102-pp-data-volume # docker volume create jdeprov-pp-u01-volume volumes: jdedb-ora12102-pp-data-volume: external: true jdeprov-pp-u01-volume: external: true

networks: jdenet: driver: overlay ipam: driver: default config: - subnet: 172.28.0.0/16

File: OracleJDE/dockerfiles/jde-helper-shell-functions.sh

#!/bin/bash # # Author: [email protected] # Description: Helper shell functions. # # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # # dkrexec jdedb opc dkrexec() { DKR_SHELL="bash" # if [ "$1" = "jdeent" ] # then # DKR_SHELL="ksh"

26 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

# fi docker exec -ti -u $2 $1 $DKR_SHELL --login } # dkrcmd sshtest root "yum -y install openssh-clients" dkrcmd() { DKR_SHELL="bash" if [ "$1" = "jdeent" ] then DKR_SHELL="ksh" fi docker exec -u $2 $1 $DKR_SHELL --login -c "$3" } dkrcmpup() { docker-compose -f docker-compose-deploy-oc.yml up -d } dkrcmpdown() { docker-compose -f docker-compose-deploy-oc.yml down } dkrstartprereqs() { rm -f /tmp/jde*.log dkrcmd jdedb oracle "/opt/oracle/runOracle.sh" >> /tmp/jdedb.log 2>&1 & sleep 10 dkrcmd jdeweb oracle "./startWebLogic.sh" >> /tmp/jdeweb.log 2>&1 & sleep 10 dkrcmd jdeais oracle "./startWebLogic.sh" >> /tmp/jdeais.log 2>&1 & sleep 10 dkrcmd jdeweb oracle "/u01/oracle/createMachine.sh" >> /tmp/jdeweb1.log 2>&1 & sleep 10 dkrcmd jdeais oracle "/u01/oracle/createMachine.sh" >> /tmp/jdeais1.log & sleep 10 } dkrcommit() {

27 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

echo "Stopping management agents" dkrcmd jdedb oracle "/u01/jde_home/SCFHA/bin/stopAgent" dkrcmd jdeent jde920 "/u01/jde920/jde_home/SCFHA/bin/stopAgent" dkrcmd jdeweb oracle "/u01/jde_home/SCFHA/bin/stopAgent" dkrcmd jdeais oracle "/u01/jde_home/SCFHA/bin/stopAgent" echo "Deleting temp installer files from jdedb" dkrcmd jdedb root "rm -rf /u01/jdk_install /u01/zips /u01/tmp" echo "Changing permissions of /u01 in jdedb" dkrcmd jdedb root "chown -R oracle:dba /u01" echo "Deleting temp installer files from jdeent" dkrcmd jdeent root "rm -rf /u01/jdk_install /u01/oracle_install /u01/zips /u01/tmp" echo "Creating image oracle/jde/oradb:12.1.0.2-se2-9.2.2.1-pp-dv" docker commit jdedb oracle/jde/oradb:12.1.0.2-se2-9.2.2.1-pp-dv echo "Creating image oracle/jde/prov:9.2.2.1-pp-dv" docker commit jdeprov oracle/jde/prov:9.2.2.1-pp-dv echo "Creating image oracle/jde/ent:9.2.2.1-pp-dv" docker commit jdeent oracle/jde/ent:9.2.2.1-pp-dv echo "Creating image oracle/jde/web:12.2.1.0-g-9.2.2.1-pp-dv" docker commit jdeweb oracle/jde/web:12.2.1.0-g-9.2.2.1-pp-dv echo "Creating image oracle/jde/ais:12.2.1.0-g-9.2.2.1-pp-dv" docker commit jdeais oracle/jde/ais:12.2.1.0-g-9.2.2.1-pp-dv } dkrstartagents() { dkrcmd jdedb oracle "/u01/jde_home/SCFHA/bin/startAgent" dkrcmd jdeent jde920 "/u01/jde920/jde_home/SCFHA/bin/startAgent" dkrcmd jdeweb oracle "/u01/jde_home/SCFHA/bin/startAgent" dkrcmd jdeais oracle "/u01/jde_home/SCFHA/bin/startAgent" }

28 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

dkrstopagents() { dkrcmd jdedb oracle "/u01/jde_home/SCFHA/bin/stopAgent" dkrcmd jdeent jde920 "/u01/jde920/jde_home/SCFHA/bin/stopAgent" dkrcmd jdeweb oracle "/u01/jde_home/SCFHA/bin/stopAgent" dkrcmd jdeais oracle "/u01/jde_home/SCFHA/bin/stopAgent" }

dkrfixagent() { CONTAINER=$1 USER=$2 AGENT_HOME=$3 echo "Setting agent to Non-SSL port for $CONTAINER" dkrcmd $CONTAINER $USER "sed -i -e 's|management.server.httpport=.*|management.server.httpport=8999|g' $AGENT_HOME/config/agent.properties" dkrcmd $CONTAINER $USER "sed -i -e 's|management.server.usingssl=.*|management.server.usingssl=false|g' $AGENT_HOME/config/agent.properties" dkrcmd $CONTAINER $USER "$AGENT_HOME/bin/stopAgent" dkrcmd $CONTAINER $USER "$AGENT_HOME/bin/startAgent" } dkrfixagents() { dkrfixagent jdedb oracle "/u01/jde_home/SCFHA" dkrfixagent jdeent jde920 "/u01/jde920/jde_home/SCFHA" dkrfixagent jdeweb oracle "/u01/jde_home/SCFHA" dkrfixagent jdeais oracle "/u01/jde_home/SCFHA" }

File: OracleJDE/dockerfiles/orchestration.json

{ "depServer": [ { "instanceName": "DEP", "serviceType": "VM", "hostDetails": {

29 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

"serviceName": "jdedep", "userName": "opc", "password": "ACHCJKGEHCJKCEAGGFKGODNIBNDPLJPAJAICDLMKGIGHPFCCHFNGPCAJANGLIEOIPPGONCDDPNDD", "osPlatform": "WINDOWS" }, "serverDetails": { "dependentServer": "DB", "pathcodes": [ "DEVELOPMENT", "PRISTINE", "PROTOTYPE", "PRODUCTION" ], "jdeLocation": "DENVER", "setupDrive": "D:" } } ], "databaseServer": [ { "instanceName": "DB", "serviceType": "VM", "hostDetails": { "serviceName": "jdedb", "osPlatform": "LINUX" }, "serverDetails": { "type": "ORACLE", "tnsName": "JDEORCL", "installSchemas": [ "SHARED", "DEVELOPMENT" ], "installDemoData": [ "DEVELOPMENT" ], "oraDBInstallDir": "/opt/oracle/oradata/jdedb", "oraDBTableDir": "/opt/oracle/oradata/jdetable", "oraDBIndexDir": "/opt/oracle/oradata/jdeindex", "adminPassword": "ACHCJKGFHCJKJKDLLHBPHLIAEOBLNAJBBDMKFFDJCAEH", "schemaPassword": ""

30 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

} } ], "entServer": [ { "instanceName": "ENT", "serviceType": "VM", "hostDetails": { "serviceName": "jdeent", "osPlatform": "LINUX" }, "serverDetails": { "dependentServer": "DB", "pathcodes": [ "DEVELOPMENT" ], "objType": [ "UBE", "LOGIC" ] } } ], "webServer": [ { "instanceName": "JAS", "serviceType": "VM", "hostDetails": { "serviceName": "jdeweb", "osPlatform": "LINUX" }, "serverDetails": { "instanceType": "jasServer", "wlsUserName": "weblogic", "wlsPassword": "ACHCJKFMHCJKLNGLLPMEMJMKAFBNPBJFDCNNEALPJCJM", "wlsAdminPort": "7002", "wlsPath": "/u01/oracle", "jdkPath": "/usr/java/jdk1.8.0_151", "contentPort": "8002", "securedContentPort": "8003", "dependentServer": "ENT", "pathcode": "DEVELOPMENT",

31 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

"enableClustering": false } }, { "instanceName": "AIS", "serviceType": "VM", "hostDetails": { "serviceName": "jdeais", "osPlatform": "LINUX" }, "serverDetails": { "instanceType": "aisServer", "wlsUserName": "weblogic", "wlsPassword": "ACHCJKAGHCJKNFEIILMGBIIOGCNHDPGEGPEOGOIFMNIB", "wlsAdminPort": "7004", "wlsPath": "/u01/oracle", "jdkPath": "/usr/java/jdk1.8.0_151", "contentPort": "8004", "securedContentPort": "8005", "dependentServer": "JAS", "enableClustering": false } } ], "devClient": [], "bipServer": [] }

File: OracleJDE/dockerfiles/build/oc_jdeais/create-opc-user.sh

File: OracleJDE/dockerfiles/build/oc_jdedb/create-opc-user.sh

File: OracleJDE/dockerfiles/build/oc_jdeent/create-opc-user.sh

File: OracleJDE/dockerfiles/build/oc_jdeprov/create-opc-user.sh

File: OracleJDE/dockerfiles/build/oc_jdeweb/create-opc-user.sh

#!/bin/bash __create_user() { useradd opc SSH_USERPASS=opc echo -e "$SSH_USERPASS\n$SSH_USERPASS" | (passwd --stdin opc) echo ssh user password: $SSH_USERPASS

32 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

} __create_user

File: OracleJDE/dockerfiles/build/oc_jdedb/bash_profile

# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/.local/bin:$HOME/bin export PATH export ORACLE_HOME=/opt/oracle/product/12.1.0.2/dbhome_1 export ORACLE_SID=orcl PATH=$ORACLE_HOME/bin:$PATH:$HOME/.local/bin:$HOME/bin export PATH

File: OracleJDE/dockerfiles/build/oc_jdeais/Dockerfile

# LICENSE UPL 1.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # FROM oracle/weblogic:12.2.1-generic # Maintainer # ---------- LABEL maintainer="Noel DCosta <[email protected]>" # WLS Configuration (editable during build time) # ------------------------------ ARG ADMIN_PASSWORD ARG ADMIN_NAME

33 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

ARG DOMAIN_NAME ARG ADMIN_PORT ARG CLUSTER_NAME ARG DEBUG_FLAG ARG PRODUCTION_MODE # WLS Configuration (editable during runtime) # --------------------------- ENV ADMIN_HOST="wlsadmin" \ NM_PORT="5556" \ MS_PORT="8004" \ DEBUG_PORT="8453" \ CONFIG_JVM_ARGS="-Dweblogic.security.SSL.ignoreHostnameVerification=true" # WLS Configuration (persisted. do not change during runtime) # ----------------------------------------------------------- ENV DOMAIN_NAME="${DOMAIN_NAME:-base_domain}" \ DOMAIN_HOME=/u01/oracle/user_projects/domains/${DOMAIN_NAME:-base_domain} \ ADMIN_NAME="${ADMIN_NAME:-AdminServer}" \ ADMIN_PORT="${ADMIN_PORT:-7004}" \ CLUSTER_NAME="${CLUSTER_NAME:-DockerCluster}" \ debugFlag="${DEBUG_FLAG:-false}" \ PRODUCTION_MODE="${PRODUCTION_MODE:-prod}" \ PATH=$PATH:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle/user_projects/domains/${DOMAIN_NAME:-base_domain}/bin:/u01/oracle # Add files required to build this image COPY container-scripts/* /u01/oracle/ USER root RUN chown -R oracle:oracle /u01/oracle/ && chmod 755 /u01/oracle/wlst USER oracle # Configuration of WLS Domain RUN /u01/oracle/wlst /u01/oracle/create-wls-domain.py && \ mkdir -p /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security && \

34 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

echo "username=weblogic" > /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security/boot.properties && \ echo "password=$ADMIN_PASSWORD" >> /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security/boot.properties && \ echo ". /u01/oracle/user_projects/domains/$DOMAIN_NAME/bin/setDomainEnv.sh" >> /u01/oracle/.bashrc # Expose Node Manager default port, and also default for admin and managed server EXPOSE $NM_PORT $ADMIN_PORT $MS_PORT $DEBUG_PORT WORKDIR $DOMAIN_HOME # JDE pre-requisites ADD ./create-opc-user.sh /create-opc-user.sh USER root RUN yum -y update; yum clean all RUN yum install -y zip.x86_64 unzip.x86_64 nmap bind-utils ksh.x86_64 \ zlib-devel.x86_64 glibc.x86_64 glibc-devel.x86_64 glibc.i686 \ sudo passwd vi telnet openssh-server file which net-tools; yum -y clean all RUN mkdir /var/run/sshd && \ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \ chmod 755 /create-opc-user.sh && \ /create-opc-user.sh && \ chmod 770 /u01 && \ usermod -a -G oracle opc && \ groupadd dba && usermod -a -G dba oracle && \ chown -R oracle:oracle /usr/java/ && \ chmod 755 /u01/oracle/*.sh ADD ./docker_key.pub /home/opc/.ssh/authorized_keys RUN > /home/opc/.ssh/known_hosts && chown -R opc:opc /home/opc/.ssh/ && ls -al /home/opc/.ssh/ && \ sed -i -e "s|.*ClientAliveInterval.*|ClientAliveInterval 3600|g" /etc/ssh/sshd_config && \ sed -i -e "s|.*AddressFamily.*|AddressFamily inet|g" /etc/ssh/sshd_config && \ echo "opc ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

35 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

CMD ["/usr/sbin/sshd", "-D"]

File: OracleJDE/dockerfiles/build/oc_jdedb/Dockerfile

# LICENSE CDDL 1.0 + GPL 2.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # FROM oracle/database:12.1.0.2-se2 LABEL maintainer="Noel DCosta <[email protected]>" USER root RUN yum -y install zip.x86_64 unzip.x86_64 nmap bind-utils ksh.x86_64 \ compat-libcap1.x86_64 compat-libstdc++-33.x86_64 gcc-c++.x86_64 \ gcc.x86_64 glibc.x86_64 glibc-devel.x86_64 glibc.i686 \ libaio.x86_64 libaio-devel.x86_64 libgcc.x86_64 libstdc++.x86_64 \ libstdc++-devel.x86_64 libX11.x86_64 libXau.x86_64 libxcb.x86_64 \ libXext.x86_64 libXi.x86_64 libXtst.x86_64 make.x86_64 sysstat.x86_64 \ openssh-server sudo passwd vi telnet file which net-tools; yum -y clean all RUN mkdir /u01 && chmod 770 /u01 && \ sed -i -e "s|kernel.sem.*|kernel.sem = 1024 32000 100 1024|g" /etc/sysctl.conf ADD ./create-opc-user.sh /create-opc-user.sh ADD ./bash_profile /home/oracle/.bash_profile RUN mkdir /var/run/sshd && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \ chmod 755 /create-opc-user.sh && /create-opc-user.sh && \ groupadd oracle && usermod -a -G oracle oracle && usermod -a -G oracle opc && \ chown oracle:oracle /u01 && \ chown oracle:dba /home/oracle/.bash_profile && chmod 644 /home/oracle/.bash_profile ADD ./docker_key.pub /home/opc/.ssh/authorized_keys RUN > /home/opc/.ssh/known_hosts && chown -R opc:opc /home/opc/.ssh/ && ls -al /home/opc/.ssh/ && \ sed -i -e "s|.*ClientAliveInterval.*|ClientAliveInterval 3600|g" /etc/ssh/sshd_config && \ sed -i -e "s|.*AddressFamily.*|AddressFamily inet|g" /etc/ssh/sshd_config && \ echo "opc ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers

36 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

CMD ["/usr/sbin/sshd", "-D"]

File: OracleJDE/dockerfiles/build/oc_jdeent/Dockerfile

# LICENSE CDDL 1.0 + GPL 2.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # FROM oraclelinux:7 LABEL maintainer="Noel DCosta <[email protected]>" ADD ./create-opc-user.sh /create-opc-user.sh RUN mkdir /var/run/sshd && \ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \ chmod 755 /create-opc-user.sh && \ /create-opc-user.sh && \ groupadd dba && groupadd oracle && groupadd oneworld && \ useradd -d /home/oracle -m -s /bin/bash -g oracle oracle && \ useradd -d /home/jde920 -m -s /bin/ksh -g oneworld jde920 && \ usermod -a -G oracle jde920 && \ usermod -a -G dba oracle && \ usermod -a -G oracle opc && \ mkdir /u01 && chmod 770 /u01 && chown opc:oracle /u01 RUN yum -y update; yum clean all RUN yum install -y ncompress zip.x86_64 unzip.x86_64 nmap bind-utils \ compat-libcap1.x86_64 compat-libstdc++-33.x86_64 elfutils-libelf-devel.x86_64 \ gcc-c++.x86_64 gcc.x86_64 glibc.x86_64 glibc-devel.x86_64 ksh.x86_64 \ libaio.x86_64 libaio-devel.x86_64 libgcc.x86_64 libstdc++.x86_64 libstdc++-devel.x86_64 \ libX11.x86_64 libXau.x86_64 libxcb.x86_64 libXext.x86_64 libXi.x86_64 libXtst.x86_64 \ make.x86_64 sysstat.x86_64 unixODBC-devel.x86_64 unixODBC.x86_64 zlib-devel.x86_64 \ zlib-devel.i686 compat-libstdc++-33.i686 glibc.i686 glibc-devel.i686 libaio.i686 \ libaio-devel.i686 libgcc.i686 libstdc++.i686 libX11.i686 libXau.i686 libxcb.i686 \ libXext.i686 libXi.i686 libXtst.i686 nss-softokn-freebl.i686 zlib.i686 \ sudo passwd vi telnet openssh-server file which net-tools; yum -y clean all

37 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

ADD ./docker_key.pub /home/opc/.ssh/authorized_keys RUN > /home/opc/.ssh/known_hosts && chown -R opc:opc /home/opc/.ssh/ && ls -al /home/opc/.ssh/ && \ sed -i -e "s|.*ClientAliveInterval.*|ClientAliveInterval 3600|g" /etc/ssh/sshd_config && \ sed -i -e "s|.*AddressFamily.*|AddressFamily inet|g" /etc/ssh/sshd_config && \ echo "opc ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers CMD ["/usr/sbin/sshd", "-D"]

File: OracleJDE/dockerfiles/build/oc_jdeprov/Dockerfile

# LICENSE CDDL 1.0 + GPL 2.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # FROM oraclelinux:7 LABEL maintainer="Noel DCosta <[email protected]>" ADD ./create-opc-user.sh /create-opc-user.sh RUN mkdir /var/run/sshd && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \ chmod 755 /create-opc-user.sh && /create-opc-user.sh && \ yum-config-manager --enable ol7_optional_latest && \ yum install -y zip.x86_64 unzip.x86_64 ruby.x86_64 ruby-devel.x86_64 samba.x86_64 samba-client.x86_64 \ nmap bind-utils ksh.x86_64 gcc-c++.x86_64 gcc.x86_64 zlib-devel.x86_64 openssl openssh-clients \ sudo passwd initscripts openssh-server vi telnet file which net-tools; yum -y clean all RUN groupadd dba && groupadd oracle && \ useradd -d /home/oracle -m -s /bin/bash -g oracle oracle && \ usermod -a -G dba oracle && \ usermod -a -G oracle opc && \ mkdir /u01 && chmod 770 /u01 && chown opc:oracle /u01 ADD ./docker_key.pub /home/opc/.ssh/authorized_keys RUN > /home/opc/.ssh/known_hosts && chown -R opc:opc /home/opc/.ssh/ && ls -al /home/opc/.ssh/ && \

38 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

sed -i -e "s|.*ClientAliveInterval.*|ClientAliveInterval 3600|g" /etc/ssh/sshd_config && \ sed -i -e "s|.*AddressFamily.*|AddressFamily inet|g" /etc/ssh/sshd_config && \ echo "opc ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers RUN gem install -v 1.8.1 -r winrm ENV container docker RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \ systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; RUN systemctl enable sshd.service RUN rm -f /usr/lib/tmpfiles.d/systemd-nologin.conf CMD ["/usr/sbin/init"]

File: OracleJDE/dockerfiles/build/oc_jdeweb/Dockerfile

# LICENSE UPL 1.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # FROM oracle/weblogic:12.2.1-generic # Maintainer # ---------- LABEL maintainer="Noel DCosta <[email protected]>" # WLS Configuration (editable during build time) # ------------------------------ ARG ADMIN_PASSWORD ARG ADMIN_NAME ARG DOMAIN_NAME ARG ADMIN_PORT

39 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

ARG CLUSTER_NAME ARG DEBUG_FLAG ARG PRODUCTION_MODE # WLS Configuration (editable during runtime) # --------------------------- ENV ADMIN_HOST="wlsadmin" \ NM_PORT="5556" \ MS_PORT="8002" \ DEBUG_PORT="8453" \ CONFIG_JVM_ARGS="-Dweblogic.security.SSL.ignoreHostnameVerification=true" # WLS Configuration (persisted. do not change during runtime) # ----------------------------------------------------------- ENV DOMAIN_NAME="${DOMAIN_NAME:-base_domain}" \ DOMAIN_HOME=/u01/oracle/user_projects/domains/${DOMAIN_NAME:-base_domain} \ ADMIN_NAME="${ADMIN_NAME:-AdminServer}" \ ADMIN_PORT="${ADMIN_PORT:-7002}" \ CLUSTER_NAME="${CLUSTER_NAME:-DockerCluster}" \ debugFlag="${DEBUG_FLAG:-false}" \ PRODUCTION_MODE="${PRODUCTION_MODE:-prod}" \ PATH=$PATH:/u01/oracle/oracle_common/common/bin:/u01/oracle/wlserver/common/bin:/u01/oracle/user_projects/domains/${DOMAIN_NAME:-base_domain}/bin:/u01/oracle # Add files required to build this image COPY container-scripts/* /u01/oracle/ USER root RUN chown -R oracle:oracle /u01/oracle/ && chmod 755 /u01/oracle/wlst USER oracle # Configuration of WLS Domain RUN /u01/oracle/wlst /u01/oracle/create-wls-domain.py && \ mkdir -p /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security && \ echo "username=weblogic" > /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security/boot.properties && \

40 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

echo "password=$ADMIN_PASSWORD" >> /u01/oracle/user_projects/domains/$DOMAIN_NAME/servers/AdminServer/security/boot.properties && \ echo ". /u01/oracle/user_projects/domains/$DOMAIN_NAME/bin/setDomainEnv.sh" >> /u01/oracle/.bashrc # Expose Node Manager default port, and also default for admin and managed server EXPOSE $NM_PORT $ADMIN_PORT $MS_PORT $DEBUG_PORT WORKDIR $DOMAIN_HOME # JDE pre-requisites ADD ./create-opc-user.sh /create-opc-user.sh USER root RUN yum -y update; yum clean all RUN yum install -y zip.x86_64 unzip.x86_64 nmap bind-utils ksh.x86_64 \ zlib-devel.x86_64 glibc.x86_64 glibc-devel.x86_64 glibc.i686 \ sudo passwd vi telnet openssh-server file which net-tools; yum -y clean all RUN mkdir /var/run/sshd && \ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' && \ chmod 755 /create-opc-user.sh && \ /create-opc-user.sh && \ chmod 770 /u01 && \ usermod -a -G oracle opc && \ groupadd dba && usermod -a -G dba oracle && \ chown -R oracle:oracle /usr/java/ && \ chmod 755 /u01/oracle/*.sh ADD ./docker_key.pub /home/opc/.ssh/authorized_keys RUN > /home/opc/.ssh/known_hosts && chown -R opc:opc /home/opc/.ssh/ && ls -al /home/opc/.ssh/ && \ sed -i -e "s|.*ClientAliveInterval.*|ClientAliveInterval 3600|g" /etc/ssh/sshd_config && \ sed -i -e "s|.*AddressFamily.*|AddressFamily inet|g" /etc/ssh/sshd_config && \ echo "opc ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers CMD ["/usr/sbin/sshd", "-D"]

41 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

File: OracleJDE/dockerfiles/build/final_jdeais/Dockerfile

# LICENSE CDDL 1.0 + GPL 2.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # # ORACLE DOCKERFILES PROJECT # -------------------------- FROM oracle/jde/ais:12.2.1.0-g-9.2.2.1-pp-dv ENV MGMT_AGENT_HOME="/u01/jde_home/SCFHA" \ REST_INI1="/u01/oracle/user_projects/domains/base_domain/servers/AIS_server/stage/AIS/app/JDERestProxy.war/WEB-INF/classes/rest.ini" \ REST_INI2="/u01/jde_home/SCFHA/targets/AIS/config/rest.ini" \ REST_INI3="/u01/jde_home/SCFHA/targets/AIS/owl_deployment/JDERestProxy.ear/app/JDERestProxy.war/WEB-INF/classes/rest.ini" ADD jdeStartAisServ.sh /scripts/jdeStartAisServ.sh USER root RUN chown -R oracle:oracle /scripts/ && chmod 755 /scripts/*.sh && \ sed -i -e 's|AdminURL=.*|AdminURL=http\\://127.0.0.1\\:7004|g' /u01/oracle/user_projects/domains/base_domain/servers/AIS_server/data/nodemanager/startup.properties && \ cat /u01/oracle/user_projects/domains/base_domain/servers/AIS_server/data/nodemanager/startup.properties && \ sed -i -e 's|JasProtocol=.*|JasProtocol=http|g' ${REST_INI1} && \ sed -i -e 's|JasProtocol=.*|JasProtocol=http|g' ${REST_INI2} && \ sed -i -e 's|JasProtocol=.*|JasProtocol=http|g' ${REST_INI3} && \ sed -i -e 's|JasPort=.*|JasPort=8002|g' ${REST_INI1} && \ sed -i -e 's|JasPort=.*|JasPort=8002|g' ${REST_INI2} && \ sed -i -e 's|JasPort=.*|JasPort=8002|g' ${REST_INI3} && \ sed -i -e 's|SecurityServer=.*|SecurityServer=jdeent|g' ${REST_INI1} && \ sed -i -e 's|SecurityServer=.*|SecurityServer=jdeent|g' ${REST_INI2} && \ sed -i -e 's|SecurityServer=.*|SecurityServer=jdeent|g' ${REST_INI3} && \ sed -i -e 's|management.server.httpport=.*|management.server.httpport=8999|g' ${MGMT_AGENT_HOME}/config/agent.properties && \

42 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

sed -i -e 's|management.server.usingssl=.*|management.server.usingssl=false|g' ${MGMT_AGENT_HOME}/config/agent.properties && \ rm -f ${MGMT_AGENT_HOME}/agent.pid && \ rm -f ${MGMT_AGENT_HOME}/logs/*.log* USER oracle CMD /scripts/jdeStartAisServ.sh

File: OracleJDE/dockerfiles/build/final_jdedb/Dockerfile

# LICENSE CDDL 1.0 + GPL 2.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # # ORACLE DOCKERFILES PROJECT # -------------------------- FROM oracle/jde/oradb:12.1.0.2-se2-9.2.2.1-pp-dv ENV MGMT_AGENT_HOME="/u01/jde_home/SCFHA" \ DB_DATA_ARCHIVE="jdedb-ora12102-pp-data-volume.tar.gz" ADD jdeStartDB.sh /scripts/jdeStartDB.sh USER root RUN chown -R oracle:oracle /scripts/ && chmod 755 /scripts/*.sh && \ sed -i -e 's|management.server.httpport=.*|management.server.httpport=8999|g' ${MGMT_AGENT_HOME}/config/agent.properties && \ sed -i -e 's|management.server.usingssl=.*|management.server.usingssl=false|g' ${MGMT_AGENT_HOME}/config/agent.properties && \ rm -f ${MGMT_AGENT_HOME}/agent.pid && \ rm -f ${MGMT_AGENT_HOME}/logs/*.log* COPY ${DB_DATA_ARCHIVE} /u01/ USER oracle CMD /scripts/jdeStartDB.sh

File: OracleJDE/dockerfiles/build/final_jdeent/Dockerfile

43 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

# LICENSE CDDL 1.0 + GPL 2.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # # ORACLE DOCKERFILES PROJECT # -------------------------- FROM oracle/jde/ent:9.2.2.1-pp-dv ENV MGMT_AGENT_HOME="/u01/jde920/jde_home/SCFHA" ADD jdeStartEntServ.sh /scripts/jdeStartEntServ.sh USER root RUN chown -R jde920:oneworld /scripts/ && chmod 755 /scripts/*.sh && \ cp /home/jde920/.profile /etc/profile.d/jdeenv.sh && \ sed -i -e "s/enablePredefinedPorts=.*/enablePredefinedPorts=1/g" /u01/jde920/e920/ini/JDE.INI && \ sed -i -e 's|management.server.httpport=.*|management.server.httpport=8999|g' ${MGMT_AGENT_HOME}/config/agent.properties && \ sed -i -e 's|management.server.usingssl=.*|management.server.usingssl=false|g' ${MGMT_AGENT_HOME}/config/agent.properties && \ rm -f ${MGMT_AGENT_HOME}/agent.pid && \ rm -f ${MGMT_AGENT_HOME}/logs/*.log* USER jde920 WORKDIR /u01/jde920/e920 CMD /scripts/jdeStartEntServ.sh

File: OracleJDE/dockerfiles/build/final_jdeprov/Dockerfile

# LICENSE CDDL 1.0 + GPL 2.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # # ORACLE DOCKERFILES PROJECT # -------------------------- FROM oracle/jde/prov:9.2.2.1-base

44 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

ENV MGMT_AGENT_HOME="/u01/SMConsole/SCFMC" ARG JDEPROV_ARCHIVE="jdeprov-pp-u01-volume-smc.tar.gz" ADD jdeStartSMC.sh /scripts/jdeStartSMC.sh USER root RUN chown -R oracle:oracle /scripts/ && chmod 755 /scripts/*.sh ADD ${JDEPROV_ARCHIVE} /u01/ USER oracle CMD /scripts/jdeStartSMC.sh

File: OracleJDE/dockerfiles/build/final_jdeweb/Dockerfile

# LICENSE CDDL 1.0 + GPL 2.0 # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # # ORACLE DOCKERFILES PROJECT # -------------------------- FROM oracle/jde/web:12.2.1.0-g-9.2.2.1-pp-dv ENV MGMT_AGENT_HOME="/u01/jde_home/SCFHA" \ JAS_INI1="/u01/oracle/user_projects/domains/base_domain/servers/JAS_server/stage/JAS/app/webclient.war/WEB-INF/classes/jas.ini" \ JAS_INI2="/u01/jde_home/SCFHA/targets/JAS/config/jas.ini" \ JAS_INI3="/u01/jde_home/SCFHA/targets/JAS/owl_deployment/webclient.ear/app/webclient.war/WEB-INF/classes/jas.ini" ADD jdeStartWebServ.sh /scripts/jdeStartWebServ.sh USER root RUN chown -R oracle:oracle /scripts/ && chmod 755 /scripts/*.sh && \

45 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

sed -i -e 's|AdminURL=.*|AdminURL=http\\://127.0.0.1\\:7002|g' /u01/oracle/user_projects/domains/base_domain/servers/JAS_server/data/nodemanager/startup.properties && \ cat /u01/oracle/user_projects/domains/base_domain/servers/JAS_server/data/nodemanager/startup.properties && \ sed -i -e 's|management.server.httpport=.*|management.server.httpport=8999|g' ${MGMT_AGENT_HOME}/config/agent.properties && \ sed -i -e 's|management.server.usingssl=.*|management.server.usingssl=false|g' ${MGMT_AGENT_HOME}/config/agent.properties && \ sed -i -e 's|AISProtocol=.*|AISProtocol=http|g' ${JAS_INI1} && \ sed -i -e 's|AISProtocol=.*|AISProtocol=http|g' ${JAS_INI2} && \ sed -i -e 's|AISProtocol=.*|AISProtocol=http|g' ${JAS_INI3} && \ sed -i -e 's|AISPort=.*|AISPort=8004|g' ${JAS_INI1} && \ sed -i -e 's|AISPort=.*|AISPort=8004|g' ${JAS_INI2} && \ sed -i -e 's|AISPort=.*|AISPort=8004|g' ${JAS_INI3} && \ rm -f ${MGMT_AGENT_HOME}/agent.pid && \ rm -f ${MGMT_AGENT_HOME}/logs/*.log* USER oracle CMD /scripts/jdeStartWebServ.sh

File: OracleJDE/dockerfiles/run/docker-compose-run-oc-s.yml

version: '3.1' services: jdedb: hostname: jdedb container_name: jdedb image: oracle/jde/oradb:12.1.0.2-se2-9.2.2.1-pp-dv-s user: oracle ports: - 1521:1521 - 5500:5500 secrets: - source: jdedb_system_password target: /etc/secret-volume/jdedb_system_password volumes: - jdedb-ora12102-pp-data-volume:/opt/oracle/oradata/ - jdedb-ora12102-u01-volume:/u01/

46 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

networks: jdenet: aliases: - jdedb extra_hosts: - "jdedep:10.0.0.5" environment: ORACLE_SID: orcl ORACLE_PDB: jdeorcl restart: on-failure jdeprov: hostname: jdeprov container_name: jdeprov image: oracle/jde/prov:9.2.2.1-pp-dv-s user: oracle ports: - "3000:3000" - "8999:8999" - "8998:8998" - "7001:7001" - "14501:14501" - "14502:14502" secrets: - source: jdedb_system_password target: /etc/secret-volume/jdedb_system_password - source: wlsadmin_password target: /etc/secret-volume/wlsadmin_password volumes: - jdeprov-pp-u01-volume:/u01/ networks: jdenet: aliases: - jdeprov extra_hosts: - "jdedep:10.0.0.5" restart: on-failure depends_on: - jdedb jdeent: hostname: jdeent

47 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

container_name: jdeent image: oracle/jde/ent:9.2.2.1-pp-dv-s user: jde920 ports: - "6017-6027:6017-6027" secrets: - source: jdedb_system_password target: /etc/secret-volume/jdedb_system_password networks: jdenet: aliases: - jdeent extra_hosts: - "jdedep:10.0.0.5" depends_on: - jdeprov restart: on-failure jdeweb: hostname: jdeweb container_name: jdeweb image: oracle/jde/web:12.2.1.0-g-9.2.2.1-pp-dv-s user: oracle ports: - "7002:7002" - "8002:8002" - "8003:8003" secrets: - source: wlsadmin_password target: /etc/secret-volume/wlsadmin_password environment: - NM_HOST=localhost networks: jdenet: aliases: - jdeweb extra_hosts: - "jdedep:10.0.0.5" - "jdeent:172.28.0.4" - "wlsadmin:127.0.0.1" depends_on: - jdeent

48 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

restart: on-failure jdeais: hostname: jdeais container_name: jdeais image: oracle/jde/ais:12.2.1.0-g-9.2.2.1-pp-dv-s user: oracle ports: - "7004:7004" - "8004:8004" - "8005:8005" secrets: - source: wlsadmin_password target: /etc/secret-volume/wlsadmin_password environment: - NM_HOST=localhost networks: jdenet: aliases: - jdeais extra_hosts: - "jdedep:10.0.0.5" - "wlsadmin:127.0.0.1" depends_on: - jdeweb restart: on-failure # docker volume create jdedb-ora12102-pp-data-volume # docker volume create jdeprov-pp-u01-volume volumes: jdedb-ora12102-pp-data-volume: external: true jdedb-ora12102-u01-volume: jdeprov-pp-u01-volume: external: true

networks: jdenet: driver: overlay ipam: driver: default config:

49 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

- subnet: 172.28.0.0/16 secrets: jdedb_system_password: file: ./secrets/jdedb_system_password.txt wlsadmin_password: file: ./secrets/wlsadmin_password.txt

File: OracleJDE/dockerfiles/run/exec-docker-compose-run-oc-s.sh

#!/bin/bash # This script sets the environment variables and executes docker-compose-run-oc.yml # RUN AS: # ./exec-docker-compose-run-oc-s.sh up # ./exec-docker-compose-run-oc-s.sh down OPT=${1:-"up -d"} docker-compose -f docker-compose-run-oc-s.yml $OPT

File: OracleJDE/dockerfiles/run/scripts/jdeStartAisServ.sh

#!/bin/bash # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # export ADMIN_HOST=localhost export ADMIN_PORT=7004 export WLS_BASE_DOMAIN=/u01/oracle/user_projects/domains/base_domain # WLS_ADMIN_PASSWORD=$(cat /run/secrets/wlsadmin_password) WLS_ADMIN_PASSWORD=$(cat /etc/secret-volume/wlsadmin_password) echo "Starting Management agent..." /u01/jde_home/SCFHA/bin/stopAgent 2>&1 | tee -a /tmp/jde_mgmt_agent.log & /u01/jde_home/SCFHA/bin/startAgent 2>&1 | tee -a /tmp/jde_mgmt_agent.log &

50 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

cd $WLS_BASE_DOMAIN # Start AdminServer echo "Starting AdminServer in background..." nohup $WLS_BASE_DOMAIN/startWebLogic.sh 2>&1 | tee -a /tmp/jde_admin_server.log & echo "Waiting for WebLogic Admin Server on $ADMIN_HOST:$ADMIN_PORT to become available..." while : do (echo > /dev/tcp/$ADMIN_HOST/$ADMIN_PORT) >/dev/null 2>&1 available=$? if [[ $available -eq 0 ]]; then echo "WebLogic Admin Server is now available. Proceeding..." break fi sleep 1 done # Start Node Manager echo "Starting NodeManager in background..." nohup $WLS_BASE_DOMAIN/bin/startNodeManager.sh 2>&1 | tee -a /tmp/jde_node_manager.log & sleep 10 # Start ManagedServer echo "Starting ManagedServer in background..." nohup $WLS_BASE_DOMAIN/bin/startManagedWebLogic.sh AIS_server t3://$ADMIN_HOST:$ADMIN_PORT -Dweblogic.management.username=weblogic -Dweblogic.management.password=$WLS_ADMIN_PASSWORD 2>&1 | tee -a /tmp/jde_managed_server.log & # print log # the follow option -f keeps the stream open ensuring the container doesn't terminate tail -f /tmp/jde_admin_server.log /tmp/jde_node_manager.log /tmp/jde_managed_server.log /tmp/jde_mgmt_agent.log

File: OracleJDE/dockerfiles/run/scripts/jdeStartDB.sh

#!/bin/bash

51 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

# # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. #

echo "Starting Management agent in background..." /u01/jde_home/SCFHA/bin/stopAgent 2>&1 | tee -a /tmp/jde_mgmt_agent.log & /u01/jde_home/SCFHA/bin/startAgent 2>&1 | tee -a /tmp/jde_mgmt_agent.log & /opt/oracle/runOracle.sh 2>&1 | tee -a /tmp/jde_db.log & tail -f /tmp/jde_mgmt_agent.log /tmp/jde_db.log

File: OracleJDE/dockerfiles/run/scripts/jdeStartEntServ.sh

#!/bin/bash # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # . /home/jde920/.profile LOG="/tmp/jdeent.log" AGENT_HOME="/u01/jde920/jde_home/SCFHA" echo "EVRHOME: $EVRHOME" | tee -a $LOG echo "SYSTEM: $SYSTEM" | tee -a $LOG # DB_SYSTEM_PASSWORD=$(cat /run/secrets/jdedb_system_password) DB_SYSTEM_PASSWORD=$(cat /etc/secret-volume/jdedb_system_password) echo "Starting Management agent..." | tee -a $LOG $AGENT_HOME/bin/stopAgent 2>&1 | tee -a $LOG $AGENT_HOME/bin/startAgent 2>&1 | tee -a $LOG date | tee -a $LOG flag=1 while [ $flag == 1 ] do echo "select 1 from dual;" | sqlplus -s system/$DB_SYSTEM_PASSWORD@JDEORCL 2>&1 > /tmp/jde_db_check.log cat /tmp/jde_db_check.log | grep ORA-

52 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

if [ $? -ne 0 ]; then date | tee -a $LOG echo "jdedb is online" | tee -a $LOG flag=0 else echo "Waiting for jdedb to come online" | tee -a $LOG sleep 20 fi done echo "Starting Enterprise Server..." | tee -a $LOG $SYSTEM/bin32/RunOneWorld.sh 2>&1 | tee -a $LOG # the follow option -f keeps the stream open ensuring the container doesn't terminate tail -f $LOG /tmp/jde_db_check.log

File: OracleJDE/dockerfiles/run/scripts/jdeStartSMC.sh

#!/bin/bash # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # export WLS_BASE_DOMAIN=/u01/OracleSMC/user_projects/domains/jde_domain export ADMIN_HOST=localhost export ADMIN_PORT=7001 cd $WLS_BASE_DOMAIN # Start AdminServer echo "Starting AdminServer in background..." nohup $WLS_BASE_DOMAIN/startWebLogic.sh 2>&1 | tee -a /tmp/jde_admin_server.log & echo "Waiting for WebLogic Admin Server on $ADMIN_HOST:$ADMIN_PORT to become available..." while : do (echo > /dev/tcp/$ADMIN_HOST/$ADMIN_PORT) >/dev/null 2>&1

53 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

available=$? if [[ $available -eq 0 ]]; then echo "WebLogic Admin Server is now available. Proceeding..." break fi sleep 1 done # Start Node Manager echo "Starting NodeManager in background..." nohup $WLS_BASE_DOMAIN/bin/startNodeManager.sh 2>&1 | tee -a /tmp/jde_node_manager.log & # Start SMC echo "Starting SMC in background..." nohup $WLS_BASE_DOMAIN/bin/startManagedWebLogic.sh SMC_Server_EOne_ManagementConsole1_Console http://$ADMIN_HOST:$ADMIN_PORT 2>&1 | tee -a /tmp/jde_smc.log & tail -f /tmp/jde_admin_server.log /tmp/jde_node_manager.log /tmp/jde_smc.log

File: OracleJDE/dockerfiles/run/scripts/jdeStartWebServ.sh

#!/bin/bash # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # export ADMIN_HOST=localhost export ADMIN_PORT=7002 export WLS_BASE_DOMAIN=/u01/oracle/user_projects/domains/base_domain # WLS_ADMIN_PASSWORD=$(cat /run/secrets/wlsadmin_password) WLS_ADMIN_PASSWORD=$(cat /etc/secret-volume/wlsadmin_password) echo "Starting Management agent..." /u01/jde_home/SCFHA/bin/stopAgent 2>&1 | tee -a /tmp/jde_mgmt_agent.log & /u01/jde_home/SCFHA/bin/startAgent 2>&1 | tee -a /tmp/jde_mgmt_agent.log & cd $WLS_BASE_DOMAIN # Start AdminServer

54 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

echo "Starting AdminServer in background..." nohup $WLS_BASE_DOMAIN/startWebLogic.sh 2>&1 | tee -a /tmp/jde_admin_server.log & echo "Waiting for WebLogic Admin Server on $ADMIN_HOST:$ADMIN_PORT to become available..." while : do (echo > /dev/tcp/$ADMIN_HOST/$ADMIN_PORT) >/dev/null 2>&1 available=$? if [[ $available -eq 0 ]]; then echo "WebLogic Admin Server is now available. Proceeding..." break fi sleep 1 done # Start Node Manager echo "Starting NodeManager in background..." nohup $WLS_BASE_DOMAIN/bin/startNodeManager.sh 2>&1 | tee -a /tmp/jde_node_manager.log & sleep 10 # Start ManagedServer echo "Starting ManagedServer in background..." nohup $WLS_BASE_DOMAIN/bin/startManagedWebLogic.sh JAS_server t3://$ADMIN_HOST:$ADMIN_PORT -Dweblogic.management.username=weblogic -Dweblogic.management.password=$WLS_ADMIN_PASSWORD 2>&1 | tee -a /tmp/jde_managed_server.log & # print log # the follow option -f keeps the stream open ensuring the container doesn't terminate tail -f /tmp/jde_admin_server.log /tmp/jde_node_manager.log /tmp/jde_managed_server.log /tmp/jde_mgmt_agent.log

File: OracleJDE/dockerfiles/run/scripts/create-jdedb-data-volume.sh

#!/bin/bash # # Author: [email protected] #

55 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. # # Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. # DB_DATA_ARCHIVE="jdedb-ora12102-pp-data-volume.tar.gz" # docker volume rm jdedb-ora12102-pp-data-volume printf "\n Creating volume \n\n" docker volume create jdedb-ora12102-pp-data-volume printf "\n Creating container jdedb \n\n" docker run -d --name jdedb \ -h jdedb \ -v jdedb-ora12102-pp-data-volume:/opt/oracle/oradata/ \ oracle/jde/oradb:12.1.0.2-se2-9.2.2.1-pp-dv-s \ bash -c "echo 'jde' > /tmp/jde.log; tail -f /tmp/jde.log" printf "\n Extracting DB Data archive \n\n" docker exec -u 0 jdedb bash -c "tar -P -C /opt/oracle/oradata/ -x -f /u01/$DB_DATA_ARCHIVE" printf "\n Removing container jdedb \n\n" docker stop jdedb && docker rm jdedb

Additional Steps

1. Copy the directory OracleWebLogic/samples/1221-domain/container-scripts to the following locations: » OracleJDE/dockerfiles/build/oc_jdeais/container-scripts » OracleJDE/dockerfiles/build/oc_jdeweb/container-scripts

2. Search and replace the following in all contents of OracleJDE/dockerfiles/build/oc_jdeais/container-scripts: search: 7002, replace: 8004 search: 7001, replace: 7004

3. Search and replace the following in all contents of OracleJDE/dockerfiles/build/oc_jdeweb/container-scripts:

search: 7002, replace: 8002 search: 7001, replace: 7002

56 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Prerequisites 1. Provision a VM with the latest Oracle Linux version and install the latest version of Docker and docker-

compose on the VM. 2. Provision a Windows 2012 Server R2 - Standard VM which will be used to deploy the JD Edwards

EnterpriseOne Deployment Server. 3. Clone the oracle/docker-images repository at (https://github.com/oracle/docker-images) onto the

provisioned Linux machine. 4. Copy the OracleJDE directory to the root folder where you have cloned the repository in step 3. 5. Download the JDE One-Click Provisioning archive to the Linux machine. 6. Copy the provided shell script to the home directory and add the following entry to ~/.bashrc

. ~/jde-helper-shell-functions.sh 7. Ensure the required ports are open (refer to docker-compose-deploy-oc.yml for the full list of ports). 8. Install the pre-requisites for Deployment server following the official documentation. 9. Set the Deployment server internal IP address in the following files by editing the line "jdedep:10.0.2.9".

a. docker-compose-deploy-oc.yml b. docker-compose-run-oc-s.yml

NOTE: IT IS STRONGLY RECOMMENDED THAT YOU USE A CLEAN LINUX VM FOR PROVISIONING SINCE THE PROVISIONING AND DB CONTAINERS WILL RUN WITH PRIVILEGED MODE ENABLED TO BE ABLE TO INSTALL THE REQUIRED JDE SERVICES.

Oracle Linux Host Pre-requisite Setup

Download the JD Edwards One-Click Provisioning archive

Download the files for JD Edwards EnterpriseOne One-Click Provisioning (REL: JD Edwards One-Click Provisioning 2.0 for Apps 9.2 & Tools 9.2.2.1) from the Oracle Software Delivery Cloud.

The following is a list of the required download files:

» V971316-01.zip » V971316-02.zip » V971316-03.zip » V971316-04.zip » V971316-05.zip

From your download location, upload the files to any directory on the Linux VM.

Unzip each of the downloaded files using this command:

$ unzip V971316-0*.zip

The unzipped files will have these filenames:

» JDE_OCProv_922_Linux_17303.tar.gz.DiskPart00 » JDE_OCProv_922_Linux_17303.tar.gz.DiskPart01 » JDE_OCProv_922_Linux_17303.tar.gz.DiskPart02 » JDE_OCProv_922_Linux_17303.tar.gz.DiskPart03 » JDE_OCProv_922_Linux_17303.tar.gz.DiskPart04

Assemble the unzipped images into a single archive using this command:

$ cat JDE_OCProv_922_Linux_17303.tar.gz.DiskPart0* > JDE_OCProv_922_Linux_17303.tar.gz

57 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Disable SELINUX

Edit the /etc/selinux/config file to change the SELINUX=setting to the following value and reboot the machine.

SELINUX=disabled

After reboot verify that SELINUX is disabled by executing the following command.

$ sudo getenforce

Disable the firewall

$ sudo -i

$ systemctl stop firewalld && systemctl disable firewalld

Initialize Docker swarm

$ docker swarm init

Windows VM hosts file entry

Add the following entries to C:\Windows\System32\drivers\etc\hosts. In the below example 10.0.2.6 is the internal IP address of the Linux VM.

10.0.2.9 jdedep

10.0.2.6 jdedb

10.0.2.6 jdeprov

10.0.2.6 jdeent

10.0.2.6 jdeweb

10.0.2.6 jdeais

Build image Oracle DB Server 12.1.0.2 SE2

Download and place the following pre-requisite files in the "OracleDatabase/dockerfiles/12.1.0.2" directory. The binaries can be downloaded from the Oracle Technology Network.

» linuxamd64_12102_database_se2_1of2.zip » linuxamd64_12102_database_se2_2of2.zip

Edit Dockerfile.se2 and change the FROM line to the following:

FROM oraclelinux:7

Run the below commands to build the image:

$ cd OracleDatabase/dockerfiles/

$ ./buildDockerImage.sh -v 12.1.0.2 –s

Build Image Oracle Java 8

Download and place the following pre-requisite files in the "OracleJava/java-8" directory. The binaries can be downloaded from the Oracle Technology Network.

58 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

» server-jre-8u151-linux-x64.tar.gz

Edit Dockerfile and change the FROM line to the following:

FROM oraclelinux:7

Run the below commands to build the image:

$ cd OracleJava/java-8

$ ./build.sh

Build image Oracle WebLogic 12.2.1.0

Download and place the following pre-requisite files in the "OracleWebLogic/dockerfiles/12.2.1" directory. The binaries can be downloaded from the Oracle Technology Network.

» fmw_12.2.1.0.0_wls_Disk1_1of1.zip

Run the below commands to build the image:

$ cd OracleWebLogic/dockerfiles

$ ./buildDockerImage.sh -v 12.2.1 –g

Generate the SSH keys in OpenSSH format

Generate a key pair and save the public key as docker_key.pub. You may use a tool like PuTTYgen to create the key pair. The keys must not have a passphrase. Refer to documentation section titled “Generate Secure Shell (SSH) Key Pairs on Your Local System” for more information.

Copy the public key docker_key.pub to directory "OracleJDE/dockerfiles/build/ssh_keys".

The private key will be specified in the JD Edwards One-Click Provisioning Console at a later step.

Build the JDE Base Images

$ cd OracleJDE/dockerfiles

$ ./build-base-images.sh

Deploy the JD Edwards EnterpriseOne Software Components Using the JD Edwards One-Click Provisioning Console

1. Create the Docker volumes.

$ docker volume create jdedb-ora12102-pp-data-volume

$ docker volume create jdeprov-pp-u01-volume

Run the Docker base images.

$ cd OracleJDE/dockerfiles/

$ source ~/jde-helper-shell-functions.sh

59 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

$ dkrcmpup

2. Start the DB server. Wait a few mins for the new database to be created.

$ dkrcmd jdedb oracle "/opt/oracle/runOracle.sh" 2>&1 | tee -a /tmp/jdedb.log &

Edit tnsnames.ora as follows.

$ dkrexec jdedb oracle

[oracle@jdedb admin]$ pwd

/opt/oracle/product/12.1.0.2/dbhome_1/network/admin

[oracle@jdedb admin]$ cat tnsnames.ora

JDEORCL=

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = jdedb)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = jdeorcl)

)

)

Note: Ensure that tnsnames.ora does not have the entry “orcl=localhost:1521/orcl”

3. Change the password and perform the pre-requisite steps.

$ dkrexec jdedb oracle

$ ./setPassword.sh <new-password>

$ sqlplus '/as sysdba';

SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';

--> AL32UTF8

SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_NCHAR_CHARACTERSET';

--> AL16UTF16

alter system set processes=1500 scope=spfile;

alter system set filesystemio_options=setall scope=spfile;

shutdown immediate;

startup;

4. Start the servers on the jdeweb and jdeais containers.

60 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

$ dkrcmd jdeweb oracle "./startWebLogic.sh" 2>&1 | tee -a /tmp/jdeweb.log &

$ dkrcmd jdeais oracle "./startWebLogic.sh" 2>&1 | tee -a /tmp/jdeais.log &

$ dkrcmd jdeweb oracle "/u01/oracle/createMachine.sh" 2>&1 | tee -a /tmp/jdeweb2.log &

$ dkrcmd jdeais oracle "/u01/oracle/createMachine.sh" 2>&1 | tee -a /tmp/jdeais2.log &

5. Copy the One-Click archive to the jdeprov container.

$ docker cp JDE_OCProv_922_Linux_17303.tar.gz jdeprov:/u01/

$ docker exec -u root jdeprov bash -c "chown opc:opc /u01/ JDE_OCProv_922_Linux_17303.tar.gz"

6. Login to the jdeprov container as root user and run the setup script.

$ docker exec -ti -u root jdeprov bash

$ cd /u01 && tar -P -C /u01 -x -f JDE_OCProv_922_Linux_17303.tar.gz

$ sed -i -e 's|@installBase = getBaseDir|@installBase = "/u01"|g'

/u01/E1ProvisionPrime/JDEComponent/Database/database_server_oracle.rb

$ ./setupPr.sh

The Cloud UI will now be accessible at port 3000.

https://<public-IP-address>:3000/

You can now set the passwords and import the provided orchestration.json to deploy all the JD Edwards EnterpriseOne servers.

61 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

Figure 24. JD Edwards One-Click Provisioning Console

7. Once the deployment is complete, login to SMC, Web and AIS Admin servers, uncheck “SSL Listen Port Enabled” and restart the servers.

8. Run the below command to correct the management agents to use non-SSL. $ dkrfixagents

9. Commit the containers as new Docker images.

$ dkrcommit

$ docker images | grep "9.2.2.1-pp-dv" | grep "oracle/jde"

10. Stop the running containers.

$ dkrcmpdown

11. Save the Docker volumes which will be required to deploy the containers to other machines.

Sample commands are shown below.

sudo -i

62 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

MOUNT="/mnt/store"

BACKUPDIR="$MOUNT/data/prov_prime_9221"

DOCKERDIR="$MOUNT/docker"

DB_DATA_VOL="jdedb-ora12102-pp-data-volume"

PP_U01_VOL="jdeprov-pp-u01-volume"

DB_DATA_VOL_DIR=$DOCKERDIR/volumes/$DB_DATA_VOL

PP_U01_VOL_DIR=$DOCKERDIR/volumes/$PP_U01_VOL

cd $DB_DATA_VOL_DIR

tar -P -cvzf $DB_DATA_VOL.tar.gz *

cd $PP_U01_VOL_DIR/_data

tar -P -cvzf $PP_U01_VOL-smc.tar.gz app SMConsole E1CloudConsole OracleSMC CertGen jdk1.8.0 jde920

mkdir -p $BACKUPDIR

mv $DB_DATA_VOL_DIR/$DB_DATA_VOL.tar.gz $BACKUPDIR

mv $PP_U01_VOL_DIR/_data/$PP_U01_VOL-smc.tar.gz $BACKUPDIR

chown -R opc:opc $BACKUPDIR

Build the JDE Final Images

In this step the start scripts for each container will be added to the container image. The DB Data archive will also be copied to the DB server image to facilitate moving images from one machine to another.

Edit file "OracleJDE\dockerfiles\build-final-images.sh" and set the paths for DB_DATA_ARCHIVE and JDEPROV_ARCHIVE.

Example:

DB_DATA_ARCHIVE="/mnt/store/data/prov_prime_9221/jdedb-ora12102-pp-data-volume.tar.gz"

JDEPROV_ARCHIVE="/mnt/store/data/prov_prime_9221/jdeprov-pp-u01-volume-smc.tar.gz"

Run the script to build the final images.

$ cd OracleJDE/dockerfiles

$ ./build-final-images.sh

Script create-jdedb-data-volume.sh is provided to re-create the DB data volume on the target machine. Set the archive name in DB_DATA_ARCHIVE before executing the script on the target machine.

Run the JDE servers 1. Create files jdedb_system_password.txt and wlsadmin_password.txt in directory

“OracleJDE/dockerfiles/run/secrets” containing the passwords of the DB system user and the WLS admin user (weblogic).

63 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

2. Run the Docker Compose file docker-compose-run-oc-s.yml using the wrapper script.

$ cd OracleJDE/dockerfiles/run

$ ./exec-docker-compose-run-oc-s.sh

3. Wait a few minutes for the servers to start. The JDE servers will now be accessible at the following URLs: » SMC: http://<public-IP-address>:8999/manage » Web server: http://<public-IP-address>:8002/jde/E1Menu.maf » AIS server: http://<public-IP-address>:8004/jderest/defaultconfig

To remove the containers run the command below.

$ ./exec-docker-compose-run-oc-s.sh down

Sample Docker Compose File to Run JD Edwards EnterpriseOne in a Swarm Run the below command to create the overlay network.

docker network create --driver=overlay --subnet=172.28.0.0/16 --ip-range=172.28.5.0/24

jdenet

Run the below command to deploy the stack.

docker stack deploy -c docker-compose.yml jdeapp

docker-compose.yml

version: "3.2"

services:

jdedb:

hostname: jdedb

image: oracle/jde/oradb:12.1.0.2-se2-9.2.2.1-pp-dv-s

networks:

jdenet:

aliases:

- jdedb

volumes:

- jdedb-ora12102-pp-data-volume:/opt/oracle/oradata/

- jdedb-ora12102-u01-volume:/u01/

deploy:

restart_policy:

condition: on-failure

endpoint_mode: dnsrr

placement:

constraints:

- node.labels.type == dbserver

64 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

environment:

ORACLE_SID: orcl

ORACLE_PDB: jdeorcl

ports:

- target: 1521

published: 1521

protocol: tcp

mode: host

jdeprov:

hostname: jdeprov

image: oracle/jde/prov:9.2.2.1-pp-dv-s

environment:

- NM_HOST=localhost

ports:

- target: 8999

published: 8999

protocol: tcp

mode: host

- target: 7001

published: 7001

protocol: tcp

mode: host

- target: 14501

published: 14501

protocol: tcp

mode: host

deploy:

restart_policy:

condition: on-failure

placement:

constraints:

- node.labels.type2 == lb

volumes:

- jdeprov-pp-u01-volume:/u01/

networks:

jdenet:

aliases:

- jdeprov

jdeent:

hostname: jdeent

65 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

image: oracle/jde/ent:9.2.2.1-pp-dv-s

deploy:

replicas: 1

endpoint_mode: dnsrr

restart_policy:

condition: on-failure

placement:

constraints:

- node.labels.type3 == jdeserver

networks:

jdenet:

aliases:

- jdeent

jdeweb:

hostname: jdeweb

image: oracle/jde/web:12.2.1.0-g-9.2.2.1-pp-dv-s

deploy:

replicas: 1

endpoint_mode: dnsrr

restart_policy:

condition: on-failure

placement:

constraints:

- node.labels.type3 == jdeserver

extra_hosts:

- "jdeent:${HAPROXY_IP}"

networks:

jdenet:

aliases:

- jdeweb

jdeais:

hostname: jdeais

image: oracle/jde/ais:12.2.1.0-g-9.2.2.1-pp-dv-s

deploy:

replicas: 1

endpoint_mode: dnsrr

restart_policy:

condition: on-failure

placement:

constraints:

66 | DEPLOYING CONTAINERIZED JD EDWARDS ENTERPRISEONE ON ORACLE CLOUD INFRASTRUCTURE

- node.labels.type3 == jdeserver

extra_hosts:

- "jdeweb:${HAPROXY_IP}"

networks:

jdenet:

aliases:

- jdeais

networks:

jdenet:

external: true

volumes:

jdedb-ora12102-pp-data-volume:

external: true

jdedb-ora12102-u01-volume:

jdeprov-pp-u01-volume:

external: true

Conclusion Containerizing JD Edwards EnterpriseOne servers provides greater flexibility and better utilization of available resources, thus reducing infrastructure costs. It makes it easier to deploy highly available elastic environments that can be updated with minimal downtime and without affecting connected users.

Oracle Corporation, World Headquarters Worldwide Inquiries 500 Oracle Parkway Phone: +1.650.506.7000 Redwood Shores, CA 94065, USA Fax: +1.650.506.7200

Copyright © 2018, Oracle and/or its affiliates. All rights reserved. This document is provided for information purposes only, and the contents hereof are subject to change without notice. This document is not warranted to be error-free, nor subject to any other warranties or conditions, whether expressed orally or implied in law, including implied warranties and conditions of merchantability or fitness for a particular purpose. We specifically disclaim any liability with respect to this document, and no contractual obligations are formed either directly or indirectly by this document. This document may not be reproduced or transmitted in any form or by any means, electronic or mechanical, for any purpose, without our prior written permission. Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group. 0118 Deploying Containerized JD Edwards EnterpriseOne on Oracle Cloud Infrastructure

C O N N E C T W I T H U S

blogs.oracle.com/oracle

facebook.com/oracle

twitter.com/oracle

oracle.com