🟧1. Docker 的基本组成
🟠1.1 镜像(image)
镜像是一个只读模板,其中包含创建 Docker 容器的说明,一个镜像可以创建很多容器。镜像相当于容器的"源代码",docker 镜像文件类似于 Java 类模板,而 docker 容器实例类似于 Java 中 new 出来的实例对象。
🟠1.2 容器(Container)
Docker 利用容器(Container)独立运行的一个或一组应用,应用程序或服务运行在容器里面,容器就类似于一个虚拟化的运行环境,容器是镜像的可运行实例。就像是 Java 中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
🟠1.3 仓库(Repository)
仓库(Repository)是集中存放镜像文件(Dockerfile)的场所,类似于 maven 仓库,存放各种 jar 包的地方,github 仓库,存放各种 git 项目的地方。Docker 公司提供的官方 registry 被称为 Docker Hub,存放各种镜像模板的地方。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载,国内的公开仓库包括阿里云 、网易云等。
🟧2. Docker 架构
Docker 采用 C/S 架构。Docker 客户端与 Docker 守护进程对话,守护进程负责构建、运行和分发 Docker 容器的繁重工作。Docker 客户端和守护程序可以在同一系统上运行,或者可以将 Docker 客户端连接到远程 Docker 守护程序,它们之间的通信通过 UNIX 套接字或网络接口实现。另一个 Docker 客户端是 Docker Compose,它允许您使用由一组容器组成的应用程序。
🟧3. 安装 Docker
docker 的安装步骤具体可以参考官网,这里我结合官网给出的步骤以及国内的实际操作的情况,进行简单的介绍。
🟠3.1 准备工作
🔸3.1.1 操作系统需求
想要安装 docker 引擎,首先操作系统必须是 CentOS 7 或者 8 版本,不支持 CentOS 7 以下或测试版本。
查看 Linux 操作系统版本,可以使用命令:
cat /etc/redhat-release
执行命令,即可查看版本,如下图:
此外,必须启用 CentOS-Extras 存储库,此存储库在默认情况下是启用的,但如果禁用了它,则需要重新启用它。其实,这里只要没有动过这个设置,就不用管它了。
🔸3.1.2 卸载旧版本
如果你手上用的是一台新的机器,确定之前没有安装过 docker,那么下面的可以不用看了。
如果安装了旧版本的 Docker 或 Docker-engine,需要卸载它们以及相关的依赖项。
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
如果 yum 提示 “none of these packages are installed”,则表示卸载成功。
🟠3.2 开始安装
安装 docker 的方式有多种,可以选择使用 yum 工具从 docker 仓库下载安装,这样安装和以后的升级任务都非常方便;也可以选择手动地下载 RPM 包,手动地安装和进行以后的升级,这种安装方式主要是针对公司内网限制无法访问外网的情况下使用;还有就是在测试或生产环境中,可以使用自动化的脚本进行安装。
这里官网推荐的是第一种,即使用 yum 工具从 docker 仓库下载并安装,也是我下面要介绍的安装方式,后面几种安装方式交给大家自己再去研究学习。
🔸3.2.1 建立 docker 仓库
在一台新的主机上,第一次安装 docker-engine 之前,需要建立一个 docker 仓库,这样以后可以从仓库安装和升级 docker.
安装 yum-utils 包,它提供 yum-config-manager 工具,执行以下命令:
sudo yum install -y yum-utils
然后,建立稳定仓库,执行以下命令:
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
需要注意的是,在建立稳定仓库时,可能会出现以下报错:
1 [Errno 14] curl#35 - TCP connection reset by peer 2 [Errno 12] curl#35 - Timeout
其中主要原因是因为,docker 服务器在国外,国内访问时可能会因为网络连接问题超时等待。
这时,只需要换成国内的镜像就可以了,例如阿里云镜像:
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
之后,更新 yum 软件包索引,执行以下命令
yum makecache fast
这样做是为了在安装软件包的时候,生成索引缓存,提高安装速度。
🔸3.2.2 安装 docker-engine
安装最新版的 docker-engine(新版本换了个叫法,称为 docker-ce) 和 docker-container,执行以下命令:
sudo yum install docker-ce docker-ce-cli containerd.io
如果想要安装指定版本的 docker-engine,可以先查询当前仓库中可以获取的版本,进行选择并安装,执行以下命令:
yum list docker-ce --showduplicates | sort -r
版本号从高到低列出:
docker-ce.x86_64 3:20.10.9-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.8-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.7-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.6-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.5-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.4-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.3-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.2-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.14-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.14-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.1-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.13-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.12-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.11-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.10-3.el8 docker-ce-stable docker-ce.x86_64 3:20.10.0-3.el8 docker-ce-stable docker-ce.x86_64 3:19.03.15-3.el8 docker-ce-stable docker-ce.x86_64 3:19.03.14-3.el8 docker-ce-stable docker-ce.x86_64 3:19.03.13-3.el8 docker-ce-stable
通过完全限定的包名安装特定的版本,包名(docker-ce)加上版本字符串(第二列),从第一个冒号(:)开始,直到第一个连字符(-)分隔
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
例如,安装 docker-ce-19.03.13 版本,执行以下命令:
sudo yum install docker-ce-19.03.13 docker-ce-cli-19.03.13 containerd.io
🔸3.2.3 启动 docker
安装完成之后,执行以下命令启动 docker:
systemctl start docker
🔸3.2.4 测试
测试是否正确安装了 docker-ce,查看版本:
docker version
打印相关信息:
Client: Docker Engine - Community Version: 20.10.14 API version: 1.41 Go version: go1.16.15 Git commit: a224086 Built: Thu Mar 24 01:47:44 2022 OS/Arch: linux/amd64 Context: default Experimental: true Server: Docker Engine - Community Engine: Version: 20.10.14 API version: 1.41 (minimum version 1.12) Go version: go1.16.15 Git commit: 87a90dc Built: Thu Mar 24 01:46:10 2022 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.5.11 GitCommit: 3df54a852345ae127d1fa3092b95168e4a88e2f8 runc: Version: 1.0.3 GitCommit: v1.0.3-0-gf46b6ba docker-init: Version: 0.19.0 GitCommit: de40ad0
最后,再执行以下命令,运行 hello-world 镜像:
docker run hello-world
打印以下信息:
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.
需要注意的是,我之前已经运行过 hello-world 镜像了,所以会直接显示 “Hello from docker!”,当第一次运行 hello-world 时,仓库里是没有的,所以会自动地从远程仓库 pull hello-world,那么等它自动获取到之后,重新 run hello-world 即可。
🟠3.3 卸载命令
如果想要卸载 docker,可以参考以下命令:
systemctl stop docker yum remove docker-ce docker-ce-cli containerd.io rm -rf /var/lib/docker rm -rf /var/lib/containerd