目录
背景
以linux而言,linux操作系统会有一个主进程pid=1 派生出其他进程来控制不同服务
例如: pid=2 --> python pid=3-->java pid4-->php ,三个服务可能会相互影响使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本延伸出—》能否将这三种服务分别封装起来——》KVw虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境随着技术发展---》虚拟化技术开销较大(例如:只要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)
——》延伸出容器技术
虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销
一、docker是什么
Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。是一个开源的应用容器引擎,让开发者可以打包大门的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口
沙箱(Sandbox):在计算机安全领域,沙箱是一种程序的隔离运行机制Docker在2013年一炮而红,直到现在,已经成为容器技术的代名词。Docker 从一开始就以提供标准化的运行时环境为目标,真正做到"build once, run anywhere",可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦。在此基础上还进一步发展出了caas(容器即服务)技术。
企业中,开发——》运维整体流程
①首先由开发进行代码研发,研发好之后进行编译、打包
Ps:打包:一般会使用maven工具打war工具打war或者jar包
②打完包之后,放置对应的运行时环境中,进行试运行
Ps:这里的运行时环境指:例如tomcat(Java环境)PHP(php环境)等
③中间会加上一些测试过程,测试代码的有效性、可用性和执行性
④以上测试完成,运维会将这个软件包拉过来,运行在实际生产的运行时环境中
问题:在以上的第②点中,不同开发语言的运行时环境混淆在一起运行会有很大的隐患,以及不便
传统中所谓的运行时环境,例如tomcat(Java环境)PHP(PHP环境)等
容器中所谓的运行时环境,指的试“容器”内部
在此之前,容器——》是一个运行时环境,构成容器的组件是image镜像
1、docker三要素
Docker images :镜像
Docker container:容器
Docker resgistry:镜像仓库
2、使用docker有什么意义
docker引擎统一了基础设施环境-docker容器环境(引擎)
docker引擎统一了程序打包(装箱)方式-docker镜像
docker 引擎统一了程序部署(运行)方式-docker容器
镜像————》封装的某一个时刻的服务/应用状态
容器————》应用跑起来的状态(正常提供服务的状态-运行时)
二、Docker的使用场景
打包应用程序简单部署
可以脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
持续集成和持续交付(CI/CD):开发到测试发布
部署微服务
提供PAAS 产品(平台即服务){OpenStack的云主机类似于阿里云的ECs,属于IAAS、Docker (K8S)属于PAAS}
IAAS:基础设施即服务
sAAs:应用即服务
PAAS:平台即服务
三、Docker引擎(Docker Engine)
Docker Engine是具有以下主要组件的客户端-服务器应用程序(C/s端):
服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
命令行界面(CLI)客户端(docker命令)。
四、docker容器与vm的区别
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
五、docker的安装部署:
docker初期版本是1.13(同一版本,开源)
——》分类型 1.15 - 1.17 过程中分成两种。
①开源社区 docker-ce ②企业版 docker-ee
1、安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
2、设置阿里云镜像源
cd /etc/yum.repos.d/
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装 Docker-CE 社区版并设置为开机自动启动
yum install -y docker-ce
systemctl start docker.service
systemctl enable docker.service
4、查看 docker 版本信息
docker version
二、设置镜像加速
1、申请加速器地址
这里我们使用阿里云的镜像,加速镜像下载速度
注册阿里云账号并登录
帮助地址:https://help.aliyun.com/
2、搜索容器镜像服务
三、网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 #开启路由转发
sysctl -p #刷新一下
systemctl restart network
systemctl restart docker #重启网络和docker
Ps:为什么要开启路由转发
宿主机如果想要访问出去,则需要开启路由转发功能
四、docker-server端配置文件建议配置
#在daemon. json文件中配置
{
"graph":"/data/docker", #数据目录,数据存储位置
"storage-driver":"overlay2", #存储引擎,docker1.18以上版本默认使用overlay2存储引擎。早期的适合存储引擎使用的aufs
"insecure-registries":["registry.access.redhat.com","quary.io"], #私有仓库
#registry-mirrors 以下添加
"bip":"172.184.70.1/24", #docker网络
"exec-opts":["native.cgroupdriver-systemd"], #启动时的额外参数,(是一种挂在驱动,k8s使用)
"live-restore":true #当docker容器引擎挂掉的时候,使用docker跑起来的容器还能继续运行
}
小结与面试题
Dcoker是基于容器技术的轻量级虚拟化解决方案
docker是t t t容器技术,把linux的cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行cli、api等)c/s
面试题1:cgroup和namespaces 两者构成了docker底层原理
cgroup资源控制与namespaces结合控制管理了6个名称空间资源(以下)
①mount文件系统,挂载点—》》一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
②user 操作进程的用户和用户组
③pid 进程编号
④uts 主机名和主机域
⑤ipc 信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
⑥net 网络设备、网络协议栈、端口等
cgroup:资源管理技术(Linux——》cgroup) 3.8版本
Linux 内核版本3.8+
面试题2:docker有哪些优势?
PS:(三个统一①封装的模式image ②运行时环境container ③统一的平台engine)
面试题3:docker 和虚拟化比有什么优势
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |