当前位置:   article > 正文

简单的docker学习 第2章 docker引擎

简单的docker学习 第2章 docker引擎

第2章docker引擎

2.1Docker 引擎发展历程

2.1.1 首发版本架构

Docker 在首次发布时,其引擎由两个核心组件构成:LXC(Linux Container)与 Docker Daemon。不过,该架构依赖于 LXC,使得 Docker 存在严重的问题:

  • 依赖于外部工具,对 Docker 来说,存在着巨大的生存风险

  • LXC 使得 Docker 无法实现跨平台

Docker Daemon 的“大而全”也带来了严重的问题:

  • 版本更新与功能扩展较难
  • 运行较慢,带来性能问题
  • Docker Daemon 运行出现问题,会直接影响容器的运行
  • 不符合软件哲学
2.1.2 Docker0.9 版本架构

​ 从 Docker0.8 版本开始,Docker 使用自研的 Libcontainer 工具替换了 LXC

2.1.3 Docker1.1 版本架构

​ 2017 年 7 月 OCI 基金会发布了两个规范(镜像规范与容器运行时规范)的 OCI1.0 版本。2016 年底发布的 Docker1.1 版本基本遵循了 OCI1.0 版本。从 Docker1.1 版本开始,Docker Daemon 中不再包含任何容器运行时代码,而是将容器运行时单独剥离了出来,形成了 Runc 项目。

2.2 Docker 引擎架构

Docker 引擎是用来运行和管理容器的核心软件,其现代架构由四部分主要组件构成:Docker Client,Dockerd、Containerd 与 Runc。

image-20240704145124659

2.2.1 Docker Client

​ Docker 客户端,Docker 引擎提供的 CLI 工具,用于用户向 Docker 提交命令请求。

2.2.2 Dockerd

​ Dockerd,即 Docker Daemon。在现代 Dockerd 中的主要包含的功能有镜像构建、镜像管理、REST API、核心网络及编排等。其通过 gRPC 与 Containerd 进行通信

2.2.3 Containerd

​ Containerd,即 Container Daemon,该项目的主要功能是管理容器的生命周期。不过,其本身并不会去创建容器,而是调用 Runc 来完成容器的创建。Docker 公司后来将 Containerd 项目捐献给了 CNCF(云原生基金会)

2.2.4 Runc

​ Runc,Run Container,是 OCI(开放容器倡议基金会)容器运行时规范的实现,Runc 项目的目标之一就是与 OCI 规范保持一致。所以,Runc 所在层也称为 OCI 层。这使得 Docker Daemon 中不用再包含任何容器运行时的代码了,简化了 Docker Daemon。Runc 只有一个作用—创建容器,其本质是一个独立的容器运行时 CLI 工具。其在 fork出一个容器子进程后会启动该容器进程。在容器进程启动完毕后,Runc 会自动退出。

2.2.5 Shim

​ Shim(垫片)是实现“Daemonless Container(无 Docker Daemon 与 Container Daemon容器)”不可或缺的工具,使容器与 Docker Daemon 解耦,使得 Docker Daemon 的维护与升级不会影响到运行中的容器。每次创建容器时,Containerd 同时会 fork 出 Runc 进程与 Shim 进程。当 Runc 自动退出之前,会先将新容器进程的父进程指定为相应的 Shim 进程。

除了作为容器的父进程外,Shim 进程还具有两个重要功能:

  • 保持所有 STDIN 与 STDOUT 流的开启状态,从而使得当 Docker Daemon 重启时,容器不会因为 Pipe 的关闭而终止。
  • 将容器的退出状态反馈给 Docker Daemon。

2.3Docker 引擎分类

​ 在安装 Docker 之前需要先了解 Docker 官方对其版本的分类。Docker 的版本分为大版本与小版本。

2.3.1 大版本

​ Docker 从大版本来说,分为三类:Moby、社区版 Docker-CE(Community Edition)和企业版 Docker-EE(Enterprise Edition)。

2.3.2 小版本

​ 从 v1.13.1 之后,Docker 的发布计划发生了变更,每个大版本下都出现了两个小版本 Edge 月版与 Stable 季版。不过,现在的官网中一般只能看到 Stable 版本。

2.4Docker 引擎的安装

​ Docker 可以安装在 Windows、Linux、Mac 等系统中,但生产环境下,服务器使用 Linux中的 CentOS 居多,所以下面就以 Docker 在 CentOS7 中的安装为例来学习 Docker 的安装。官网 https://docs.docker.com/engine/install/centos/中可以看到具体安装方式与安装步骤。

2.4.1 系统要求

​ 我们这里要安装的是 Docker CE 版,且要安装到 CentOS 之中。不过,对于安装 Docker的系统环境还是有要求的。

image-20240704145604166

​ 对于 CentOS 系统的安装主机,无论是传统架构还是 ARM 架构,要求处理器都是 64 位系统。

docker安装手顺地址 https://docs.docker.com/engine/install/centos/

image-20240704145626024

​ 并且 CentOS 要求是 7 及其以上版本

2.4.2 克隆并配置主机
  • 修改主机名:/etc/hostname
  • 修改网络配置:/etc/sysconfig/network-scripts/ifcfg-ens33
  • 查看当前主机版本: cat /etc/redhat-release
  • 查看是否为64位系统: uname -r
2.4.3 安装需要的包
  1. 务必配置阿里的yum源,这样安装Docker的速度就不会太慢

    # 关闭防火墙部分
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 检查防火墙状态
    systemctl status firewalld
    
    # 1、备份备份官方的原yum源的配置
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    
    # 2、下载Centos-7.repo文件
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    # 注意:部分小伙伴可能没有安装wget,需要先安装wget,或者用下面的命令下载repo文件
    curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    
    # 3、清除yum缓存
    yum clean all
    
    # 4、缓存阿里云源
    yum makecache
    
    # 5、测试阿里云源 
    yum list
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
  2. 卸载旧版本的Docker,旧版本的Docker程序被称作Docker或者Docker-engine,如果之前在系统中安装过,那么就卸载掉,当然连同依赖一起卸载了!

    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-selinux \
    docker-logrotate \
    docker-engine-selinux\
    docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  3. 安装yum-utils,它提供了yum-config-manager,同时安装device-mapper-persistent-datalvm2,这些是Docker设备映射器(devicemapper)存储驱动程序所必需的。

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 1

    image-20240705101501325

  4. 使用一下命令来搭建稳定的仓库

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 1

    image-20240705101439365

  5. 安装 docker,以及 docker-cli,安装时间稍长,请耐心等待

    yum install docker-ce docker-ce-cli containerd.io
    
    • 1

    image-20240705101804773

    如果想安装特定版本的Docker CE,可以先列出所有可用的版本,然后选择特定版本进行安装:

    yum list docker-ce --showduplicates | sort -r
    # 下载固定版本docker eg: yum install docker-ce-3:26.1.4-1.el7 docker-ce-cli-1:26.0.4-1.el7 containerd.io
    yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
    
    • 1
    • 2
    • 3

    请将<VERSION_STRING>替换为你想安装的具体版本号。

    image-20240705102848885

    image-20240705103225778

  6. 查看安装版本信息

    docker version
    
    • 1

    image-20240705104223134

2.5 Docker 引擎的启停

2.5.1 启动docker

Docker 是以服务的形式运行在系统中,所以使用 systemctl 来对其进行各种操作。启动docker

systemctl start docker
  • 1
2.5.2 启动成功测试

为了验证 Docker 安装启动成功,一般有两种方式:

  • docker version

    image-20240705104450447

  • 运行hello-world镜像,可以通过运行 hello-world 镜像来验证 Docker 的安装启动成功。当然,当前宿主机中是不存在 hello-world 镜像的,其会首先下载,然后才会运行。如果看到如下输出,则说明 Docker 已经安装启动成功了。如果看不到如下结果,一般都是因为下载超时,需要先完成以下“配置国内加速器”步骤。

    image-20240705104716999

    网络连接失败,后续配置国内加速器再进行尝试

2.5.3 Docker 重启
systemctl restart docker
  • 1
2.5.4 查看 Docker 状态
systemctl status docker	
  • 1

image-20240705105012796

2.5.5 开机自启动 Docker

通过 systemctl start docker 命令仅可以开启 Docker 服务,但每次开机后,都需要开启。可以通过systemctl enalbe docker命令将Docker服务设置为开机自启动服务,即开机后Docker服务无需再开启,其本身就是开启状态。

systemctl enable docker
  • 1

此时再查看 Docker 的状态,可以看到原来的 disabled 变为了 enabled,说明当前 Docker服务已经变为了开机自启动了

image-20240705105516616

2.5.6 Docker 停止
systemctl stop docker
  • 1
2.5.7 关闭开机自启动
systemctl disable docker
  • 1

2.6配置国内加速器

国内镜像中心常用的为阿里云与网易云。在本地 Docker 中指定要使用的国内加速器地址后,就可以直接从国内镜像中心下载镜像了。

2.6.1 配置阿里云加速器

若要配置阿里云加速器,必须首先要有阿里云的账号。登录阿里云后,打开阿里云的容器镜像服务页面 https://cr.console.aliyun.com ,然后找到如下页面,执行相应的命令。

image-20240705110046325

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

执行之后再次执行 docker run hello-world

image-20240705110425429

网易云加速器,不用注册账号信息,直接修改registry-mirrrors地址即可

{
  "registry-mirrors": ["https://hub-mirror.c.163.com"]
}
  • 1
  • 2
  • 3
2.6.2 配置境外镜像
# 使用难兄难弟俄罗斯镜像
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.m.daocloud.io","https://huecker.io","https://dockerhub.timeweb.cloud","https://noohub.ru"]
}
EOF

systemctl daemon-reload
systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.7 Docker 引擎的卸载

对 Docker 的卸载分为三大步

  • yum 移除,通过 yum remove 移除 docker 安装的四个组件

    yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-selinux \
    docker-logrotate \
    docker-engine-selinux\
    docker-engine
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • rm 两个目录

    通过 rm –rf 删除/var/lib 下的 docker 与 containerd 两个目录。这两个目录中存放着镜像、容器、数据卷,它们在前面删除时不能被自动删除,需要手动删除

    rm -rf /var/lib/docker
    rm -rf /var/lib/containerd
    
    • 1
    • 2
  • 还有一些自己编辑、定义的配置文件,需要自己手工删除

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号