Docker concept and installation setup

Keywords: Linux Docker network CentOS

Blog Outline:

  • 1. Introduction to docker
  • 2. Three core concepts of docker
    1. Mirror
    2. Containers
    3. Warehouses
  • 3. Installation and basic operation of docker
    1. Installation and Startup
    2. Mirror operation of docker
    3. Container operation of docker

1. Introduction to docker

As the most popular project in the open source community, Docker is an open source tool that runs applications in Linux containers, is a lightweight "virtual machine", and all the source code of docker is maintained at https://github.com/docker. Its official website is: https://www.docker.com .

The docker has many advantages which are inseparable from the operating system virtualization itself. Traditional virtual machines need additional hypervisors and virtual machine operating system layers. Doker is the virtualization directly on the operating system level. The working diagrams of the two are as follows:

The differences between docker and virtual machine are as follows:

2. Three core concepts of docker

1. Mirror

The docker image is the basis for creating containers, similar to a snapshot of a virtual machine, which can be interpreted as a read-only template for the docker container engine. For example, a mirror can be a complete centos operating system environment, called a centos image; it can be an application with MySQL installed, called a MySQLMirror, etc.
The docker provides a simple mechanism to create and update existing images, and we can download existing application images from the web for direct use.

2. Containers

A docker's container is a running instance created from a mirror that can be started, stopped, and deleted.Each container created is isolated from each other, invisible to each other, and a platform for security. Containers can be viewed as a simple version of the Linux environment, and docker uses containers to run and isolate applications.

3. Warehouses

The docker repository is used for several storage locations. Once you have created your own image, you can use the push command to upload it to a shared or private repository so that the next time you want to use the image on another machine, you can simply pull it off the repository.

Warehouse registration servers are places where warehouses are stored. They contain multiple warehouses, each of which centrally stores a certain type of mirror and uses different labels to distinguish them.The largest public warehouse now is the docker hub, which stores a large number of mirrors for users to download.

The docker's default storage directory is / var/lib/docker, where the docker's mirrors, containers, logs, and so on are all stored. Large-capacity partitions can be used to store these contents separately, and LVM logical volumes are generally chosen to avoid the shortage of storage directories during the docker's run.

3. Installation and basic operation of docker

1. Installation and Startup

When installing, you must ensure that the server configuration can be connected to the Internet or you can configure your own local yum source.

[root@localhost ~]# yum -y install docker       #Direct Installation
[root@localhost ~]# systemctl start docker     #Start docker service
[root@localhost ~]# systemctl enable docker     #Set to Start-Up Self-Starting
[root@localhost ~]# docker version      #View installed docker versions

2. Mirror operation of docker

(1) Find Mirrors

The docker needs local mirroring before it can run the container. If no local mirroring exists, the docker will try to find it from the default mirror warehouse https://hub.docker.com/

[root@localhost ~]# docker search dhcp     #Search with DHCP as keyword
INDEX       NAME                                           DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/networkboot/dhcpd                    Suitable for running a DHCP server for you...   40                   [OK]
docker.io   docker.io/joebiellik/dhcpd                     DHCP server running on Alpine Linux             14                   [OK]
docker.io   docker.io/gns3/dhcp                            A DHCP container for GNS3 using dnsmasq         2                    [OK]
docker.io   docker.io/instantlinux/dhcpd-dns-pxe           Serve DNS, DHCP and TFTP from a small Alpi...   2                    [OK]
docker.io   docker.io/ictu/dhcpd-tftpd                     dhcpd tftpd container                           1                    [OK]
                         .................#Omit some content

Returns many mirrors containing DHCP keywords, including the name of the mirror (NAME), description (DESCRIPTION), star (STARS), whether officially created (OFFICIAL), and whether actively created (AUTOMATED).The default output will be sorted by star rating, indicating the popularity of the image. When downloading the image, you can refer to this item. The higher the star, the more popular the image is. Whether the official image is an image created and maintained by an official project group or not, which is generally used by an official project group.A single word serves as a mirror name, which we call a base or root mirror.Named mirrors, such as / reinblau/dhcp, indicate mirrors created and maintained by user reinblau of docker hub with a prefix of user name; active resource creation refers to whether users are allowed to verify the source and content of the mirrors.

(2) Download Mirror

Search for mirrors that match your needs and use the docker pull command to download mirrors from the network for local use.
Command format: docker pull repository name [: label]
For docker mirrors, if no label is specified when downloading the image, the latest version of the image in the repository is downloaded by default, either by choosing the label latest or by specifying a label to download a specific version of the image.This label is used to distinguish between mirrored versions.

Download a mirror as follows

[root@localhost ~]# docker pull docker.io/networkboot/dhcpd           #Download a queried image
[root@localhost ~]# docker images      #Query Downloaded Mirrors
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/networkboot/dhcpd   latest              52cbff801df2        5 months ago        105 MB
//The following information can be read from the echo information:
#REPOSITORY: The warehouse the mirror belongs to;
#TAG: Label information for a mirror, marking different mirrors in the same warehouse;
#IMAGE ID: The unique ID number of the image that uniquely identifies the image;
#CREATED: When the image was created;
#SIZE: The size of the mirror
//Users can also get detailed information about the mirror based on its unique ID number.The commands are as follows:
[root@localhost ~]# docker inspect 52cbff801df2      #Get more information about the mirror
#The details of the mirror include the creation time, system version, host name, domain name, user, volume, label, operating system, device ID, and so on.
#To use this image for subsequent work, you can use the docker tag command to add a new tag to the local image.
#Command format: docker tag name: [label] new name: [new label], as follows:
[root@localhost ~]# docker tag docker.io/networkboot/dhcpd dchp:dhcp    #Change name and name
[root@localhost ~]# docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
dchp                          dhcp                52cbff801df2        5 months ago        105 MB
docker.io/networkboot/dhcpd   latest              52cbff801df2        5 months ago        105 MB

(3) Delete the mirror

You will find that the original image is still there, so try deleting the original image!
Use the docker RMI command to delete unnecessary mirrors, specify labels to delete, or specify ID s to delete mirrors
Command format for deleting mirrors: docker RMI repository name: label or docker RMI mirror ID number. When a mirror has more than one label, specifying a label only deletes the specified label in the multiple labels of the mirror, does not affect the image file, it is equivalent to deleting only one label of the mirror, but the image only has one labelBe careful when you have one tag left, and then use the Delete command to completely remove the image.

[root@localhost ~]# docker rmi docker.io/networkboot/dhcpd    #Remove the original mirror label
Untagged: docker.io/networkboot/dhcpd:latest
Untagged: docker.io/networkboot/dhcpd@sha256:fdc7ff6f265249a104f32f1d7aed0aedaf2f2fc62ea10eebf596e2af3b670477

When using the docker RMI command followed by the ID number of the image, you must ensure that the image is not used by the container before it can be deleted. When deleting, the system first deletes all tags pointing to the image, then deletes the image file itself. If the image has been used by the container, it is correct to delete the dependent image firstAll containers, then remove the mirror.

(4) Export Mirror

When you need to migrate an image from one machine to another, you need to save the image in a local file called an export image. You can use the docker Save command to save the image and copy it to another machine.
Command format: docker save -o save the image as a local file
As follows:

[root@localhost ~]# docker images          #Get the image name and label
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
dchp                dhcp                52cbff801df2        5 months ago        105 MB
[root@localhost ~]# docker save -o dhcptest dchp:dhcp      #Export as Local Mirror
[root@localhost ~]# du -sh dhcptest              #Will be exported to the local current working directory
103M    dhcptest

(5) Load Mirror

Copying the exported image from Machine A to Machine B requires that the image be used on Machine B to import the exported file into the mirror library on Machine B. This process is called loading the image.
The command format is (load the mirror guide local mirror library from the file dhcp):

[root@localhost ~]# docker load --input dhcp
#perhaps
[root@localhost ~]# docker load < dhcp

(6) Upload mirror

As more and more mirrors are stored locally, you need to specify a special place to store them - the warehouse. At present, it is more convenient to designate a public warehouse. By default, it is uploaded to the official dockerhub warehouse. You need to register an account that uses the public warehouse. You can use the docker login command to enter the user name, password and mailbox.Complete registration and login, add new tags to the local image before uploading it, and then upload it using the docker push command.
Command format: docker push repository name: label

[root@localhost ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: ljztest      #Enter a registered user name
Password:          #Input password
Login Succeeded                     #Prompt for successful login
[root@localhost ~]# docker push docker.io/ljztest/dhcp     
#When I logged in here to upload, I got an error and found that there was a problem with the mirror warehouse name. I changed the name of the lower warehouse according to the prompt and the upload succeeded.
The push refers to a repository [docker.io/ljztest/dhcp]
8d3d1c857813: Pushed 
37ee4253c76e: Pushed 
b57c79f4a9f3: Pushed 
d60e01b37e74: Pushed 
e45cfbc98a50: Pushed 
762d8e1a6054: Pushed 
testdhcp: digest: sha256:fdc7ff6f265249a104f32f1d7aed0aedaf2f2fc62ea10eebf596e2af3b670477 size: 1569

3. Container operation of docker

Containers are another core concept of docker. Simply put, containers are a running instance of a mirror, an application or set of applications running independently and their necessary running environments, including file systems, system class libraries, shell environments, and so on.The mirror is a read-only template, and the container gives this read-only template an additional writable layer.

(1) Creation and startup of containers

The creation of a docker is the process of loading a mirror into a container, which is very lightweight and can be created or deleted at any time by users.The newly created container is stopped by default and does not run any programs. You need to start the container by initiating a process in one of them that is the only process for the container, so when the process ends, the container will also stop completely.Stopped containers can restart and retain their original modifications.You can create a new container using the docker create command.

1) Create containers
The commands are as follows (-i: to keep the input to the container open, that is, to keep the container running; -t: to assign a pseudo terminal to the docker):

[root@localhost ~]# docker create -it dchp:dhcp /bin/bash     #Create a container and specify a pseudo-terminal
2304f92a815800305804987bcb2ee20aca5f4d651d577427c476554d54171f2d
#If the Create Container command at this time errors "WARNING:IPv4 forwarding is disabled.Network will bot"
#work. ", use vim editor to open/usr/lib/sysctl.d/00-system.conf file and add it
#net.ipv4.ip_forward=1, then restart the network service using the systemctl start network command
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2304f92a8158        dchp:dhcp           "/entrypoint.sh /b..."   8 minutes ago       Created                                 naughty_perlman
#The output information shows the ID number of the container, the loaded image, the running program, creation time, current state, port mapping, container name, and so on.
#The status column found above is create to indicate that the current container is newly created and in a stopped state.

2) Start and stop containers

[root@localhost ~]# docker ps -a                #Find the ID number of the container first
CONTAINER ID        IMAGE               COMMAND                  CREATE
2304f92a8158        dchp:dhcp           "/entrypoint.sh /b..."   10 min
[root@localhost ~]# docker start 2304f92a8158              #At startup, the ID number of the container needs to be specified
2304f92a8158
[root@localhost ~]# docker ps -a         #After querying the status of the container, the status bar becomes UP
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2304f92a8158        dchp:dhcp           "/entrypoint.sh /b..."   23 minutes ago      Up 42 seconds                           naughty_perlman
[root@localhost ~]# docker stop 2304f92a8158        #Stop this container
2304f92a8158
[root@localhost ~]# docker ps -a            #Looking at the status again, the status bar becomes exited
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
2304f92a8158        dchp:dhcp           "/entrypoint.sh /b..."   About an hour ago   Exited (0) 4 seconds ago                       naughty_perlman

3) Enter the container

[root@localhost ~]# docker start 2304f92a8158              #Start this container again
[root@localhost ~]# docker exec -it 2304f92a8158 /bin/bash     #Enter this container
root@2304f92a8158:/# ls  #Looking at the root directory of this container, you can see that the command prompt changed when you entered the container
bin   dev            etc   lib    media  opt   root  sbin  sys  usr
boot  entrypoint.sh  home  lib64  mnt    proc  run   srv   tmp  var
root@2304f92a8158:/# exit       #Exit this container
exit
[root@localhost ~]# 

(2) Export and import of containers

[root@localhost ~]# docker ps -a      #ID number of query container
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2304f92a8158        dchp:dhcp           "/entrypoint.sh /b..."   About an hour ago   Up 6 minutes                            naughty_perlman
[root@localhost ~]# docker export 2304f92a8158>centos7dhcp  #Export to the current working directory and define centos7dhcp as the name
[root@localhost ~]# ls      #View the exported file, the one marked red below is the exported file
anaconda-ks.cfg  'centos7dhcp'  dhcptest  initial-setup-ks.cfg
#Copy the exported file to another server and import it using the docker Import command as a mirror
[root@localhost ~]# scp root@192.168.1.1:/root/centos7dhcp /tmp     #Replicate on another server
root@192.168.1.1's password:                 #Enter the end-to-end user password
centos7dhcp                         100%   84MB  95.2MB/s   00:00    
[root@localhost ~]# cd /tmp
[root@localhost tmp]# ls     #Make sure it's copied over
centos7dhcp
 .............#Omit some content
 [root@localhost tmp]# cat centos7dhcp | docker import - centos7:dhcp     
 #Import file centos7dhcp as local mirror
sha256:e016fa46360492daa9323a0d35bccec76610433f03ba9171fe6d9a5500f823ff
[root@localhost tmp]# docker images | grep centos7        #Determine mirror import success
centos7                  dhcp                e016fa463604        14 minutes ago      84.7 MB

(3) Deletion of containers

You can delete a container that has terminated using the docker RM command.

[root@localhost ~]# docker ps -a         #Or do you need to find out the ID of the container?
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
2304f92a8158        dchp:dhcp           "/entrypoint.sh /b..."   About an hour ago   Up 35 minutes                           naughty_perlman
[root@localhost ~]# docker stop 2304f92a8158       #Stop the container before deleting it
2304f92a8158
[root@localhost ~]# docker rm 2304f92a8158          #Delete Container
2304f92a8158

If you delete a running container, you can force the deletion by adding the -f option, but it is recommended that you stop the container before deleting it.

_________

Posted by Yeti on Sat, 07 Sep 2019 10:15:57 -0700