赞
踩
Docker 在首次发布时,其引擎由两个核心组件构成:LXC(Linux Container)与 Docker Daemon。不过,该架构依赖于 LXC,使得 Docker 存在严重的问题:
依赖于外部工具,对 Docker 来说,存在着巨大的生存风险
LXC 使得 Docker 无法实现跨平台
Docker Daemon 的“大而全”也带来了严重的问题:
从 Docker0.8 版本开始,Docker 使用自研的 Libcontainer 工具替换了 LXC
2017 年 7 月 OCI 基金会发布了两个规范(镜像规范与容器运行时规范)的 OCI1.0 版本。2016 年底发布的 Docker1.1 版本基本遵循了 OCI1.0 版本。从 Docker1.1 版本开始,Docker Daemon 中不再包含任何容器运行时代码,而是将容器运行时单独剥离了出来,形成了 Runc 项目。
Docker 引擎是用来运行和管理容器的核心软件,其现代架构由四部分主要组件构成:Docker Client,Dockerd、Containerd 与 Runc。
Docker 客户端,Docker 引擎提供的 CLI 工具,用于用户向 Docker 提交命令请求。
Dockerd,即 Docker Daemon。在现代 Dockerd 中的主要包含的功能有镜像构建、镜像管理、REST API、核心网络及编排等。其通过 gRPC 与 Containerd 进行通信
Containerd,即 Container Daemon,该项目的主要功能是管理容器的生命周期。不过,其本身并不会去创建容器,而是调用 Runc 来完成容器的创建。Docker 公司后来将 Containerd 项目捐献给了 CNCF(云原生基金会)
Runc,Run Container,是 OCI(开放容器倡议基金会)容器运行时规范的实现,Runc 项目的目标之一就是与 OCI 规范保持一致。所以,Runc 所在层也称为 OCI 层。这使得 Docker Daemon 中不用再包含任何容器运行时的代码了,简化了 Docker Daemon。Runc 只有一个作用—创建容器,其本质是一个独立的容器运行时 CLI 工具。其在 fork出一个容器子进程后会启动该容器进程。在容器进程启动完毕后,Runc 会自动退出。
Shim(垫片)是实现“Daemonless Container(无 Docker Daemon 与 Container Daemon容器)”不可或缺的工具,使容器与 Docker Daemon 解耦,使得 Docker Daemon 的维护与升级不会影响到运行中的容器。每次创建容器时,Containerd 同时会 fork 出 Runc 进程与 Shim 进程。当 Runc 自动退出之前,会先将新容器进程的父进程指定为相应的 Shim 进程。
除了作为容器的父进程外,Shim 进程还具有两个重要功能:
在安装 Docker 之前需要先了解 Docker 官方对其版本的分类。Docker 的版本分为大版本与小版本。
Docker 从大版本来说,分为三类:Moby、社区版 Docker-CE(Community Edition)和企业版 Docker-EE(Enterprise Edition)。
从 v1.13.1 之后,Docker 的发布计划发生了变更,每个大版本下都出现了两个小版本 Edge 月版与 Stable 季版。不过,现在的官网中一般只能看到 Stable 版本。
Docker 可以安装在 Windows、Linux、Mac 等系统中,但生产环境下,服务器使用 Linux中的 CentOS 居多,所以下面就以 Docker 在 CentOS7 中的安装为例来学习 Docker 的安装。官网 https://docs.docker.com/engine/install/centos/中可以看到具体安装方式与安装步骤。
我们这里要安装的是 Docker CE 版,且要安装到 CentOS 之中。不过,对于安装 Docker的系统环境还是有要求的。
对于 CentOS 系统的安装主机,无论是传统架构还是 ARM 架构,要求处理器都是 64 位系统。
docker安装手顺地址 https://docs.docker.com/engine/install/centos/
并且 CentOS 要求是 7 及其以上版本
务必配置阿里的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
卸载旧版本的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
安装yum-utils
,它提供了yum-config-manager
,同时安装device-mapper-persistent-data
和lvm2
,这些是Docker设备映射器(devicemapper)存储驱动程序所必需的。
yum install -y yum-utils device-mapper-persistent-data lvm2
使用一下命令来搭建稳定的仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 docker,以及 docker-cli,安装时间稍长,请耐心等待
yum install docker-ce docker-ce-cli containerd.io
如果想安装特定版本的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
请将<VERSION_STRING>替换为你想安装的具体版本号。
查看安装版本信息
docker version
Docker 是以服务的形式运行在系统中,所以使用 systemctl 来对其进行各种操作。启动docker
systemctl start docker
为了验证 Docker 安装启动成功,一般有两种方式:
docker version
运行hello-world镜像,可以通过运行 hello-world 镜像来验证 Docker 的安装启动成功。当然,当前宿主机中是不存在 hello-world 镜像的,其会首先下载,然后才会运行。如果看到如下输出,则说明 Docker 已经安装启动成功了。如果看不到如下结果,一般都是因为下载超时,需要先完成以下“配置国内加速器”步骤。
网络连接失败,后续配置国内加速器再进行尝试
systemctl restart docker
systemctl status docker
通过 systemctl start docker 命令仅可以开启 Docker 服务,但每次开机后,都需要开启。可以通过systemctl enalbe docker命令将Docker服务设置为开机自启动服务,即开机后Docker服务无需再开启,其本身就是开启状态。
systemctl enable docker
此时再查看 Docker 的状态,可以看到原来的 disabled 变为了 enabled,说明当前 Docker服务已经变为了开机自启动了
systemctl stop docker
systemctl disable docker
国内镜像中心常用的为阿里云与网易云。在本地 Docker 中指定要使用的国内加速器地址后,就可以直接从国内镜像中心下载镜像了。
若要配置阿里云加速器,必须首先要有阿里云的账号。登录阿里云后,打开阿里云的容器镜像服务页面 https://cr.console.aliyun.com ,然后找到如下页面,执行相应的命令。
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
执行之后再次执行 docker run hello-world
网易云加速器,不用注册账号信息,直接修改registry-mirrrors地址即可
{
"registry-mirrors": ["https://hub-mirror.c.163.com"]
}
# 使用难兄难弟俄罗斯镜像
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
对 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
rm 两个目录
通过 rm –rf 删除/var/lib 下的 docker 与 containerd 两个目录。这两个目录中存放着镜像、容器、数据卷,它们在前面删除时不能被自动删除,需要手动删除
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
还有一些自己编辑、定义的配置文件,需要自己手工删除
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。