Setting up Docker on Oracle Linux

Posted in: Oracle, Technical Track

Over the last couple of years, I have been hearing about Docker at different conferences. It’s a container technology that seems to have gained a lot of popularity. In recent months, I have started exploring how Docker can be used with my area of specialization, Oracle E-Business Suite. I will be sharing my experiences with a series of blog posts on how to get E-Business Suite running on Docker.

In this blog post, let’s look at how to get started with running Docker on an Oracle Linux 7.5 machine. This install was done on a fresh Oracle Linux 7.5 VM. First, we need to install required packages for Docker. Docker packages are available via Oracle Public Yum Server under ol7_addons. So we can use the Yum utility to install the Docker using below commands:

[[email protected] ~]# yum install -y yum-utils
[[email protected] ~]# yum-config-manager --enable ol7_addons
[[email protected] ~]# yum install -y docker-engine

By default, Docker pkg created a user group called Docker during install. Any user who is a part of this OS group can run Docker commands to start/stop containers or to import images. Let’s create a new user called dadmin to administer Docker and add it to Docker OS user group.

[[email protected] ~]# useradd dadmin -g docker
[[email protected] ~]# passwd dadmin

Docker stores all of its files (images, containers etc) in /var/lib/docker directory. So it’s recommended to create a separate mount point to hold this directory and configure Docker to use overlay2 storage driver. It’s the best storage driver for the XFS filesystem that comes with Oracle Linux. By default, Docker uses an overlay driver which has filesystem inodes issues.

[[email protected] ~]# df -h /var/lib/docker/
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 2.0T 1.1T 999G 52% /var/lib/docker

[[email protected] docker]# cat /etc/docker/daemon.json
“storage-driver”: “overlay2”,
“storage-opts”: [
] }

Let’s enable Docker service and bring it up:

[[email protected] ~]# systemctl status docker
? docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/docker.service.d
Active: inactive (dead)

[[email protected] ~]# systemctl enable docker
Created symlink from /etc/systemd/system/ to /usr/lib/systemd/system/docker.service.
[[email protected] ~]#

[[email protected] ~]# systemctl start docker
[[email protected] ~]# systemctl status docker
? docker.service – Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/docker.service.d
Active: active (running) since Wed 2018-05-30 10:26:26 EDT; 8s ago
Main PID: 11481 (dockerd)
Tasks: 17
Memory: 16.5M
CGroup: /system.slice/docker.service
??11481 /usr/bin/dockerd –selinux-enabled
??11486 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock –metrics-interval=0 –start-timeout 2m –state-dir /var/run/docker/libcontainerd/containerd –shim docker-containerd-shim –runtime d…

May 30 10:26:23 dockerd[11481]: time=”2018-05-30T10:26:23.307856900-04:00″ level=info msg=”libcontainerd: new containerd process, pid: 11486″
May 30 10:26:24 dockerd[11481]: time=”2018-05-30T10:26:24.337794100-04:00″ level=warning msg=”failed to rename /var/lib/docker/tmp for background deletion: rename /var/lib/docker/tmp /var/lib/docker/t…g synchronously”
May 30 10:26:24 dockerd[11481]: time=”2018-05-30T10:26:24.906599800-04:00″ level=info msg=”Graph migration to content-addressability took 0.00 seconds”
May 30 10:26:24 dockerd[11481]: time=”2018-05-30T10:26:24.908583500-04:00″ level=info msg=”Loading containers: start.”
May 30 10:26:25 dockerd[11481]: time=”2018-05-30T10:26:25.826619700-04:00″ level=info msg=”Default bridge (docker0) is assigned with an IP address Daemon option –bip can be used to set…rred IP address”
May 30 10:26:26 dockerd[11481]: time=”2018-05-30T10:26:26.500678900-04:00″ level=info msg=”Loading containers: done.”
May 30 10:26:26 dockerd[11481]: time=”2018-05-30T10:26:26.536444300-04:00″ level=info msg=”Daemon has completed initialization”
May 30 10:26:26 dockerd[11481]: time=”2018-05-30T10:26:26.537016800-04:00″ level=info msg=”Docker daemon” commit=d02b7ab graphdriver=overlay version=17.06.2-ol
May 30 10:26:26 systemd[1]: Started Docker Application Container Engine.
May 30 10:26:26 dockerd[11481]: time=”2018-05-30T10:26:26.571771900-04:00″ level=info msg=”API listen on /var/run/docker.sock”
Hint: Some lines were ellipsized, use -l to show in full.

Verify that Docker is using the overlay2 storage driver. I will explain different storage drivers offered by Docker in a separate blog post at a later date.

[[email protected] docker]# docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 17.06.2-ol
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 6e23458c129b551d5c9871e5174f6b1b7f6d1170
runc version: 810190ceaa507aa2727d7ae6f4790c76ec150bd2
init version: 949e6fa
Security Options:
Profile: default
Kernel Version: 3.10.0-862.3.2.el7.x86_64
Operating System: Oracle Linux Server 7.5
OSType: linux
Architecture: x86_64
CPUs: 1
Total Memory: 3.685GiB
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Experimental: false
Insecure Registries:
Live Restore Enabled: false

Now we have all the stuff we need for Docker to be ready. Let’s test by downloading an Oracle Linux 6 Docker image from public repo and get it up and running.

[[email protected] docker]# docker pull oraclelinux:6
6: Pulling from library/oraclelinux
b682776edd5e: Pull complete
Digest: sha256:61e16cd44fca143b535855bf372aebc5d1d6bade44ff2fea8ce9c18c8f0927bf
Status: Downloaded newer image for oraclelinux:6
[[email protected] docker]#
[[email protected] docker]# docker images
oraclelinux 6 9f9a3543f574 13 days ago 171MB
[[email protected] docker]#

You can start this image by running the below command. We can pass the hostname to be used by the container as a command line argument. The below command brings up the container and runs the bash command and the “-it” command line argument makes it interactive. The container gets stopped as soon as you exit the bash command line. To make it run in the background, use detach “-d” command line

[[email protected] docker]# docker run -it --name oel6-1 -h oraclelinux:6 bash
[[email protected] /]#
[[email protected] /]# hostname

Docker is a very interesting technology. My next blog post will look at how we can create an EBS Docker image and run Oracle EBS on Docker.

Learn more about Pythian’s services for Oracle EBS.

Want to talk with an expert? Schedule a call with our team to get the conversation started.

About the Author

Vasu Balla’s colleagues call him “Eagle Eye” for a reason – his diverse technical background enables him to view his clients’ systems from a 360-degree angle, giving him a higher level of understanding. Vasu is well known for being approachable, and he truly enjoys helping people. Even former colleagues reach out to Vasu when they are really stuck on an issue. When he isn’t working, Vasu can be found in the kitchen trying new recipes.

No comments

Leave a Reply

Your email address will not be published. Required fields are marked *