- Provide an easy way to build a lightweight Docker image for Oracle Database.
- Just run a database and skip the complexities of installation and configuration.
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).- Uses
trap
to handle signals and shutdown gracefully. - Data and logs are stored in
/data
so that-v /data
could be used. - Total memory used by Oracle instance (MEMORY_TARGET) is set depending on
--shm-size
parameter. - rlwrap can be installed by running
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.
- download
linuxamd64_12102_database_1of2.zip
andlinuxamd64_12102_database_2of2.zip
from oracle.com and extract the archives to current directory. - Execute the following lines in bash and wait ~15 minutes:
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
- Tested on Docker 1.12
--shm-size
option is required to mount /dev/shm to use Oracle's automatic memory management.- Oracle Database doesn't work with Docker ZFS storage driver by default. Check this issue for the workaround.
- Database options and sample schemas installation through DBCA is a mystery. In this repo dbca is run with
-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.
- This repo - MIT License.
- Oracle Database software - see Database Licensing Information.
- create new databases faster
- use spfile?
- EM DBconsole
- Archivelog mode option?
- syslog-ng or rsyslog, maybe?