Docker is an open source software allowing to facilitate the deployment of isolated applications in software containers to be operated in various environments. Docker is a tool often used in development environments in order to solve integration issues (CI) and continuous deployment (CD).
Presentation
Unlike virtual machines relying on a physical infrastructure, Docker affords to mutualize the physical layer and the operating system layer by wrapping the application and its dependencies (libraries, configuration files …). Advantages : only one OS to administrate, all containers are isolated.
Here are pictures of the difference between Container and VM:
A public register maintained by an active community allows Docker to make available containers ready to be quickly operated.
Docker is based on LXC (Linux Containers) and includes the following elements :
Functionality of the Linux kernel to limit, count and isolate resources (CPU, RAM, etc.) used by a process group.
Advanced management of permissions both at the applications’ level and the files system level.
Functionality of the Linux kernel allowing isolation, in order to ensure that a container can not affect another.
Functionality allowing to change a process root, in order to isolate it in a system as a security measure.
Docker provides services to simply perform différent actions: create, edit, publish and operate containers. You often hear about containers, images and DockerFile :
Source file containing instructions, elements to install, it is a configuration file.
Compilation of a DockerFile file to create a portable image, ready to be deployed
Execution of an image, container loading of an image
Installation
In order to install Docker on Debian 8, you only need to go through the management tool for packages :
apt-get update apt-get install docker.io
On Debian 7, it is essentiel to add the source deb http://http.debian.net/debian wheezy-backports main in the file sources.list.
Then we can operate the following commands tu update our source list, install wheezy-backports :
apt-get update apt-get install -t wheezy-backports linux-image-amd64
Install Docker thanks to the following command for script execution :
curl -sSL https://get.docker.com/ | sh
Once Dock installed, you just have to launch the service :
service docker start
Creation of a container
In this example, we will install a container Nginx from the images available in the Docker warehouses :
# docker search nginx
Please think about directing your choice between the description, the popularity and whether it is an official container or not.
We are going to repatriate the official Nginx container image :
# docker pull nginx
We check our image list:
# docker images
We can see that it was successfully repatriated :
REPOSITORY TAG IMAGE ID nginx latest cc1b61406712
We install the container :
# docker run -d -name=MyServerNginx nginx:latest
We check how well the container is installed :
# docker ps -a
This way, you can see your container operated (below is the detail of the command docker ps) then we start our container :
# docker start
By default, Docker uses NAT to match input ports on the server returned to listening ports of different containers with the option -p :
# docker run -p <host_port1>: -p <host_port2>:
The host port matches the port on which you have to contact the host to have access to the service, the container port matches the port to which the request will be redirected at the container’s level.
We are going to create a second container by adding this argument :
# docker run -d -p 1234:80 -name=MyServerNginx2 nginx:latest
You are aware of the service as being active by opening your web browser on http://IP_HOTE:1234
DockerFile
You can create your own container from a configuration file appointed DockerFile.
We are going to create a Debian container and install a server Apache2 accessible from outside.
Here is the DockerFile file’s content
### Image FROM debian:stable ### Information about the container's owner MAINTAINER youradress@mail.com ### Command RUN only used during a container creation (needs a docker build) RUN apt-get update && apt-get upgrade -y && apt-get install -y apache2 ### Creation variable ENV VARIABLE ma-variable ### PORT 80 Open EXPOSE 80 ### We expose the SSH port to be able to connect with the machine EXPOSE 22 ### Command placed once the container is created (does not need a docker build, but a run) ### Command 1st arg 2nd arg CMD [« /usr/sbin/apache2ctl », »-D », »FOREGROUND »]
Now we can create our container from the Dockerfile with this command :
# docker build -t MyApache
We install our container by mapping the port 555 of the host towards the port http of the container :
# docker run -d -p 5555:80 -name=MyServerApache MyApache:latest
From now on, you can check the apache server access from this URL : http://IP_HOTE:5555
Useful commands
The following command can display the running containers list :
docker ps
Container’s identifier
Personal identifier of the container’s image.
Command placed as parameter when the container was created
Date of creation of the container.
Container state.
The different redirections of configured ports.
Random name given to the container, this is customizable thanks to the option -name during the execution docker run.
Here are some useful commands :
### restart a container docker start ### Stop a container docker stop ### List your repatriated images docker images ### Display the container's informations, including the virtual IP interface of the container for instance docker inspect ### Delete all active containers docker rm $(docker ps -a -q) ### Delete a docker image (check none of them is activated) docker rmi ### To directly connect on your container docker run -it /bin/bash
You can find all the docker images on https://hub.docker.com/explore/
You can find all the commands linked to docker in the assistance service :
man docker