Docker for devs with hands-on| Part-3

  • Need of the docker.
  • Delivery of Apps in traditional & modern world.
  • Basics of docker, images, containers.
  • Enhancing docker container by installing custom softwares.
  • Launch custom Docker-Image from an existing docker container.
  • Sometimes, we might end up using different spring profiles like development, qa, uat, etc for different environments.
  • Sometimes, the application needs Tomcat to run, but Tomcat won’t start because it’s not correctly configured for your machine.
  • Sometimes, you realize that you haven’t installed the correct Java development kit or you’ve got the wrong version of the JDK. E.g. The application was originally developed on Java 7 and yet we’ve installed Java 1.8.5_12 and the two versions are a mismatch.
  • Say, the application depends on MySQL being installed on this machine. And so you have to install MySQL and then you’ve got to configure the security in the ports.
  • And I’m going on and on and on.
  • A fully configured Java virtual machine.
  • A configured tomcat.
  • Some kind of front end proxy server such as Nginx or Apache.
  • A war file inside that container.
  • And the container can also contain all of the necessary environment variables and configurations that container needs to run.
  • A container is an instance of an image and you instantiate one of these images by simply running. The difference between an image and a container, the image is the entity that we build. And when we run that image, it will become a container at runtime.
  • So, that means you could take a single image and you could run it multiple times, in which case you would end up with multiple containers all running the same image.
  • When we launch a container, the container is running on top of your host operating systems kernel. And actually, the container is actually just a process running on your kernel.
  • So, although a container might feel like a full virtual machine. It’s not a full virtual machine because it doesn’t contain its own operating system.
docker image pull ubuntu
docker container run ubuntu
docker container run -it ubuntu
apt-get update && apt-get install git
docker container ls -a
docker container start 98ff2ff01546
docker container logs 98ff2ff01546
docker container logs -f 98ff2ff01546
docker container exec -it <container_id> bash
apt-cache search jdk
apt-get update && apt-get install -y openjdk-8-jdk
javac -version
  • The changes we make, if any, in this container are going to be transient when we stop and remove that container. Those changes would be gone.
  • But actually, you can take a snapshot of a running container i.e. we’ll take an image from that running container. Below is the command to form the brand new image from the enhanced container.
docker container commit -a “Ubuntu + JDK + Git image” 98 ubuJdkGitAdityaImage
docker container stop 98
docker container ls -a
docker container rm <container_id>
docker container ls -a
docker images
docker container run -it ubu-jdk-git-aditya-image
  • We had ran the container with “-i” option which means interactive mode.
  • We had ran the container with “-t” option which means, we shall connect to the container’s terminal as well.
  • In the fresh container that we just launched, observe that both GIT & JDK are already installed, as we did the same in it’s previous container from which we formed this image.
docker container ls -a
docker container start <container_id>
docker container exec -it <container_id> bash



Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
aditya goel

aditya goel

Software Engineer for Big Data distributed systems