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
相关推荐
生活爱好者!2 分钟前
NAS帮我找回童年的快乐!部署 小游戏
运维·服务器·docker·容器·娱乐
蜕变的小白19 分钟前
基于Linux的天气查询项目
linux·运维·服务器
新缸中之脑34 分钟前
Agent-browser浏览器自动化CLI
运维·自动化
xcs1940538 分钟前
AI 自动化编程 trae 项目整个调整
运维·自动化
卤炖阑尾炎41 分钟前
Linux firewalld 防火墙从入门到精通:原理与配置全解析
linux·运维·php
小云数据库服务专线1 小时前
linux grep命令
linux·运维·服务器
|华|1 小时前
Nginx 核心功能
运维·nginx
自在极意功。1 小时前
nginx和docker面试题
运维·nginx·docker
木子欢儿1 小时前
从零到精通 Neovim:Ubuntu 下的终极开发利器指南
linux·运维·服务器·ubuntu
枕布响丸辣1 小时前
Nginx 核心功能全解析:正向代理 / 反向代理 / 缓存 / Rewrite 实战
运维·nginx·缓存