I have shown in this blog/video on the “Installing Neo4j DB on a Docker container using Ubuntu 18.04 VM”.
Through this blog and video, I have demonstrated the below functions:
a) How to install docker on an Ubuntu 18.04 VM?
b) How to create the Neo4j container from the image ?
c) How to use the container for neo4j browser ?
d) How to login and operate the options ?
c) Then how to shutdown the neo4j container ?
On all the above steps, a practiced video is made for your lab practice.
This is attached at the end of this blog.
Initially, we need to check whether the prerequisite packages are installed.
To check, perform the following:
sudo apt-get -y install apt-transport-https ca-certificates curl
Then, add the docker.com keys to our local keyset:
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
Next, Add the Docker repository to our system (Ubuntu users, I am assuming you have a 64-bit CPU in your VM):
sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
Now, we need to work on Preparing the filesystem.
As we planned want need to keep track of the logs and be able to reuse our data, we will need to give the
Docker image some access to our filesystem.
In our home folder [~], let’s create a Neo4j folder and two subfolders named logs and data.
This below script will do it on a Linux platform:
Enter the above steps in a .sh script.
How to Run Neo4j in a Docker container ?:
I need to run the below command;
sudo apt install docker.io
Now, we can run the below long command in a Terminal to run Docker with a Neo4j image.
sudo docker run –rm –publish=7474:7474 –publish=7687:7687 –volume=$HOME/neo4j/data:/data \
This command triggered some downloading because our local Docker repository does not have the
Neo4j image available in its 3.1.2 version yet.
Ports used by Neo4j are 7474, 7473, and 7687, for the protocols http, https, and bolt, respectively .
In the parameters part, you can see–volume twice.
Its use is to link the folder on the local filesystem to the container filesystem.
Providing the port numbers given as parameters were not in use,
the Terminal should display something like this:
Remote interface available at : http://localhost:7474
Now, it denotes our Docker container started for Neo4j.
This informs us that Neo4j is expecting us to connect on port 7474 as usual.
So let us fire our browser and browse to the very same
URL we saw earlier, http://localhost:7474, and go graphing!
(Make sure our data will be persisted on disk.)
now, How to stop Docker running your image ?
In order to stop Docker , you need to pass not the name (of the image)
but the identifier of the running container (based on the image).
So, in another Terminal, let us type as follows to know the status of containers:
This will list all the containers running, in our case, only one.
So we look at the first column, container_id, and use it as a parameter:
docker stop container_id
You can watch the terminal screen.
Docker container stopped as it should be stopped with this command.
For typical installation procedure of neo4j visit my blog:
In continuation of my previous blog on “10. DevOps: How to Build images from Docker containers?”, I am continuing my lab exercises. In this session we can see ”
How to Launch a container as a daemon ?:“
Note: If you want to recollect the docker commands to be used during your current lab practice, visit my blog link:
Let us recap the past exercises; So far we have experimented with an interactive container, tracked the changes that were made to the containers., created images from the containers, and then gained insights in the containerization scenarios.
Now, let us see the container usage in a detached mode.
When we run the container in a detached mode it runs under a daemon process.
I want to use the “ubuntu” image and run detached mode command.
First, let me check my current docker images:
vskumar@ubuntu:~$ sudo docker images
[sudo] password for vskumar:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-exercise/ubuntu-wgetinstall latest e34304119838 7 days ago 169MB
<none> <none> fc7e4564eb92 7 days ago 169MB
hello-world latest f2a91732366c 12 days ago 1.85kB
ubuntu 16.04 20c44cd7596f 2 weeks ago 123MB
ubuntu latest 20c44cd7596f 2 weeks ago 123MB
busybox latest 6ad733544a63 4 weeks ago 1.13MB
busybox 1.24 47bcc53f74dc 20 months ago 1.11MB
You can see my previous image with ‘docker-exercise/ubuntu-wgetinstall ‘. This was created in the previous exercise.
As per our plan in this session I am using the below commands to run the ubuntu image as below:
sudo docker run -d ubuntu \
/bin/bash -c "while true; do date; sleep 5; done"; ========== Output ======> vskumar@ubuntu:~$ sudo docker run -d ubuntu \ > /bin/bash -c "while true; do date; sleep 5; done"; 0fe495fc93edee3aaadc7fc0fbf21997f0ca3cde4d7e563aa8c61352a43957dd vskumar@ubuntu:~$ $ =======================>
Now, to view the docker logs I want to run the docker logs subcommand on image id: ‘ 0fe495fc93edee3aaadc7fc0fbf21997f0ca3cde4d7e563aa8c61352a43957dd’
$ sudo docker logs 0fe495fc93edee3aaadc7fc0fbf21997f0ca3cde4d7e563aa8c61352a43957dd;
=====See the output of the Daemon process running with the ubuntu image ===============>
vskumar@ubuntu:~$ sudo docker logs 0fe495fc93edee3aaadc7fc0fbf21997f0ca3cde4d7e563aa8c61352a43957dd;
Sun Dec 3 05:11:57 UTC 2017
Sun Dec 3 05:12:02 UTC 2017
Sun Dec 3 05:12:07 UTC 2017
Sun Dec 3 05:12:12 UTC 2017
Sun Dec 3 05:12:17 UTC 2017
Sun Dec 3 05:12:22 UTC 2017
Sun Dec 3 05:12:27 UTC 2017
Sun Dec 3 05:12:32 UTC 2017
Sun Dec 3 05:12:37 UTC 2017
Sun Dec 3 05:12:42 UTC 2017
Sun Dec 3 05:12:48 UTC 2017
Sun Dec 3 05:12:53 UTC 2017
Sun Dec 3 05:12:58 UTC 2017
Sun Dec 3 05:13:03 UTC 2017
Sun Dec 3 05:13:08 UTC 2017
Sun Dec 3 05:13:13 UTC 2017
Sun Dec 3 05:13:18 UTC 2017
Sun Dec 3 05:13:23 UTC 2017
Sun Dec 3 05:13:28 UTC 2017
Sun Dec 3 05:13:33 UTC 2017
Sun Dec 3 05:13:38 UTC 2017
Sun Dec 3 05:13:43 UTC 2017
Sun Dec 3 05:13:48 UTC 2017
Sun Dec 3 05:13:53 UTC 2017
Sun Dec 3 05:13:58 UTC 2017
Sun Dec 3 05:14:03 UTC 2017
Sun Dec 3 05:14:08 UTC 2017
Sun Dec 3 05:14:13 UTC 2017
Sun Dec 3 05:14:18 UTC 2017
Sun Dec 3 05:14:23 UTC 2017
Sun Dec 3 05:14:28 UTC 2017
Sun Dec 3 05:14:33 UTC 2017
Sun Dec 3 05:14:38 UTC 2017
Sun Dec 3 05:14:43 UTC 2017
Sun Dec 3 05:14:48 UTC 2017
Sun Dec 3 05:14:53 UTC 2017
Sun Dec 3 05:14:58 UTC 2017
Sun Dec 3 05:15:03 UTC 2017
Sun Dec 3 05:15:08 UTC 2017
Sun Dec 3 05:15:13 UTC 2017
Sun Dec 3 05:15:18 UTC 2017
Sun Dec 3 05:15:23 UTC 2017
=================You can see the output for every few seconds listed =======>
It means the container is running as a daemon.
Now, let us use ps -eaf command to check the processed running in linux by using :
$ ps -eaf | grep ‘daemon’
========= See the output of daemon processes ==========>
vskumar@ubuntu:~$ ps -eaf | grep ‘daemon’
message+ 837 1 0 20:26 ? 00:00:05 /usr/bin/dbus-daemon –system –address=systemd: –nofork –nopidfile –systemd-activation
root 871 1 0 20:26 ? 00:00:03 /usr/sbin/NetworkManager –no-daemon
avahi 873 1 0 20:26 ? 00:00:00 avahi-daemon: running [ubuntu.local]
root 876 1 0 20:26 ? 00:00:01 /usr/lib/accountsservice/accounts-daemon
avahi 893 873 0 20:26 ? 00:00:00 avahi-daemon: chroot helper
rtkit 1370 1 0 20:28 ? 00:00:00 /usr/lib/rtkit/rtkit-daemon
vskumar 2426 1 0 20:55 ? 00:00:00 /usr/bin/gnome-keyring-daemon –daemonize –login
vskumar 2508 2428 0 20:55 ? 00:00:00 upstart-udev-bridge –daemon –user
vskumar 2515 2428 0 20:55 ? 00:00:04 dbus-daemon –fork –session –address=unix:abstract=/tmp/dbus-nPaV5rWlQc
vskumar 2570 2428 0 20:55 ? 00:00:03 /usr/lib/x86_64-linux-gnu/bamf/bamfdaemon
vskumar 2572 2428 0 20:55 ? 00:00:04 /usr/bin/ibus-daemon –daemonize –xim –address unix:tmpdir=/tmp/ibus
vskumar 2575 2428 0 20:55 ? 00:00:00 upstart-file-bridge –daemon –user
vskumar 2579 2428 0 20:55 ? 00:00:00 upstart-dbus-bridge –daemon –system –user –bus-name system
vskumar 2582 2428 0 20:55 ? 00:00:00 upstart-dbus-bridge –daemon –session –user –bus-name session
vskumar 2605 2428 0 20:55 ? 00:00:00 /usr/lib/ibus/ibus-x11 –kill-daemon
vskumar 2630 2428 0 20:56 ? 00:00:00 gpg-agent –homedir /home/vskumar/.gnupg –use-standard-socket –daemon
vskumar 2645 2428 0 20:56 ? 00:00:02 /usr/lib/unity-settings-daemon/unity-settings-daemon
vskumar 2664 2653 0 20:56 ? 00:00:00 /usr/bin/dbus-daemon –config-file=/etc/at-spi2/accessibility.conf –nofork –print-address 3
vskumar 2851 2654 0 20:56 ? 00:00:01 /usr/lib/unity-settings-daemon/unity-fallback-mount-helper
vskumar 2914 2428 0 20:57 ? 00:00:00 /bin/sh -c /usr/lib/x86_64-linux-gnu/zeitgeist/zeitgeist-maybe-vacuum; /usr/bin/zeitgeist-daemon
vskumar 2920 2914 0 20:57 ? 00:00:00 /usr/bin/zeitgeist-daemon
vskumar 3094 2428 0 21:00 ? 00:00:01 /usr/lib/x86_64-linux-gnu/unity-lens-files/unity-files-daemon
root 4148 1253 0 21:11 ? 00:00:00 docker-containerd-shim –namespace moby –workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/0fe495fc93edee3aaadc7fc0fbf21997f0ca3cde4d7e563aa8c61352a43957dd –address /var/run/docker/containerd/docker-containerd.sock –runtime-root /var/run/docker/runtime-runc
vskumar 4480 3206 0 21:19 pts/19 00:00:00 grep –color=auto daemon
======== You can see the list of processes running currently ========>
So we are successful! to run a container in a detached mode [not in an interactive mode!] using the command: ‘ sudo docker run -d ubuntu’
You can think in an application architecture having multiple servers or SOA running with different services.
You can simulate the same services using the docker containers, by setting up as images by configuring the required services and connect them to the architecture.
This way the advantages of containers can be utilized well. Where different companies are using and implementing their applications into containers architecture by saving lot of infrastructure cost. No hardware or physical servers are required. Lot of space also can be saved. The microservices architecture leads to the same way.
At this point, I would like to stop this session and in the next blog we will see other exercises.