知识点2给大家介绍了,硬件辅助虚拟化的KVM,但实际使用率来讲它没有Docker高,原因是显而易见的KVM它不能超卖,而国内的云计算收益主要依赖超卖,因此这个时候软件虚拟化就显得更经济

docker的控制核心是容器,但它本身是容器运行时工具的一种。Docker是早期发展项目(2013年),现已成为最广泛使用的容器引擎技术。随着容器生态繁荣,出现了containerd、rkt、Kata Container、CRI-O等多种运行时工具。不同工具功能各异,有些仅运行容器,有些还提供镜像管理功能

根据提供的功能不同,分为低层运行时和高层运行时,两类运行时需配合工作,不是独立运行的。低层运行时工具负责与宿主机操作系统直接交互,根据指定镜像运行容器进程,并管理容器的整个生命周期,比如负责执行设置容器Namespace、Cgroups等基础操作。高层运行时负责镜像的下载、转换等准备工作,专注于镜像格式、解包和管理,为开发者提供管理API

在早期对于服务器虚拟化的使用,有过一个流派,基于Windows server系统+VMware组成服务器集群,但是后期由于这样的使用方式维护成本相当高,比如服务器的序列、服务器台账以及服务器与服务器之间的切换等等,诸如此类的问题往往需要人工去主导,所以这种流派渐渐的泯灭消失在商用环境中了,如今只会在一些学习教培环境下见到这样的环境

大多数商用环境中,所使用的虚拟化技术通常就是linux+docker+k8s,至于k8s较新版本弃用docker这个事情后面知识点会提及,总之好处是docker将虚拟化的使用变得更简洁更轻量化,大大的简化了运维成本,而k8s是后面我们要介绍的一个东西,它其实是一个容器或者虚拟化的脚手架,这个脚手架的作用就是用来解决服务器的序列、服务器故障切换等等的运维问题,它的运行的核心是基于逻辑单元pod,你可以把pod看成我们开发好的一个服务包,一个pod里面包含着各种对应的资源,最核心的当然就是容器或者虚拟机

言归正传,Docker它的本质是将某个服务做成镜像,用的时候实例化一个容器环境,有点开箱即用的味道。最直观的好处就是当我们开发一个东西后,拿到它的人不在需要一点一点的复刻运行环境,只需要拿到我们提供的Docker镜像就可以直接运行。另一点好处启动快,我们在开发中常常用到VMware,但虚拟机实例启动一次往往是分钟级的,而Docker运行的虚拟容器的重启是秒级的,虚拟容器它本质上是一个被隔离的进程,其中运行了Docker镜像的实例对象

Docker的核心三大要素分为镜像、容器、仓库,其中镜像就和我们安装系统的ISO一个意思,是实例化容器时的模板。容器是镜像的实例。仓库是存放镜像的地方。从架构组成上来讲docker由runc(底层运行时)、containerd(高层运行时)、dockerd(守护进程)三部分组成,分别负责容器生命周期、镜像管理、客户端接口及API

在这里插入图片描述

安装docker需要使用CentOS 7 操作系统,与RHEL7相同,也可在国产化系统如麒麟、欧拉上使用。有两个版本系列。Docker-ce叫社区版,免费版本,适合个人开发者测试使用。Docker-ee,企业版,收费版本,提供1个月免费试用,2020年曾因国际政治原因限制中国企业使用。本博客教程使用26.1.4,这是写博客时的最新版,但实际工作中按需使用20.10.x等特定版本

第一步:清空旧Docker依赖,如果之前安装过

yum remove -y docker* docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

第二步:安装Docker

先安装所需要的依赖

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

添加Docker的yum下载源,这里用阿里的。如果阿里镜像保存403,一般是因为你所在的网络访问太多被屏蔽了,换一个网就好了

wget -O /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#如果阿里镜像报错403就用华为的
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

更新yum缓存

yum makecache fast

安装,默认是最新版,如果你需要指定版本则运行如:yum -y install docker-ce-<版本号> docker-ce-cli-<版本号>

yum install -y docker-ce

安装进程接收运行下面的命令,如果正常输出则安装成功

docker -v

在这里插入图片描述

第三步:Docker的启动和关闭

启动docker:systemctl start docker

查看状态:systemctl status docker

停掉服务:systemctl stop docker

希望加入开机启动项,则运行:systemctl enable docker

第四步:默认时,Docker的拉取的是官方的Docker Hub镜像仓库,可是坏就坏在那是个国外网站,慢的出奇,所以要换成国内的。换的时候有个注意点,24年7月以后路人用户不能用阿里docker镜像加速服务器了。注意只是不让路人用户用阿里镜像加速器了,公共镜像资源 registry.cn-hangzhou.aliyuncs.com 开头的镜像还可以正常用
在这里插入图片描述

如果你用的是阿里云下的产品,比如云服务器实例,配置的时候首先访问阿里云:https://promotion.aliyun.com/ntms/act/kubernetes.html,阿里云的登录可以使用你的淘宝账号登录,不是非要注册,无论你用什么必须要登录一个账号。随后访问阿里的容器Hub控制台:https://cr.console.aliyun.com/cn-hangzhou/instances。其实你百度阿里云首页,搜索docker镜像加速器也能找到入口
在这里插入图片描述

在下面有四类操作系统的操作文档,选择CentOS的并按照文档操作

[root@hdp3 ~]# mkdir -p /etc/docker
[root@hdp3 ~]# tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://你账号的专属串码.mirror.aliyuncs.com"]
}
EOF
[root@hdp3 ~]# systemctl daemon-reload
[root@hdp3 ~]# systemctl restart docker

如果你不是阿里云用户,你就老老实实的跟着下面的步骤用公网上能免费用的加速镜像服务器就行

第五步:修改本地镜像存放路径,就是本地仓库的地址,用来保存下载的镜像,因为默认的路径比较小,你需要自己准备一个容量充足的路径地址

vi /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://docker.registry.cyou",
    "https://docker-cf.registry.cyou",
    "https://dockercf.jsdelivr.fyi",
    "https://docker.jsdelivr.fyi",
    "https://dockertest.jsdelivr.fyi",
    "https://mirror.aliyuncs.com",
    "https://dockerproxy.com",
    "https://mirror.baidubce.com",
    "https://docker.m.daocloud.io",
    "https://docker.nju.edu.cn",
    "https://docker.mirrors.sjtug.sjtu.edu.cn",
    "https://docker.mirrors.ustc.edu.cn",
    "https://mirror.iscas.ac.cn",
    "https://docker.rainbond.cc",
    "https://ghcr.io",
    "https://ghcr.nju.edu.cn",
    "https://docker.1ms.run",
    "https://hub-mirror.c.163.com",
    "https://registry.cn-hangzhou.aliyuncs.com"
  ],
  "data-root": "/opt/docker",
  "dns":["8.8.8.8", "114.114.114.114"],
  "max-concurrent-downloads": 10,
  "max-concurrent-uploads": 5
}

第六步:检查,运行如下命令

systemctl daemon-reload
systemctl restart docker
docker info

docker info的输出中你要注意看Docker Root DirRegistry Mirrors是不是你设置好的。使用后期当你修改本地仓库路径时,对于已经有过使用的容器,你需要手动把源本地仓库下的所有内容cp到新的路径下


docker公网仓库中有一个为新手准备好的hello world镜像,你只需要执行run命令即可自动拉取并启动

docker run hello-world

这里额外说一个问题,如果你部署docker的服务器有防火墙,比如本篇复用了知识点2安装kvm的宿主机,由于防火墙需要开启,所以要注意防火墙的影响,不过前面配置了网卡伪装和linux路由转发,正常是不影响docker的。还有!!!绝对不要看网上其他资料轻易的对docker和防火墙zone策略配置做更改,会导致极其恶心的报错

言归正传,run是Docker的容器运行命令,它的作用就相当于Java的new关键字一样,镜像视为类,实例化出一个容器对象。我们可以通过日志看一下它干了什么

[root@node1 docker]# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
78445dd45222: Pull complete 
Digest: sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7
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.
 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://cloud.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/

在输出的日志中Unable to find image 'hello-world:latest' locally是告诉你docker现在本地仓库里没有找到hello-world这个镜像,且默认为最新版本。后面的Pull是告诉你在远程镜像库里面找到了该镜像,并开始下载,Digest和Status的输出告诉你下载结束并开始运行容器,后面的输出都是这个镜像启动时的输出日志,由镜像内部决定

如果你输入了一个哪里都找不到的镜像,则返回失败。

[root@hdp3 ~]# docker run hello-worlddhuehd
Unable to find image 'hello-worlddhuehd:latest' locally
docker: Error response from daemon: pull access denied for hello-worlddhuehd, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐