I must thank my fellow DBA Franky Weber Faust for his publication in his blog.
If you want to know about Basic about Docker in the Oracle
Hi everyone, here in a very brief post I will show you how to upload Oracle in a Docker container.
Following the DevOps wave, this week I’m doing a course and knowing some tools, Docker is one of them.
So far I have not found it useful in the database world, but I still know little about it.
What the article is about:
This article will introduce you how to use a ready-made image of Oracle Database 11g XE and run it in Docker.
In what situation is the topic useful?
This feature is useful for learning technology in Docker. Consider this article as an initiation in the technology in question, I will not comment or recommend its use.
Docker installation
The first step is to install Docker in your environment. In my case I’m using Ubuntu 16.04:
root@devops:~# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.2 LTS Release: 16.04 Codename: xenial
To install Docker run:
root@devops:~# apt install docker.io Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: bridge-utils cgroupfs-mount containerd runc ubuntu-fan Suggested packages: mountall aufs-tools debootstrap docker-doc rinse zfs-fuse | zfsutils The following NEW packages will be installed: bridge-utils cgroupfs-mount containerd docker.io runc ubuntu-fan 0 upgraded, 6 newly installed, 0 to remove and 133 not upgraded. Need to get 16.4 MB of archives. After this operation, 83.6 MB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://us.archive.ubuntu.com/ubuntu xenial/main amd64 bridge-utils amd64 1.5-9ubuntu1 [28.6 kB] Get:2 http://us.archive.ubuntu.com/ubuntu xenial/universe amd64 cgroupfs-mount all 1.2 [4,970 B] Get:3 http://us.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 runc amd64 1.0.0~rc2+docker1.12.6-0ubuntu1~16.04.1 [1,479 kB] Get:4 http://us.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 containerd amd64 0.2.5-0ubuntu1~16.04.1 [4,041 kB] Get:5 http://us.archive.ubuntu.com/ubuntu xenial-updates/universe amd64 docker.io amd64 1.12.6-0ubuntu1~16.04.1 [10.8 MB] Get:6 http://us.archive.ubuntu.com/ubuntu xenial-updates/main amd64 ubuntu-fan all 0.9.2 [30.7 kB] Fetched 16.4 MB in 1min 6s (247 kB/s) Selecting previously unselected package bridge-utils. (Reading database ... 65486 files and directories currently installed.) Preparing to unpack .../bridge-utils_1.5-9ubuntu1_amd64.deb ... Unpacking bridge-utils (1.5-9ubuntu1) ... Selecting previously unselected package cgroupfs-mount. Preparing to unpack .../cgroupfs-mount_1.2_all.deb ... Unpacking cgroupfs-mount (1.2) ... Selecting previously unselected package runc. Preparing to unpack .../runc_1.0.0~rc2+docker1.12.6-0ubuntu1~16.04.1_amd64.deb ... Unpacking runc (1.0.0~rc2+docker1.12.6-0ubuntu1~16.04.1) ... Selecting previously unselected package containerd. Preparing to unpack .../containerd_0.2.5-0ubuntu1~16.04.1_amd64.deb ... Unpacking containerd (0.2.5-0ubuntu1~16.04.1) ... Selecting previously unselected package docker.io. Preparing to unpack .../docker.io_1.12.6-0ubuntu1~16.04.1_amd64.deb ... Unpacking docker.io (1.12.6-0ubuntu1~16.04.1) ... Selecting previously unselected package ubuntu-fan. Preparing to unpack .../ubuntu-fan_0.9.2_all.deb ... Unpacking ubuntu-fan (0.9.2) ... Processing triggers for man-db (2.7.5-1) ... Processing triggers for ureadahead (0.100.0-19) ... Processing triggers for systemd (229-4ubuntu16) ... Setting up bridge-utils (1.5-9ubuntu1) ... Setting up cgroupfs-mount (1.2) ... Setting up runc (1.0.0~rc2+docker1.12.6-0ubuntu1~16.04.1) ... Setting up containerd (0.2.5-0ubuntu1~16.04.1) ... Setting up docker.io (1.12.6-0ubuntu1~16.04.1) ... Adding group `docker' (GID 120) ... Done. Setting up ubuntu-fan (0.9.2) ... Processing triggers for systemd (229-4ubuntu16) ... Processing triggers for ureadahead (0.100.0-19) ...
Downloading the Oracle image from the Docker Store
Now let’s look for an Oracle image available in the Docker Store:
root@devops:~# docker search oracle NAME DESCRIPTION STARS OFFICIAL AUTOMATED wnameless/oracle-xe-11g Oracle Express 11g R2 on Ubuntu 16.04 LTS 493 [OK] oraclelinux Oracle Linux is an open-source operating s... 369 [OK] frolvlad/alpine-oraclejdk8 The smallest Docker image with OracleJDK 8... 250 [OK] alexeiled/docker-oracle-xe-11g This is a working (hopefully) Oracle XE 11... 209 [OK] sath89/oracle-12c Oracle Standard Edition 12c Release 1 with... 163 [OK] sath89/oracle-xe-11g Oracle xe 11g with database files mount su... 111 [OK] isuper/java-oracle This repository contains all java releases... 56 [OK] jaspeen/oracle-11g Docker image for Oracle 11g database 45 [OK] oracle/openjdk Docker images containing OpenJDK Oracle Linux 22 [OK] ingensi/oracle-jdk Official Oracle JDK installed on centos. 21 [OK] oracle/glassfish GlassFish Java EE Application Server on Or... 21 [OK] airdock/oracle-jdk Docker Image for Oracle Java SDK (8 and 7)... 20 [OK] cogniteev/oracle-java Oracle JDK 6, 7, 8, and 9 based on Ubuntu ... 19 [OK] n3ziniuka5/ubuntu-oracle-jdk Ubuntu with Oracle JDK. Check tags for ver... 13 [OK] oracle/nosql Oracle NoSQL on a Docker Image with Oracle... 12 [OK] bofm/oracle12c Docker image for Oracle Database 11 [OK] andreptb/oracle-java Debian Jessie based image with Oracle JDK ... 8 [OK] openweb/oracle-tomcat A fork off of Official tomcat image with O... 6 [OK] flurdy/oracle-java7 Base image containing Oracle's Java 7 JDK 4 [OK] davidcaste/debian-oracle-java Oracle Java 8 (and 7) over Debian Jessie 3 [OK] teradatalabs/centos6-java8-oracle Docker image of CentOS 6 with Oracle JDK 8... 2 publicisworldwide/oracle-core This is the core image based on Oracle Lin... 1 [OK] sigma/nimbus-lock-oracle 0 [OK] spansari/nodejs-oracledb nodejs with oracledb installed globally on... 0 trollin/oraclelinux 0
Let’s download the wnameless/oracle-xe-11g image to use in our container:
root@devops:~# docker pull wnameless/oracle-xe-11g Using default tag: latest latest: Pulling from wnameless/oracle-xe-11g d5c6f90da05d: Already exists 1300883d87d5: Already exists c220aa3cfc1b: Already exists 2e9398f099dc: Already exists dc27a084064f: Already exists 5e23a3a5b6f7: Downloading [==============================> ] 167.8MB/275.8MB efb2b214660e: Downloading [==============================> ] 220MB/364.2MB
The download is done in small parts with the “docker pull” command.
When the download completes you can list the downloaded image:
root@devops:~# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wnameless/oracle-xe-11g latest 5201119f4c27 2 days ago 2.23GB ubuntu latest ccc7a11d65b1 2 weeks ago 120MB
Uploading the oracle container
Now let’s upload our container using the wnameless/oracle-xe-11g image:
root@devops:~# docker run -idt --name oracle wnameless/oracle-xe-11g /bin/bash 0125ab1cf799db05acaea00914647612cf70d1f28a454e68bebc64b5e964e325
Note that the container is “Up“:
root@devops:~# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0125ab1cf799 wnameless/oracle-xe-11g "/bin/bash" 43 seconds ago Up 42 seconds 22/tcp, 1521/tcp, 8080/tcp oracle
Working in the oracle container
To switch your session to the oracle container, do the following:
root@devops:~# docker attach oracle root@0125ab1cf799:/#
Notice that the prompt has changed to the hostname of the oracle container.
Make sure that the hosts file is configured with the hostname in question:
root@0125ab1cf799:/# cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 0125ab1cf799
Check the IP of the container:
root@0125ab1cf799:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:ac:11:00:02 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:648 (648.0 B) TX bytes:0 (0.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Switch your session to the oracle container user:
root@0125ab1cf799:/# su - oracle oracle@0125ab1cf799:~$
Start the Listener:
oracle@0125ab1cf799:~$ lsnrctl start LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 30-AUG-2017 13:18:24 Copyright (c) 1991, 2011, Oracle. All rights reserved. Starting /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 11.2.0.2.0 - Production System parameter file is /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora Log messages written to /u01/app/oracle/product/11.2.0/xe/log/diag/tnslsnr/0125ab1cf799/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE))) Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=8089fe031125)(PORT=1521))) TNS-12545: Connect failed because target host or object does not exist TNS-12560: TNS:protocol adapter error TNS-00515: Connect failed because target host or object does not exist Linux Error: 99: Cannot assign requested address Listener failed to start. See the error message(s) above...
The Listener did not go up because the listener.ora file is not properly configured for the hostname of the container. Look:
oracle@0125ab1cf799:~$ cat /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora # listener.ora Network Configuration File: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) (ADDRESS = (PROTOCOL = TCP)(HOST = 8089fe031125)(PORT = 1521)) ) ) DEFAULT_SERVICE_LISTENER = (XE)
Let’s change it by replacing it with the correct hostname:
oracle@0125ab1cf799:~$ hostname 0125ab1cf799 oracle@0125ab1cf799:~$ sed -i -e 's/8089fe031125/0125ab1cf799/g' \ /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora
Try to reload it again:
oracle@0125ab1cf799:~$ lsnrctl start LSNRCTL for Linux: Version 11.2.0.2.0 - Production on 30-AUG-2017 13:26:01 Copyright (c) 1991, 2011, Oracle. All rights reserved. Starting /u01/app/oracle/product/11.2.0/xe/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 11.2.0.2.0 - Production System parameter file is /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora Log messages written to /u01/app/oracle/product/11.2.0/xe/log/diag/tnslsnr/0125ab1cf799/listener/alert/log.xml Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE))) Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0125ab1cf799)(PORT=1521))) Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 11.2.0.2.0 - Production Start Date 30-AUG-2017 13:26:01 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Default Service XE Listener Parameter File /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora Listener Log File /u01/app/oracle/product/11.2.0/xe/log/diag/tnslsnr/0125ab1cf799/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0125ab1cf799)(PORT=1521))) Services Summary... Service "PLSExtProc" has 1 instance(s). Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
Finally, access SQL * Plus and start Oracle Database:
oracle@0125ab1cf799:~$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Wed Aug 30 13:27:43 2017 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to an idle instance. SQL> startup; ORACLE instance started. Total System Global Area 601272320 bytes Fixed Size 2228848 bytes Variable Size 180358544 bytes Database Buffers 415236096 bytes Redo Buffers 3448832 bytes Database mounted. Database opened.
Well, that’s what I had to show today. The tests are up to you.
To remove the container and image run the following commands:
root@devops:~# docker stop oracle root@devops:~# docker rm oracle root@devops:~# docker rmi wnameless/oracle-xe-11g
Thank you for giving your valuable time to read the above information.
In the next post, I will configure Oracle Weblogic with Docker.
If you want to be updated with all our articles send us the Invitation or Follow us:
Skant Gupta’s LinkedIn: www.linkedin.com/in/skantali/
Joel Perez’s LinkedIn: Joel Perez’s Profile
Anuradha’s LinkedIn: Anuradha’s Profile
LinkedIn Group: Oracle Cloud DBAAS
Facebook Page: OracleHelp