Docker 专栏文章索引
👉Docker 简介
👉Docker 安装图文教程
👉Docker 镜像概念及操作
👉Dockerfile 深入理解

🟧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:

sudo systemctl start docker

设置开机自启动

sudo systemctl enable docker 

🔸3.2.4 测试

测试是否正确安装了 docker-ce,查看版本:

docker -v

打印相关信息:

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 镜像:

sudo 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,可以参考以下命令:

sudo systemctl stop docker
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐