posts

Imagen de Oracle SOA Suite 12c en Docker

Posted on
devops oracle soa docker packer

Luego de encontrar algunas limitaciones en la construcción de una imagen en Docker con Oracle SOA Suite 12c instalado usando Dockerfiles (como acceso a volumenes, tamaño de filesystem por defecto), he investigado como mejorar este proceso, y he encontrado Packer (del mismo equipo que creo Vagrant, Hashicorp).

Para obtener mayor información sobre porqué utilizar Packer en vez de Dockerfiles, ir aquí.

También he movido el directory OracleSOA que cree sobre el repositorio de Oracle Docker oracle-docker hacia un repositorio independiente: github.com/jeqo/oracle-soa-12c-docker.

 Mejoras

Basicamente, los scripts de Dockerfile fueron transformados en shell scripts y son invocados desde Packer en la etapa de provisionamiento

  "provisioners": [
    {
      "type": "shell",
      "scripts": [
        "scripts/create-user.sh"
      ]
    },
    {
      "type": "file",
      "source": "./files/",
      "destination": "/u01/"
    },
    {
      "type": "shell",
      "scripts": [
        "scripts/install-java.sh"
      ],
      "environment_vars": [
        "JAVA_RPM=/data/{{user `java_rpm`}}"
      ]
    },
    {
      "type": "shell",
      "scripts": [
        "scripts/install-soa.sh"
      ],
      "environment_vars": [
        "SOA_ZIP=/data/{{user `soa_zip`}}",
        "SOA_PKG={{user `soa_pkg`}}",
        "SOA_PKG2={{user `soa_pkg2`}}",
        "JAVA_HOME=/usr/java/default",
        "MW_HOME=/u01/oracle/soa"
      ]
    }
  ]

Luego del provisionamiento exitoso, se procesa la imagen para guardarla en Docker Hub:

  "post-processors": [
    [
      {
        "type": "docker-tag",
        "repository": "jeqo/oracle-soa-12c",
        "tag": "12.1.3-dev"
      },
      "docker-push"
    ]
  ]

Realmente la configuración en JSON es bastante simple y concreta.

Una vez que la imagen esta cargada en Docker Hub, se puede utilizar la herramienta preferida: Docker, Dockerfiles, o Vagrant, para crear un dominio sobre la imagen creada. Ejemplo explicado en mi post anterior.