1, docker: container based Virtualization (hosting applications to application containers) implements an application level resource isolation and quota.
What is a container?
Container: lightweight Virtualization (sharing the same system kernel). The container is run by the container image.
Advantages: high container density, fast startup, no extra overhead; disadvantages: only in linux operating system
What's the difference between virtualization and containers?
Differences: both pay attention to isolation. Virtualization is to install virtual machines on physical machines and then install a variety of operating systems (commonly used vmword, openstack and kvm are virtualization technologies); container is to directly install the container layer on the linux operating system to achieve various plate isolation
1.docker installation
Method 1: use the official installation script to install automatically
In fact, download an installation script, and then perform the installation (not recommended, because the version installation cannot be selected)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
Method 2: install using yum, not recommended
yum install docker
In this way, you can install it directly from the CD or yum warehouse. The version is lower
Method 3: use yum add source to install the specified version, recommended
(1) Add docker CE source information
yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(2) Update yum source: to cache the package information locally in advance, so as to improve the speed of installing search software
yum makecache fast
(3) Install docker CE
yum -y install docker-ce #The latest version is downloaded by default
① Check which docker versions are available
yum list docker-ce.x86_64 --showduplicates | sort -r
② Download the specified version, the stable version downloaded here
yum -y install docker-ce-17.03.2.ce
Test: docker version / docker -v
[root@manager yum.repos.d]# docker version Client: Docker Engine - Community Version: 19.03.12 API version: 1.40 Go version: go1.13.10 Git commit: 48a66213fe Built: Mon Jun 22 15:46:54 2020 OS/Arch: linux/amd64 Experimental: false Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? #Description the docker service is not enabled [root@manager yum.repos.d]# docker -v Docker version 1.13.1, build 64e9980/1.13.1s
2. Start service: systemctl enable --now docker
Note 1: possible problems during installation:
The reason is that the old version of docker may have been installed before. When installing, an error is reported as follows
Transaction check error: file /usr/bin/docker from install of docker-ce-cli-1:19.03.12-3.el7.x86_64 conflicts with file from package docker-common-2:1.13.1-161.git64e9980.el7_8.x86_64 file /usr/bin/dockerd from install of docker-ce-3:19.03.12-3.el7.x86_64 conflicts with file from package docker-common-2:1.13.1-161.git64e9980.el7_8.x86_64
Resolution: uninstall the old version of the package
yum remove docker-common-2:1.13.1-161.git64e9980.el7_8.x86_64
Install docker again and it will be installed successfully!
Note 2:[ root@manager ~]#Docker -- help command
2, Three cores of docker: image, container and warehouse
Image: similar to virtual machine image
Container: similar to linux system environment, running and isolating applications. When the container starts from the image, docker will create a writable layer at the top layer of the image. The image itself is read-only and remains unchanged
Warehouse: each warehouse stores a certain type of image. There are two types: docker hub shared warehouse and docker registry private warehouse. (build docker warehouse graphically)
3, docker operation
1. Warehouse related orders
docker search image name | Search image from warehouse |
---|---|
docker pull image name | Pull the image from the warehouse. The latest version is pulled by default |
docker push image name | Push image to warehouse[ hub.docker.com You must register an account (docker hub registration account) on the web page to push the image to the warehouse; then use docker login on the command line to log in] |
eg1. Search image centos from warehouse
[root@manager ~]# docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 6061 [OK] ansible/centos7-ansible Ansible on Centos7 130 [OK] consol/centos-xfce-vnc Centos container with "headless" VNC session... 116 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - ... 114 ...................
eg2: pull image busybox from warehouse
[root@manager ~]# docker pull busybox Using default tag: latest latest: Pulling from library/busybox 76df9210b28c: Pull complete Digest: sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209 Status: Downloaded newer image for busybox:latest docker.io/library/busybox:latest
eg3: push the image to the warehouse
hub.docker.com You must register an account (docker hub registration account) on the web page to push the image to the warehouse
docker push Image name docker login
2. Image related commands
docker search image name | Search image |
---|---|
docker pull image name | Pull out image, the latest version pulled by default |
docker image save image name > name.tar.gz | Export image |
docker image rm image name | Delete image (to delete a running image plus - f) |
docker image load -i filename | Import image |
docker image ls | View the current image list |
Docker image inspection image name | View image details |
docker image tag image name: latest image name: tag name | Mark the image, which is usually used to push the image into the warehouse |
eg1: view the current image list, view image details, and view busybox image history
[root@manager ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 1c35c4412082 3 weeks ago 1.22MB [root@manager ~]# docker image inspect busybox [root@manager ~]# docker image history busybox IMAGE CREATED CREATED BY SIZE COMMENT 1c35c4412082 3 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:a84c53d2fe5207d17... 1.22MB
eg2: export image:
Method 1: docker image save image name > path location information( name.tar.gz)
[root@manager ~]# docker image save busybox > busybox1.tar.gz
Method 2: docker image save -o path location information( name.tar.gz )Image name: latest
[root@manager ~]# docker image save -o busybox2.tar.gz busybox:latest
eg3: delete image: docker image rm image name
[root@manager ~]# docker image rm busybox Untagged: busybox:latest Untagged: busybox@sha256:95cf004f559831017cdf4628aaf1bb30133677be8702a8c5f2994629f637a209 Deleted: sha256:1c35c441208254cb7c3844ba95a96485388cef9ccc0646d562c7fc026e04c807 Deleted: sha256:1be74353c3d0fd55fb5638a52953e6f1bc441e5b1710921db9ec2aa202725569 [root@manager ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos 7 b5b4d78bc90c 7 weeks ago 203MB
eg4: import image: docker image load -i path location information
[root@manager ~]# docker image load -i busybox1.tar.gz 1be74353c3d0: Loading layer 1.437MB/1.437MB Loaded image: busybox:latest [root@manager ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 1c35c4412082 3 weeks ago 1.22MB centos 7 b5b4d78bc90c 7 weeks ago 203MB
perhaps
[root@manager ~]# docker image import busybox1.tar.gz busybox:v1 sha256:70fe82f93ddc2f501380d3749e743be3e9afd3d9dfc106ae2e22c92d830f91df [root@manager ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox v1 70fe82f93ddc 6 seconds ago 1.44MB centos 7 b5b4d78bc90c 7 weeks ago 203MB
eg5: mark the image: tag is generally used to push the image into the warehouse
docker image tag image name: latest image name: tag name
[root@manager ~]# docker image tag busybox:latest busybox:v1.1 [root@manager ~]# docker image tag busybox:latest busybox:v1.2 [root@manager ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 1c35c4412082 3 weeks ago 1.22MB busybox v1.1 1c35c4412082 3 weeks ago 1.22MB busybox v1.2 1c35c4412082 3 weeks ago 1.22MB centos 7 b5b4d78bc90c 7 weeks ago 203MB [root@manager ~]# docker image rm busybox:v1.1 busybox:v1.2 Untagged: busybox:v1.1 Untagged: busybox:v1.2 [root@manager ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest 1c35c4412082 3 weeks ago 1.22MB centos 7 b5b4d78bc90c 7 weeks ago 203MB
docker image help command
[root@manager ~]# docker image --help Usage: docker image COMMAND Manage images Commands: build Build an image from a Dockerfile history Show the history of an image import Import the contents from a tarball to create a filesystem image inspect Display detailed information on one or more images load Load an image from a tar archive or STDIN ls List images prune Remove unused images pull Pull an image or a repository from a registry push Push an image or a repository to a registry rm Remove one or more images save Save one or more images to a tar archive (streamed to STDOUT by default) tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE Run 'docker image COMMAND --help' for more information on a command.
3. Container related orders:
docker run image name [- i/-d/-t / – name] | Start container |
---|---|
docker stop container name / container ID | Stop container |
docker kill container name / container ID | Kill running containers |
docker rm container name / container ID | Delete container (add - f to delete running) |
docker start container name / container ID | Activate closed container |
docker ps | View information (status) of running containers |
docker ps -a | View information (status) for all containers |
docker ps -q | View the ID number of the running container |
docker ps -aq | View ID numbers for all containers |
Docker inspection container name / container ID | View details of a container |
Docker exec - shell specified by it container name | Execute the specified command exec on the running container |
eg1: start container
Method 1 (not recommended):
First create a container: docker create image name
Restart container: docker start container name
[root@manager ~]# docker create busybox:latest 47f2de8f995999651498e6f0b58764214817e182ad8eff32b2b0b231f5fd3628 [root@manager ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 47f2de8f9959 busybox:latest "sh" 16 seconds ago Created recursing_galileo [root@manager ~]# docker start recursing_galileo recursing_galileo [root@manager ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@manager ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 47f2de8f9959 busybox:latest "sh" 58 seconds ago Exited (0) 9 seconds ago recursing_galileo
Method 2: docker run image name [- d/-i/-t / – name], the status will be Exited if you enter and exit when you start
[root@manager ~]# docker run -it busybox:latest / # ls bin dev etc home proc root sys tmp usr var / # exit [root@manager ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@manager ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1fcc320d6f11 busybox:latest "sh" 23 seconds ago Exited (0) 10 seconds ago gracious_hopper 47f2de8f9959 busybox:latest "sh" 3 minutes ago Exited (0) 2 minutes ago recursing_galileo
The docker run image name [- d/-i/-t / – name], press CTRL+p, CTRL+Q, and the status is UP
[root@manager ~]# docker run -it busybox:latest / # [root@manager ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 328a8dbff50f busybox:latest "sh" 9 seconds ago Up 8 seconds vigorous_easley
Or execute in the background (- d) to make the status UP [recommended]
[root@manager ~]# docker run -idt --name c1 busybox:latest baafbd0b1a3dfe19692929cac68e29096652c277140ccdc48f2ec8bd331631ac [root@manager ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES baafbd0b1a3d busybox:latest "sh" 10 seconds ago Up 9 seconds c1
eg2: container stopped:
[root@manager ~]# docker stop vigorous_easley vigorous_easley [root@manager ~]# docker stop baafbd0b1a3d baafbd0b1a3d [root@manager ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eg3: kill the running container
[root@manager ~]# docker kill competent_robinson competent_robinson
eg4: activate closed container:
[root@manager ~]# docker start competent_robinson competent_robinson
eg5: View container details:
[root@manager ~]# docker inspect 9f91c7213a7d [ { "Id": "9f91c7213a7dda367f8fe152403eb2b6612c2849bb9a06299e360378db3c9f8e", "Created": "2020-06-25T09:34:09.421984223Z", "Path": "/bin/sh", "Args": [], "State": { "Status": "exited", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 0, "ExitCode": 0,
View the ID number of the running container
[root@manager ~]# docker ps -q f658dc1f9c9f
View ID numbers of all containers
[root@manager ~]# docker ps -aq f658dc1f9c9f 328a8dbff50f baafbd0b1a3d 1fcc320d6f11 47f2de8f9959
eg6: delete container: docker rm container name or container ID
Delete all containers: query all containers IDdocker ps -aq, and add - f to delete the running
[root@manager ~]# docker rm -f `docker ps -aq` f658dc1f9c9f 328a8dbff50f baafbd0b1a3d 1fcc320d6f11 47f2de8f9959 [root@manager ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eg7: execute the specified command exec on the running container:
[root@manager ~]# docker exec -it centos7 /bin/bash [root@73e57bae16bf /]# cat /etc/redhat-release CentOS Linux release 7.8.2003 (Core) [root@73e57bae16bf /]# exit
Query container internal log:
docker logs
4, External access to the docker container: docker run -p (- p represents port mapping); that is, the application is hosted on the application container
1. Pull Mysql image from the warehouse
[root@manager ~]# docker pull mysql:5.6 5.6: Pulling from library/mysql 7d2977b12acb: Pull complete 5fb8400e7f07: Pull complete 234877fbb165: Pull complete 6fe1021f12f3: Pull complete 7e36fe6b53f0: Pull complete 996ec709c11b: Pull complete 5198b7523387: Pull complete cc9bdad4dcc0: Pull complete 380cd37ad979: Downloading 6.446MB/64.2MB d64465acf034: Download complete d4ee6606b3ab: Download complete 380cd37ad979: Downloading 18.26MB/64.2MB 380cd37ad979: Downloading 29.01MB/64.2MB 380cd37ad979: Pull complete d64465acf034: Pull complete d4ee6606b3ab: Pull complete Digest: sha256:2bf1a0a05a6ad437dcac6689e48a9c33774ac92c6213fce2c4196343210592f3 Status: Downloaded newer image for mysql:5.6 docker.io/library/mysql:5.6
2. Start the container MySQL (and set the root password), and set the external port mapping
[root@manager ~]# docker run --name mysql -itd -p 3305:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6 97be89fd63737771d36882d512f86cf484c5518de9a56848d68ca8ed31edc42c
3. Install mysql5.6 externally and check whether port 3305 listens
yum whatprovides mysql
yum install mariadb -y
[root@manager ~]# netstat -ltunp | grep 3305 tcp6 0 0 :::3305 :::* LISTEN 6379/docker-proxy
4. Access mysql container from outside
Method 1: docker exec - it MySQL - uroot - p123456
[root@manager ~]# docker exec -it mysql mysql -uroot -p123456 Warning: Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.48 MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> select version(); +-----------+ | version() | +-----------+ | 5.6.48 | +-----------+ 1 row in set (0.00 sec) mysql> exit Bye
Method 2: mysql-uroot-p-h172.17.0.2
[root@manager ~]# mysql -uroot -p -h172.17.0.2 Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.48 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> exit Bye
Note: external users cannot access mysql directly because they do not have permission