How to install DB2 Express-C on Docker and set up the JDBC connection properties

Introduction

While developing Hibernate, I need to test the code base against a plethora of relational database systems: Oracle, SQL Server, PostgreSQL, MySQL, MariaDB, Informix, and of course DB2.

However, having all these databases installed on my system is far from ideal, so I rely a lot on Docker for this task. In this article, I’m going to show how easily you can install DB2 on Docker and set up the JDBC connection so that you can run Hibernate tests on DB2.

Installing the DB2 Docker container

Nowadays, all major RDBMS providers offer official Docker images on DockerHub, and IBM is no different. The Express-C edition can be fetched automatically during Docker container set up.

To create a new DB2 Docker container on Windows, you need to run the following command:

docker run ^
 --name db2 ^
 -p 50000:50000 ^
 -e DB2INST1_PASSWORD=db2inst1-pwd ^
 -e LICENSE=accept ^
 -d ibmcom/db2express-c db2start

On Linux, you need to use the \ multiline separator:

docker run \
 --name db2 \
 -p 50000:50000 \
 -e DB2INST1_PASSWORD=db2inst1-pwd \
 -e LICENSE=accept \
 -d ibmcom/db2express-c db2start

Now, you can see the newly installed Docker container by running docker ps -as

> docker ps -as
CONTAINER ID  IMAGE                COMMAND                  CREATED       STATUS        PORTS                              NAMES  SIZE
731eee777310  ibmcom/db2express-c  "/entrypoint.sh db..."   2 minutes ago Up 2 minutes  22/tcp, 0.0.0.0:50000->50000/tcp   db2    3.64 MB (virtual 1.71 GB)

When you want to stop DB2, you can run:

> docker stop db2

To start it again, you have to run the following command:

> docker start db2

Setting up the DB2 Docker container

To set up the DB2 Docker container, you need to open a bash terminal inside the DB2 container:

docker exec -i -t db2 /bin/bash

Now, you need to switch to the db2inst1 Linux user which is set up to run DB2:

su - db2inst1

We are going to create a new database called hiber8. Strangely, DB2 limits the database name length to 8 bytes only.

db2 create db hibern8

Setting up the JDBC conection

Ironically, it takes more time to get the JDBC Driver than to install the DB2 Docker image. To get the JDBC Driver, you need to have an IBM account and download it from IBM Support.

Now, you can install the db2jcc4.jar in your local Maven repsoitory using the following command:

mvn install:install-file -Dfile=db2jcc4.jar -DgroupId=com.ibm.db2 -DartifactId=db2jcc -Dversion=10.5 -Dpackaging=jar -DgeneratePom=true

To connect to the newly installed DB2 Docker container, you need the following connection properties:

db2 : [
    'db.dialect' : 'org.hibernate.dialect.DB2Dialect',
    'jdbc.driver': 'com.ibm.db2.jcc.DB2Driver',
    'jdbc.user'  : 'db2inst1',
    'jdbc.pass'  : 'db2inst1-pwd',
    'jdbc.url'   : 'jdbc:db2://127.0.0.1:50000/hibern8'
]

That’s it!

If you enjoyed this article, I bet you are going to love my book as well.

Conclusion

Docker makes database testing a breeze. You can have as many database systems you need set up in Docker without having to bloat your currently running operating system.

Another great advantage of having your testing databases on Docker is that you can simply copy the Docker machine file from one system to another, which is ideal when you switch to a new notebook or when you have to share the default database containers with the rest of your team.

Enter your email address to follow this blog and receive notifications of new posts by email.

Advertisements

4 thoughts on “How to install DB2 Express-C on Docker and set up the JDBC connection properties

  1. I can install it, but cannot access it, neither via IBM Data Studio nor DBeaver, always get “connection refused”. Can you help? Many thanks

    1. I never used IBM Data Studio nor DBeaver, so I don’t know how you can set up those. However, the JDBC connection properties are the ones that I showed you and you can easily test that using IntelliJ IDEA database visualizing too.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s