Oracle Database 12c now available on Docker

Last week at Dockercon, Oracle announced that the Oracle Database is now available alongside other Oracle products the on Docker Store.

Given how much folks here in Silicon Valley (including my better half) rave about how easy and great Docker is, I thought I would try it out and share with you exactly how I did.

Since I was a Docker virgin, the first thing I had to do was download and install Docker. A quick trip to the Docker Store followed by a double click and I was up and running!

Next I needed to get the new Oracle Database container. You have two options here:

  1. Go back to the Docker Store and search for “oracle database ”, which will return a Docker container that has a 12.1.0.2 database but is not a persistent image. That means if you drop the container the database disappears too. It’s also not possible to unplug the database from within the container and plug it in anywhere else.
  2. Go to Github and get an Oracle Docker build files and then go to Oracle.com and get the 12.2 database software. This combination will allow you to create a Docker container that has the latest 12.2 database and is persisted. That is to say if the container is dropped you still have the database and it is possible to unplug the database and plug it in somewhere else.

I chose to go with option 2, which is a wee bit more involved but having 12.2 and a persistent image were both, very important to me. And before you ask, yes 12.2 will be made available in the Docker Store and it will be persistent. It’s just not there yet.

The steps below explain exactly what I did (with some help from @GeraldVenzl)

1. Go to https://github.com/oracle/docker-images and download the Oracle Docker build files.

2. Go to http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html and download Oracle Database 12c Release 2 for Linux x86-64.

3. You should now have two files:
     i. docker-images-master.zip
   ii.  linuxx64_12201_database.zip

Unzip the docker-images-master.zip file, which will result in a new directory called docker-images-master. This directory contains 12 subdirectories, one of each of the Oracle products supported on Docker.

unzip docker-images-master.zip
 
Archive: docker-images-master.zip
ce91c58275d24df32b3f5d3b8a68000ade61d562
creating: docker-images-master/
extracting: docker-images-master/.gitattributes
inflating: docker-images-master/.gitignore
inflating: docker-images-master/.gitmodules
...
...
...
inflating: docker-images-master/README.md

4. Copy the 12.2 software (linuxx64_12201_database.zip) into the /docker-images-master/OracleDatabase/dockerfiles/12.2.0.1 subdirectory.

5. Next you need to create the Docker image. I took the easy route and utilized the buildDockerImage.sh shell script, which is included in docker-images-master.zip. It will create an image using oraclelinux:7-slim and which ever database version you specify. I used the following command to install Oracle Database 12.2 software:

./buildDockerImage.sh -v 12.2.0.1 -e
 
Checking if required packages are present and valid...
linuxamd64_12201_database.zip: OK
=====================
Building image 'oracle/database:12.2.0.1-ee' ...
Sending build context to Docker daemon 2.688 GB


Note
the installer reaches out the internet to get oraclelinux:7-slim and to do a yum update of the OS inside the container, so if you are doing this behind a corporate firewall you will need to explicitly set the environment variable https_proxy. The buildDockerImage.sh script will automatically detect http_proxy and https_proxy and pass it on to Docker to use for the image build.

6. Once the image is built you can check what you have by running the “docker images” command

docker images
 
REPOSITORY         TAG               IMAGE ID           CREATED             SIZE
oracle/database     12.2.0.1-ee      7c2999a16928       7 hours ago       14.8 GB
oraclelinux         7-slim           442ebf722584       5 days ago         114 MB

As you can see I have installed, Oracle Linux and the Oracle Database 12.2.0.1 software. We don’t have a database yet.

7. In order to get an actual database, we need to create our first container. I used the “docker run” command below to do this and supplied a couple of additional parameters for mappings since I wanted to persist the database files even if the container was removed.

docker run --name oracle -p 1521:1521 -p 5500:5500 
-v /Users/mcolgan-mac/oradata:/opt/oracle/oradata oracle/database:12.2.0.1-ee
 
LSNRCTL for Linux: Version 12.2.0.1.0 - 
Production on 26-APR-2017 18:04:36
 
Copyright (c) 1991, 2016, Oracle.  All rights reserved.
 
Starting /opt/oracle/product/12.2.0.1/dbhome_1/bin/tnslsnr: 
please wait...
 
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/75ca99d5275d/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=75ca99d5275d)(PORT=1521)))
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
:

–name   Gave the new container the name “oracle” (will be auto genearted if omitted)
-p            Mapped port 1521 and 5500 on my laptop to the corresponding ports inside the container
-v             Mapped my local directory (/Users/mcolgan-mac/oradata ) to the default location where the data files will be stored (:/opt/oracle/oradata) to ensure the files are persisted outside my container.

8. The “docker run” command actually calls the Oracle DBCA and automatically creates a database. Since this is a 12c database it will automatically create a container database ORCLCDB and one pluggable database ORCLPDB1 (both can be overwritten if you wish).
I didn’t specify a password for the SYS, SYSTEM or PDBADMIN accounts in my command, so one was automatically generated for me and displayed in the output of the command. Be sure to change the password from this default. You can do this using the “docker exec” command once your database is up and running.

docker exec oracle ./setPassword.sh XXXXXX

9. We can confirm our container was created successfully and is running by using the “docker ps” command.

docker ps -a
 
CONTAINER ID       IMAGE                         COMMAND                 CREATED        STATUS        PORTS         NAMES
75ca99d5275d       oracle/database:12.2.0.1-ee   "/bin/sh -c 'exec ..."   8 hours ago   Up 5 hours    0.0.0.0:1521/tcp    oracle

10. Going forward all we need to do is start and stop the container, which will open and close the database.

docker start oracle
 
docker stop oracle

You can monitor exactly what is going during these commands by looking at the docker logs using the docker log command.

docker logs oracle
 
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 27-APR-2017 18:58:05
 
Copyright (c) 1991, 2016, Oracle.  All rights reserved.
 
Starting /opt/oracle/product/12.2.0.1/dbhome_1/bin/tnslsnr: please wait...
 
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/75ca99d5275d/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=75ca99d5275d)(PORT=1521)))
 
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                27-APR-2017 18:58:05
Uptime                    0 days 0 hr. 0 min. 2 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/75ca99d5275d/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=75ca99d5275d)(PORT=1521)))
The listener supports no services
The command completed successfully
 
SQL*Plus: Release 12.2.0.1.0 Production on Thu Apr 27 18:58:08 2017
 
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
 
Connected to an idle instance.
 
SQL> ORACLE instance started.
 
Total System Global Area 1610612736 bytes
Fixed Size		    8793304 bytes
Variable Size		  520094504 bytes
Database Buffers	 1073741824 bytes
Redo Buffers		    7983104 bytes
Database mounted.
Database opened.
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
#########################
DATABASE IS READY TO USE!
#########################
ORCLPDB1(3):Database Characterset for ORCLPDB1 is AL32UTF8
2017-04-27T18:58:20.468112+00:00
ORCLPDB1(3):Opatch validation is skipped for PDB ORCLPDB1 (con_id=0)
2017-04-27T18:58:21.545187+00:00
ORCLPDB1(3):Opening pdb with no Resource Manager plan active
Pluggable database ORCLPDB1 opened read write
Starting background process CJQ0
Completed: ALTER DATABASE OPEN
2017-04-27T18:58:22.163089+00:00
CJQ0 started with pid=40, OS id=262 
2017-04-27T18:58:22.589640+00:00
Shared IO Pool defaulting to 64MB. Trying to get it from Buffer Cache for process 81.
===========================================================
Dumping current patch information
===========================================================
No patches have been applied
===========================================================
2017-04-27T18:58:23.381214+00:00
db_recovery_file_dest_size of 12780 MB is 0.00% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.

So there you have it, ten simple steps to get you up and running with Oracle Database 12.2 on Docker. If you want more details on building Oracle Database Docker images, check out Gerald’s blog.

This entry was posted in Docker, Oracle Database 12c New Features and tagged , . Bookmark the permalink.

5 Responses to Oracle Database 12c now available on Docker

  1. Naveen says:

    ./buildDockerImage.sh –v 12.2.0.1 –e

    Checking if required packages are present and valid…
    linuxamd64_12102_database_1of2.zip: OK
    linuxamd64_12102_database_2of2.zip: OK
    =====================
    Building image ‘oracle/database:12.1.0.2-ee’ …
    Sending build context to Docker daemon 2.688 GB

    12.2.0.1 ~ 12.1.0.2 ???

    • Maria Colgan says:

      Hi Naveen,

      You caught me!

      I forgot to capture the screen output for this step, so I stole some from Gerald’s blog without realizing he had installed 12.1.0.2 and not 12.2.0.1. LOL!

      I’ve gone ahead and corrected the mistake!

      Thanks for keeping me honest,
      Maria

  2. Vivek says:

    Hi Maria,

    As I see, you have installed this on your mac. Which is lightweight and preferred?Virtual box or docker?

    • Maria Colgan says:

      Hi Vivek,

      I’ve used virtual box exclusively in the past but I’m slowly converting over to using Docker now.

      With my Oracle Database environments I wouldn’t consider either option lightweight as they both require a minimum of 2GB of DRAM.

      My basic rule of thumb is virtual box for older versions of the Oracle Database, 11gR1 etc. as those images are readily available and Docker for newer stuff.

      Cheers,
      Maria

  3. Pingback: Run Oracle databases in Docker Containers | Robin Cloud Platform (RCP)

Leave a Reply

Your email address will not be published. Required fields are marked *