Docker概述

Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。
下面的图片比较了容器技术和传统的虚拟化技术的对比,可见容器时在操作系统的基础上实现虚拟化,传统的虚拟化技术还需要一层guest OS系统做为基础实现。
传统虚拟化和容器技术

Docker的安装

官方文档:https://docs.docker.com/get-docker/
Docker的安装文档清晰明了可以直接去按照他给的步骤一步一步来。
卸载旧版本以及残留

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

设置docker的yum软件仓库

sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装

sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

设置docker开机自启并启动

sudo systemctl enable --now docker

运行一个docker的测试镜像来验证docker的安装

[root@docker ~]# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:10d7d58d5ebd2a652f4d93fdd86da8f265f5318c6a73cc5b6a9798ff6d2b2e67
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Docker的命令

镜像的管理

搜索/检索

docker search 镜像名称

[root@docker ~]# docker search nginx
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        16597     [OK]
bitnami/nginx                                     Bitnami nginx Docker Image                      121                  [OK]
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   39
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   17                   [OK]
rancher/nginx-ingress-controller                                                                  10
ibmcom/nginx-ingress-controller                   Docker Image for IBM Cloud Private-CE (Commu…   4
bitnami/nginx-ldap-auth-daemon                                                                    3
bitnami/nginx-exporter                                                                            2
circleci/nginx                                    This image is for internal use                  2

默认从dockerhub进行搜索镜像

下载/拉取

docker pull 名称:版本

[root@docker ~]# docker pull nginx:1.21.6
1.21.6: Pulling from library/nginx
c229119241af: Pull complete
2215908dc0a2: Pull complete
08c3cb2073f1: Pull complete
18f38162c0ce: Pull complete
10e2168f148a: Pull complete
c4ffe9532b5f: Pull complete
Digest: sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Status: Downloaded newer image for nginx:1.21.6
docker.io/library/nginx:1.21.6

如果不加版本的话则拉取latest版本即最新版本

镜像列表

docker images
docker image ls

[root@docker ~]# docker images
REPOSITORY                                                        TAG       IMAGE ID       CREATED        SIZE
nginx                                                             1.21.6    12766a6745ee   10 days ago    142MB
rancher/mirrored-flannelcni-flannel                               v0.17.0   9247abf08677   5 weeks ago    59.8MB
rancher/mirrored-flannelcni-flannel-cni-plugin                    v1.0.1    ac40ce625740   2 months ago   8.1MB
registry.aliyuncs.com/google_containers/kube-apiserver            v1.23.0   e6bf5ddd4098   4 months ago   135MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.23.0   37c6aeb3663b   4 months ago   125MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.23.0   56c5af1d00b5   4 months ago   53.5MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.23.0   e03484a90585   4 months ago   112MB
registry.aliyuncs.com/google_containers/etcd                      3.5.1-0   25f8c7f3da61   5 months ago   293MB
registry.aliyuncs.com/google_containers/coredns                   v1.8.6    a4ca41631cc7   6 months ago   46.8MB
registry.aliyuncs.com/google_containers/pause                     3.6       6270bb605e12   7 months ago   683kB

五列数据分别代表镜像名称、镜像版本、镜像id、拉取时间、镜像大小

镜像标签

docker tag [imagesID] 改后名称:改后tag

[root@docker ~]# docker tag nginx:1.21.6 mynginx:1.21.6
[root@docker ~]# docker images |grep nginx
mynginx                                                           1.21.6    12766a6745ee   10 days ago    142MB
nginx                                                             1.21.6    12766a6745ee   10 days ago    142MB

镜像删除

docker rmi 镜像id

[root@docker ~]# docker rmi mynginx:1.21.6
Untagged: mynginx:1.21.6

镜像导出

docker save 镜像id/镜像名 > 名字.tar

[root@docker ~]# docker save nginx:1.21.6 > nginx-v1.21.6.tar
[root@docker ~]# ls
nginx-v1.21.6.tar

镜像导入

docker load < 包名

[root@docker ~]# docker rmi nginx:1.21.6
Untagged: nginx:1.21.6
Untagged: nginx@sha256:2275af0f20d71b293916f1958f8497f987b8d8fd8113df54635f2a5915002bf1
Deleted: sha256:12766a6745eea133de9fdcd03ff720fa971fdaf21113d4bc72b417c123b15619
Deleted: sha256:3ea962f6f388096ab9798790d363fc6f9c779c924a5eddf5c699d8da080114f7
Deleted: sha256:091a2aef7242e42505b69f1ad027d6a442cfce2403e260ac914f0fd6cc2d275f
Deleted: sha256:4e72a31f1cd6fd655cc0826c91e886967b6e965e13ac21f31f9f66c27a3b7732
Deleted: sha256:e3d1cdf9772a260b3e81a22c1940d63ac45dfe67720f78f00ca73834d9498934
Deleted: sha256:af40da71a8618ea9cbcdc333d5e60bd5b6df820f0d07a55f7c9a1c21fd930095
Deleted: sha256:608f3a074261105f129d707e4d9ad3d41b5baa94887f092b7c2857f7274a2fce
[root@docker ~]# docker load < nginx-v1.21.6.tar
608f3a074261: Loading layer [==================================================>]   83.9MB/83.9MB
ea207a4854e7: Loading layer [==================================================>]     62MB/62MB
33cf1b723f65: Loading layer [==================================================>]  3.072kB/3.072kB
5c77d760e1f4: Loading layer [==================================================>]  4.096kB/4.096kB
fac199a5a1a5: Loading layer [==================================================>]  3.584kB/3.584kB
ea4bc0cd4a93: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:1.21.6
[root@docker ~]# docker images |grep nginx
nginx                                                             1.21.6    12766a6745ee   10 days ago    142MB

容器的管理

创建容器