The Docker Engine is that the core software that runs and manage containers. we frequently ask it simply as Docker, or the Docker platform. The Docker Engine is modular in design with many swappable components. Where possible, these are supported open standards out lined by the Open Container Initiative (OCI). The Docker Engine is formed from many specialized tools that employment together to make and run container-images, APIs, execution driver, runtime etc.
The major components that structure the Docker Engine are: the Docker client, the docker daemon, container d, and runc. Together, these create and run containers.
The Docker daemon
The docker daemon(dockerd) listen for Docker API requests and manages Docker objects like images, containers, networks, and volumes.
runc often refer as a container runtime. it’s one purpose in life is to make containers.
Containerd act as a bridge between the daemon and runc. It’s helpful to consider containerd as a container supervisor— the component that’s liable for container lifecylce operations such as;
Starting & stopping containers
Pausing & un-pausing them
Destroying the containers
Containerd is meant for one task in life containerd is merely interested container life cycle operations.
Use Bind mounts:
Bind mounts are around since the first days of Docker.Bind mounts have limited functionality compared to the volumes.When you use a bind mount,a file or directory on the host machine is mounted into a container.The file or directory is referenced by its full or relative path on the host machine.By contrast,when you use a volume,a new directory is made within Docker’s storage directory on the host machine,and Docker manages that directory’s contents.
The file or directory doesn’t got to exist on the Docker host already.It is created if it doesn’t yet exist.Bind mounts are very performant,but they believe the host machine’s filesystem having a selected directory structure available.If you’re developing new Docker applications,consider using named volumes instead.You can’t use Docker CLI commands to directly manage bind mounts.
Choose the –v or –mount flag
Originally the -v or –volume flag was used for standalone containers and therefore the –mount flag was used for swarm services.However, starting with Docker 17.06,you can also use –mount with standalone containers.In general, –mount is more explicit and verbose.The biggest difference is that the -v syntax combines all the choices together in one field,while the –mount syntax separates them.Here may be a comparison of the syntax for every flag.
-v or –volume: Consists of three fields,separated by colon characters(:).The fields must be within the correct order,and the meaning of every field isn’t immediately obvious.In the case of bind mounts,the first field is that the path to the file or directory on the host machine.The second field is that the path where the file or directory is mounted within the container.The third field is optional,and may be a comma separated list of options,such as ro,consistent,delegated,cached,z,and z.
–mount:Consist of multiple key-value pairs,separated by commas and every consisting of a =tuple.The –mount syntax is more verbose than -v or –volume,but the order of the keys isn’t significant, and therefore the value of the flag is simpler to know .The type of the mount,which can be bind,volume,or tmfs.This topic discusses bind mounts,so the type is usually bind.The source of the mount.For bind mounts,this is the trail to the file or directory on the Docker daemon host.May be specified as source or src.The destination takes as its value the trail where the file or directory is mounted within the container.May be specified as destination,dst, or target.
The readonly option,if present,causes the bind mount to be mounted into the container as read-only.The bind-propagation option,if present,changes the bind propagation.May be one among rprivate,private,rshared,shared,rslave,slave.The consistency option,if present,may be one among consistent,delegated,or cached.The setting only applies to Docker Desktop for Mac, and is ignored on all other platforms.The –mount flag doesn’t support z or z options for modifying selinux lables.