Oracle Sqlplus in a Small Docker Container
When you only need Sql*Plus, it’s good to have a small Docker image that you can use. This post will look at how to create this Docker image.
Table of Contents
Introduction
Some time back I wrote a blog post about SQL*Plus commands. To run those commands, I would use a 15 GiB image of Oracle XE (Express Edition) just to be able to use a command-line tool. Today I stumbled upon Oracle’s Docker images, that are a whole lot smaller.
How to Build Your Own Image
Oracle provides Dockerfile
s on its GitHub
page. I’m interested in just
SQL*Plus so I can change my password on an Oracle database and maybe
execute some simple queries. I took a look at this
Dockerfile
,
and modified it slightly to include only what I need:
FROM oraclelinux:7-slim
ARG release=19
ARG update=6
RUN yum -y install oracle-release-el7 && \
yum-config-manager --enable ol7_oracle_instantclient && \
yum -y install oracle-instantclient${release}.${update}-basic \
oracle-instantclient${release}.${update}-sqlplus && \
rm -rf /var/cache/yum
CMD ["sqlplus", "-v"]
Build the image and tag it as sqlplus
:
$ docker build -t sqlplus .
The image it generates is pretty small, weighing around 370 MB. (OK, an
image based on Alpine should be smaller, but Oracle requires glibc
and
not musl libc
.) You can create a container and run a SQL*Plus command
with:
$ docker run -it sqlplus user/password@db.domain.tld:1521/FOO
Optional: Add tnsnames.ora
to the Image
In Oracle, a file name tnsnames.ora
contains the connection strings
for databases. They allow you to connect to a database using sqlplus
without specifying the hostname:
$ sqlplus user/passsword@FOO
Add the tnsnames.ora
to the image by putting the following between the
RUN
and CMD
directive in the Dockerfile
:
COPY ./tnsnames.ora /root
ENV TNS_ADMIN=/root