Getting Started with Docker
A Docker is a kind of container. A container is an object or a component that has other objects and containers within them. Docker is a recent container technology which is popular because of its abilities in fetching many applications from servers. Docker is also used as package for numerous programs. Docker is a container which is famous in data centers and cloud storages. The software companies are beginning to adopt Docker technology from virtual machines at a remarkable rate. Docker is an open source technology and that is another reason for major companies to adopt this container technology. Dockers make use of shared operating systems.
Docker versus Virtual Machines
A virtual machine is a separate computer (guest computer) which runs above the host computer. It is lying above the virtualization layer. Docker, on the other hand is isolated from the host machine but shares the host computer’s operating system and libraries. The virtual machines are based strongly on virtual hardware technology and have bulk system requirements. The shared OS technique in containers (Dockers) makes them more efficient than the virtual machines. You need not use virtualization of hardware. Just one Linux instance is enough for resting the containers on top of it. You can thus overcome bulk system requirements and manage data in a small capsule technology using Dockers. A container technology can contain about 5-6 times more application instances than the virtual machines like Xen or KVM. Docker has its own set of file systems, processor, RAM, storage space, etc unlike Virtual Machines. To simplify, the key difference between virtual machines and Dockers is that the virtual machines make use of the entire system resources of the host whereas the Dockers will use only the kernel or the operating system of the host.
Docker Elements and Docker Parts
The Docker contains many parts and elements. The parts are the applications and the elements are used by these parts. The Docker parts and elements lie on top of the libraries, functionalities and the frameworks.
Major Docker Parts
1. Docker daemon: It is used for managing docker containers such as LCX on the host system in which the Docker runs.
2. Docker image index: This is a public or a private repository which is used for storing docker images.
3. Docker CLI: This is used to make commands and also for communicating with the docker daemon.
Major Docker Elements
1. Docker containers: The Docker containers are directories that contain all parts of your application.
2. Docker files: These are the scripts which automates the compiling of images.
3. Docker images: These contain various snapshots or images of containers or Ubuntu images.
The complete process of making portable applications using Docker depends entirely on shipping of containers. Docker containers are mainly directories which are packaged like other directories and are used across various host machines and various platforms. The Docker containers are thus shared across host machines. For example: tar-archives. The major dependency is having dockers installed in the host machines where the dockers run. The containment is achieved through LXC or Linux Containers.
Linux containers or LXC
Linux containers are a group of different kernel or operating system level characteristics that allows managing various resources and applications which are mixed within their own platform. By taking advantage of various features including cheroots, cgroups, namespaces and SELinux profiles, the Linux Container has application process which will manage limited resource types, and defending from reaching their own file systems.
The Docker containers will use Linux containers or LXC. The various features of Docker containers are:
- Portability of the application
- Isolation of application processes
- Preventing the containers from accessing outer resources
- Resource consumption management
The features are not limited to the above. The docker containers need fewer resources than the virtual machines which are helpful in isolating applications.
The docker containers never allow:
- Mingling up with other process
- It never allows dependency hell
- Docker containers do not work on various systems
- Docker containers never allow vulnerability to external attacks and never misuse system resources
The docker containers are dependent on Linux containers. Technically, these containers are like system directories but unlike directories the containers are formatted and wellshaped. The docker containers enable application portability and gradual building of the containers.
Each docker container is layered on top resembling onions and each step within a container involves topping another block over the old one. This really gets translated to simple format inside file system. Many configurations and tools are helpful in making the set-up work harmoniously. A very good example for this is union file system.
The major advantage of docker containers is flexibility in comfortable launching and creation of many new images and containers, which are light-weighted. The light-weight nature of these containers is due to their layered and gradual built-up. As the containers are dependable on file concepts, performance roll-back and snapshots are done easily in no time and never pose burden on resources. For example: version control systems or VCS.
The base for every docker container is the docker image element on top of which other layers are built.
Docker images form base of the container and only from here the other layers begin to form. These are same as kernel disk images that are helpful in running applications on desktop computers or servers.
These Ubuntu base images are useful in smooth and continuous portability of applications across various systems. These constitute a rigid, consistent and reliable base with all that is necessary for running applications. If everything is self-contained and the system level modification risks are avoided, the docker container will become resistance to exposures outside which will prevent dependency hell.
When more layers like applications and tools gets added on top of the docker images, the new images get committed to ongoing changes. When a new docker container is created form the updated image, the processing will start from where it was left-off.
When you work with docker containers, the union file system is useful in bringing together all as a single entity.
The docker images are started explicitly in docker CLI for creating the new containers or they can be defined inside dockerfile for immediate and automatic image build-up.
The Docker files are blocks of scripts which contains sets of directions, instructions and commands that are started (executed) from docker image (new image). Each command of execution is layered as a new product. This is helpful in building the end product.
They thus form a replacement of the traditional manual or repeated process of update. When a docker file ends execution, you will end with image formation which is useful for creating new containers.
After installing docker, the initial interaction and usage with docker is simple and clear. After installation of docker, the docker daemon would be running in the background. If you cannot find docker daemon, you can use commands to run it.
For running docker daemon the following command is used: sudo docker -d &
Syntax for usage:
If you are using docker through CLI, a set of commands and options are passed followed
by parameters. For working, docker needs sudo user privilege:
sudo docker [option] [command] [arguments]
Basic Docker Commands
Below listed commands are given as a user guide for getting overall conception about working using docker. The very easiest way of getting used up with docker is practicing it on VPS. Using docker, you could easily move forward and save your current progress comfortably.
To begin, let us see all the docker commands available.
If you wish to view all available commands in docker, use the following command: sudo docker
Listed below is the list of all possible commands available in docker 0.7.1:
diff – This command will inspect for all changes in file system of docker container
events – Used to retrieve real time occurrences from the server
history – It will display image history
images – Used to list all available images
load – Used for loading images from tar archive
login – To login or register with docker registry server
logs – To retrieve logs of a docker container
port – Used to lookup NAT-ed, public-facing port to PRIVATE_PORT
cp – Used for copying files and folders from docker container’s file system to the host
kill – Used to kill the currently running docker container
insert – Used for inserting file in docker image
import – From tarball contents, a new file system is created
info – Used for displaying throughout the system-information
inspect – Used for returning low-level information from the container
attach – Used for attaching things to a running container
build – Used for building a docker container from any Dockerfile
commit – Used for creating new docker image making use of changes in container
export – Used for streaming the container contents as tar archive
tag – Used to tag images to docker repository
pull – Used to get repository or docker image from the docker registry server
top – Used to lookup the currently running process of a docker container
version – Show to display version information of docker
wait – It will block the execution until a docker container stops and then it will print exit code
push – Used to push or insert repository or image to docker registry server
restart – Used to restart running docker container
start – Used to start a stopped docker container
stop – Used to stop the running docker container
search – Used to search or browse for images using docker index
ps – It will list all the available docker containers
rm – Used for removing one or more docker containers
rmi – Used to remove one or more docker images
run – Used to run docker commands in docker container
save – Used to save docker image to tar archive
Using Docker Images
As discussed earlier, the main note for working with any docker containers is by using docker images. There are many free form images which are shared in docker image index and also CLI which allows easy access for querying docker image repositories and also for downloading new docker images.
If you want you may even share your own images in docker image index. PUSH command is used for this purpose.
Downloading the Docker Image (PULL)
If you wish to create or build a docker container, to begin, you are supposed to have the image presence in the host system where docker container persists. If you want to download new images, PULL command is used for this purpose, followed by ‘search’.
Listing of Docker Images
All available lists of docker images, including the saved or committed ones should be listed by using the docker command, “images”. This command will retrieve the all possible list of available images:
#Usage: sudo docker images
Executing or Saving Changes to the Docker Image
If you are continuously working with containers and adding to its performances like downloading files, installing software, configuring software, etc, in order to maintain its particular state, you are supposed to save or commit the changes. Committing or saving the state ensures that you can continue this next time from where you left previously.
# Usage: sudo-docker commit [ID of the container] [name of the image]
Sudo-docker commit 7dba9f429b89 self_img
Sharing or Pushing Docker Images
In order to share the docker image from your docker container to outside, you need to use ‘PUSH’ command so that it is enlisted in docker index list and from here; others may download and utilize these images.
Use need to save or execute all the changes to docker images.
# Usage – Sudo-docker push [name of user/ID or image]
Sudo-docker push xxxxx/my_selfie_image