容器技术的实现Docker
传统项目部署问题
一个大型项目组件比较多, 一般需要依赖Node.js,Redis,RabbitMQ,MySQL等应用,将这些应用部署到服务器容易出现一些问题
问题一: 安装不同应用时它们所依赖的系统函数库,环境,配置各不相同, 容易出现版本的兼容性问题问题二: 开发,测试,生产环境中所使用的操作系统如果不一致,那么部署的应用将无法正常运行,如Ubuntu版本的MySQL应用无法在CentOS系统中运行

操作系统结构通常分为 系统应用(函数库),系统内核,计算机硬件三部分
系统应用: 操作系统本身提供的函数库即所有封装内核指令的函数系统内核: Linux的发行版如CentOS,Ubuntu,Fedora的内核都是Linux,内核可以与计算机硬件交互,提供操作硬件的指令计算机硬件: 例如CPU,内存,磁盘等
应用程序执行流程: 应用程序如MySQL首先调用系统函数库实现各种功能,系统函数内会调用内核指令操作计算机硬件
Ubuntu和CentOS都基于Linux内核,但它们的系统应用不同即提供的函数库有差异,所以Ubuntu版本的MySQL应用安装到CentOS系统就会找不到匹配的函数库
Docker的应用
Docker可以解决函数依赖的兼容问题和不同系统环境的方案
- 将应用程序需要的
系统函数库(libs),依赖(Deps),环境配置与应用程序本身一起打包,形成一个可以直接在任何相同内核的操作系统上运行的镜像(免安装直接运行的文件) - 容器技术底层使用沙箱机制将
每个应用程序及其运行依赖的各种函数库以及环境配置单独隔离起来放到一个隔离容器去运行,容器之间共享的还是同一个操作系统
DockerHub是一个官方的Docker镜像托管平台(Docker Registry), 我们可以将自己打包的应用镜像放到DockerHub共享使用,也可以从DockerHub上拉取镜像

Docker与虚拟机的区别
实际开发项目时程序员需要自己先搭建环境后才能开始写代码,写完后交给测试人员测试和运维人员部署,此时如果他们也需要重复搭建这套环境就比较繁琐了
虚拟机隔离方案: 先搭好一套虚拟机环境,测试和运维人员需要的时候就克隆虚拟机容器隔离方案: 将应用程序需要的应用函数库(libs),依赖(Deps),配置与应用一起打包形成一个可移植镜像
虚拟机是在操作系统中模拟硬件设备然后运行另一个操作系统,如在Windows系统中先运行CentOS系统后才能运行任意的CentOS应用
体积大、启动速度慢、性能一般: 操作系统占用的内存太多,启动的时候需要从头到尾把该检测的都检测了然后该加载的都加载上
Docker是容器技术的实现方案它可以让一个应用程序在任何操作系统中都十分方便的运行
体积小、启动速度快、性能好: 镜像里封装的是系统的函数库,并没有模拟完整的操作系统, 最后启动后形成的是一个系统进程
| 特性 | Docker | 虚拟机 |
|---|---|---|
| 性能 | 接近原生(直接和操作系统交互) | 性能较差(交互时层层传递) |
| 硬盘占用 | 一般为MB(仅仅是封装系统的函数库) | 一般为GB |
| 启动 | 秒级 | 分钟级 |

Docker架构
我们想要操作镜像和容器就必须安装Docker,Docker是一个CS架构的程序由两部分组成
客户端(client): 通过发送本地命令或RestAPI远程请求向Docker服务端发送指令操作镜像、容器等服务端(server): Docker守护进程接收命令或远程请求处理Docker指令

安装Docker
安装步骤
Docker分为CE(社区免费版,支持周期7个月,分为stable,test,nightly三个更新频道)和EE(企业付费版,支持周期 24 个月)
uname -a(查看内核版本): Docker社区版支持64位版本,并且要求CentOS7内核版本不低于3.10
第一步: 如果之前安装过旧版本的Docker,可以使用下面命令卸载
# \是命令拼接符号,增强命令的可读性
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
第二步: 安装yum工具包
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
第三步: 更新本地镜像源,yum工具默认去国外网站下载速度较慢
# 设置下载docker的镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 设置下载镜像的docker仓库
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
# 安装
yum makecache fast
第四步: 安装社区版Docker
yum install -y docker-ce
第五步: Docker默认端口是2375,另外使用Docker安装的应用需要用到各种端口,所以可以直接关闭防火墙
# 关闭防火墙
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
# 查看防火墙状态
systemctl status firewalld
第六步: 启动,停止,重启Docker服务
# 启动docker服务
systemctl start docker
# 停止docker服务
systemctl stop docker
# 重启docker服务
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行命令,如果不报错说明安装启动成功
docker ps
第七步:输入docker -v命令查看docker版本,验证Docker是否安装并启动成功
[root@localhost ~] docker -v
Docker version 20.10.21, build baeda1f
配置镜像加速
在Docker官方镜像库下载镜像速度较慢,参考阿里云的镜像加速文档开通容器镜像服务

# 新建一个目录
sudo mkdir -p /etc/docker
# 在目录下新建一个daemon.json文件并指定内容,指定设置的国内镜像服务地址
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://v5sk29z.mirror.aliyuncs.com"]
}
EOF
# 重新加载文件
sudo systemctl daemon-reload
# 重启Docker
sudo systemctl restart docker
936

被折叠的 条评论
为什么被折叠?



