Docker image for Oracle Database 12c
docker run
creates and starts up a new database or the existing database, if it is already created.docker logs
shows all the logs prefixed with log source (in the style of syslog).trap
to handle signals and shutdown gracefully./data
so that -v /data
could be used.--shm-size
parameter.bash /tmp/install/install_rlwrap.sh
(+ 50 MB on disk).Optional: if you are using Vagrant, you can use this Vagrantfile for your build environment.
linuxamd64_12102_database_1of2.zip
and linuxamd64_12102_database_2of2.zip
from oracle.com and extract the archives to current directory.git clone https://github.com/bofm/docker-oracle12c.git
cd docker-oracle12c
make all
Note: In the following examples oracle_database
is the name of the container.
Create or run database and listener
Daemon mode
# Create and start
docker run -d --shm-size 1GB --name oracle_database -p 1521:1521 -v /data bofm/oracle12c
# Stop
docker stop -t 120 oracle_database
# Start again
docker start oracle_database
Important: Always stop with -t
, otherwise Docker will kill the database instance, if it doesn't shut down in 10 seconds.
Foreground mode
# Start
docker run -it --shm-size 1GB --name oracle_database -p 1521:1521 -v /data bofm/oracle12c
# `ctrl+c` (SIGINT) to stop
Create a gzipped tar archive suitable for docker load
(an archive of the image with a created database and without volumes)
It is recommended to use large (>=20GB, the default is 10GB) Docker base volume size, for which Vagrant with Vagrantfile can be used.
# Build everything and save the created image to a file.
# This will echo something like this:
# Image saved to: /some/path/docker_img_oracle_database_created_YYYY-MM-DD.tgz
make all docker-save
# The saved image can be loaded from the file
# The image will be loaded with tag bofm/oracle12c:created
docker load < docker_img_oracle_database_created_YYYY-MM-DD.tgz
# Run the image in the new container
# Daemon
docker run -d --shm-size 1GB --name oracle_database -p 1521:1521 bofm/oracle12c:created
# Foreground
docker run -it --shm-size 1GB --name oracle_database -p 1521:1521 bofm/oracle12c:created
Logs
# Check all the logs in one place
docker logs oracle_database
# Check alert log
docker logs oracle_database | grep alertlog:
# Check listener log
docker logs oracle_database | grep listener:
SQL*Plus, RMAN or any other program
# Bash
# as root
docker exec -it -u root oracle_database bash
# as oracle
docker exec -it oracle_database bash
# Run sqlplus in the running container
docker exec -it oracle_database sqlplus / as sysdba
# Run rman in the running container
docker exec -it oracle_database rman target /
# Run sqlplus in a separate container and
# connect to the database in the linked container
docker run -it --rm --link oracle_database:oradb bofm/oracle12c sqlplus sys/sys@oradb/ORCL as sysdba
Start listener only (not sure if anybody needs it :) )
docker run -d --name listener -p 1521:1521 bofm/oracle12c listener
# Or link it to the running container
docker run -d --name listener -p 1521:1521 --link <database_container> bofm/oracle12c listener
--shm-size
option is required to mount /dev/shm to use Oracle's automatic memory management.-sampleSchema true
and db_template.dbt contains this line <option name="SAMPLE_SCHEMA" value="true"/>
, but nothing happens, the database is always created without sample schemas. Well, that's Oracle Database after 30+ years of development.