引子1:
假设我们在一个公司上班,公司使用某种后端编程语言为主要技术栈进行软件开发,比如 Node
、JAVA
、PHP
等,这里就使用 Node
举例。我们使用 Node
进行软件开发的时候,需要配置 Node
的开发环境,软件本身可能还需要很多依赖项也要安装,同时我们软件开发完以后还需要进行测试,测试完以后要进行部署,为了上线后不出现意想不到的问题,线上服务器和测试服务器的各项配置要一样。如果我们线上服务器有很多台,那么我们要重复配置很多次。如果能将这些应用以及他们需要的环境,做成标准件,用的时候直接装这个标准件该多好。
引子2:
你在一个小公司上班,公司只有一台不错的服务器,但是公司有两个产品,由于它们都依赖某个软件,但是依赖的这个软件的版本又不同,这就需要两台完全独立的运行环境。怎么处理呢?很容易想到的一种方案是:使用虚拟化技术,在这台服务器上虚拟出两台机器,然后各自装个系统,然后再分别部署两个产品即可。但是,这些虚拟出的操作系统,本身就需要大量宿主服务器资源维持,让本不富裕的宿主服务器更是雪上加霜。如果能有一项既能隔离应用运行环境,又额外开销较小的方案该多好。
容器技术
容器技术也是虚拟化技术的一种,是一种比较轻量级的虚拟化,它能有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。Docker
就是容器工具的一种。
容器和传统虚拟化技术的对比:
从上面的图我们可以看出:
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
容器宿主机上运行,并与其它容器共享主机的内核,它运行一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
Docker 安装
Docker在2017年3月1日后,版本发生了改变,之前叫:docker
、 docker-engine
,之后分成了企业版和社区版,社区版叫docker-ce
。我们这里学习的是 docker-ce
,系统使用的是 Rocky(RedHat) 8.5
。
官方安装文档:
安装
yum
工具包集合。yum install -y yum-utils
添加
docker-ce
的稳定源(以下二选一即可)# 这个是官方镜像源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 这个是阿里云的镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装
docker-ce
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
查看
docker
版本docker --version
启动、关闭和重启
docker
# 启动docker systemctl start docker # 关闭 systemctl stop docker # 重启 systemctl restart docker
附1:设置 Docker 开机启动:
如果需要开机启动docker,可以使用下面的命令进行设置。
# 设置开机自动启动 systemctl enable docker # 取消开机自动启动 systemctl disable docker
附2:配置国内镜像仓库:
如果觉得 docker
默认的仓库速度比较慢的话,可以配置使用国内的源。
新建配置文件或修改配置文件
vi /etc/docker/daemon.json
然后再配置文件中加入国内的镜像地址即可:
# 可以加入多个 { "registry-mirrors": [ "https://mirror.baidubce.com" ] }
然后重启docker
systemctl daemon-reload systemctl restart docker
检验是否生效
docker info
查看结果中的
Registry Mirrors
项的结果。
这里收集了几个国内的镜像地址:
1.docker中国区官方镜像:https://registry.docker-cn.com
2.网易:http://hub-mirror.c.163.com
3.中国科技大学:https://docker.mirrors.ustc.edu.cn
4.阿里云:https://registry.cn-hangzhou.aliyuncs.com
附3:卸载旧版方法:
如果之前安装过老版本或者系统自带的有老版本的docker,那么需要卸载一下旧版本:
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ podman \ runc