Centos7.9系统下docker安装

Docker技术原理

Docker使用Google公司推出的Go语言进行开发实现的,基于Linux内核的Cgroups,Namespace以及AUFS类的UnionFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。最初实现是基于LXC,从Docker 0.7以后开始去除LXC,转而使用自行开发的Libcontainer,从Docker 1.11开始,则进一步演进为使用RunC和Containerd。

(1)Cgroups

Cgroups即为Control groups,其作用就是在Linux中限制某个或者某些进程的分配资源。在group中,有分配好的特定比例的CPU时间、IO时间、可用内存大小等。Cgroups是将任意进程进行分组化管理的Linux内核功能。最初由Google的工程师提出,后来被整合进Linux内核中。

(2)Namespace

命名空间(namespace)是Linux中用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。Linux主要有7种不同的命名空间,包括CLONE_NEWCGROUP、CLONE_NEWIPC、CLONE_NEWNET、CLONE_NEWNS、CLONE_NEWPID、CLONE_NEWUSER和 CLONE_NEWUTS,通过这7个选项能在创建新的进程时设置新进程应该在哪些资源上与宿主机器进行隔离。Docker就是通过Linux的Namespaces对不同的容器实现隔离的。

(3)AUFS

AUFS(Another Union File System),是一个能透明覆盖一或多个现有文件系统的层状文件系统,支持将不同目录挂载到同一个虚拟文件系统下的文件系统,可以把不同的目录联合在一起,组成一个单一的目录。这是一种虚拟的文件系统,文件系统不用格式化,直接挂载即可。Docker则一直在用AuFS作为容器的文件系统。当一个进程需要修改一个文件时,AuFS创建该文件的一个副本。AuFS可以把多层合并文件系统的单层表示。这个过程称为写入复制(copy on write)。AuFS允许Docker把某种镜像作为容器的基础。使用AuFS的另一个好处是Docker的版本容器镜像能力,每个新版本都是一个与之前版本的简单差异改动,有效地保持镜像文件最小化。

因此,基于Linux命名空间(Namespaces)、控制组(Cgroups)和AUFS三大技术才支撑了目前Docker的实现,也是Docker能够出现的最重要的原因。

Docker环境准备

注:本实验所有系统均在虚拟机环境下

安装CentOS7.9系统,并配置网卡。(需要虚拟机可以ping通网络)

bash 复制代码
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="1cd204fc-e6eb-406c-adb3-65fab9c99b7e"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.75.130
PREFIX=24
GATEWAY=192.168.75.2
DNS1=114.114.114.114

配置YUM源

我这里是挂载了/dev/sr0至/opt/centos目录下,这个目录需要创建,或者将sr0挂载至/mnt目录下,再将这些文件复制到/opt/centos目录下,都是可以的。(之所以需要这一步是因为刚安装好的系统yum无法使用,所以需要进行这一步操作,使yum工具可以使用)

bash 复制代码
[root@localhost ~]# mv /etc/yum.repos.d/* /media
[root@localhost ~]# vim /etc/yum.repos.d/yum.repo
[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0

完成后可以使用yum安装一些依赖,但是由于我们所使用的这个源比较纯净,有些依赖包无法安装,所以还需要添加一个阿里云的源,来帮助我们下载一些我们安装docker之前所需的一些依赖。

bash 复制代码
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

源添加好之后我们可以安装docker的前置环境依赖包及docker仓库

bash 复制代码
yum install -y yum-utils device-mapper-persistent-data lvm2 epel-release
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装docker

安装指定 版本的docker

bash 复制代码
yum install -y docker-ce-19.03.9

安装完成后可以查看一下docker的版本

bash 复制代码
[root@localhost ~]# docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.40 (downgraded from 1.45)
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:32:04 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          19.03.9
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       9d988398e7
  Built:            Fri May 15 00:24:05 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

设置开机自启动

bash 复制代码
systemctl enable docker --now
配置加速
bash 复制代码
[root@localhost ~]# mkdir -p /etc/docker
[root@localhost ~]# tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://q8xu3ub2.mirror.aliyuncs.com",
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ]
}
EOF
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
相关推荐
古法老登瞎折腾4 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
琥珀.5 小时前
mysql中json数组转列表查询
linux·运维·服务器
dawnsky.liu5 小时前
在 RHEL 中使用 goose 实现远程主机管理
linux·运维·ai
Linux运维技术栈7 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维
云上先途17 小时前
企业 AI 服务部署周期多久,会不会影响原有业务运转?
大数据·运维·人工智能
执伞人ONLY8 小时前
AI知识库自动化知识加工没做对,人工整理永远追不上知识产生
运维·人工智能·自动化
叼烟扛炮8 小时前
Linux 学习笔记(三十三):线程互斥——互斥锁(Mutex)与死锁
linux·运维·服务器·笔记·学习·1024程序员节
无足鸟ICT9 小时前
【RHCA+】who命令(查看已登陆用户)
linux·运维·服务器
RacentCLM9 小时前
证书即服务CaaS:从申请、续期到部署的自动化链路拆解
运维·数据库·自动化·ssl
注塑机数据采集联网10 小时前
注塑机生产管控MES系统应用
大数据·运维·服务器·人工智能·物联网