隔离与共享:
虚拟机通过添加hypervisor层(虚拟化中间层),等虚拟出网卡,内存,cpu硬件,再在其上建立虚拟机,每个虚拟机都有自己的系统内核。docer通过隔离的方式,将文件系统,进程,设备,网络等资源,再对权限、CPU 资源等进行控制,最终让容器之间互不影响,容器无法影响宿主机。
容器与宿主机共享内核、文件系统、硬件等资源。
性能与损耗:
与虚拟机相比,容器资源损耗要少。同样的宿主机下,能够建立容器的数量要比虚拟机多。
但是,虚拟机的安全性要比容器稍好,要从虚拟机攻破到宿主机或其他虚拟机,需要先攻破 Hypervisor 层,这是极其困难的。
而 docker 容器与宿主机共享内核、文件系统等资源,更有可能对其他容器、宿主机产生影响。
尽量别做的事:
用最少最低权限运行容器
少用docker run --privileged 启动容器授予容器root用
尽量不在容器中运行ssh服务
禁止在容器上使用--network host网络模式
尽量使用最小化镜像
尽量使用最少资源和最低权限运行容器
尽量使用只读的方式挂载数据卷 -v host:container:ro
尽量使用on-failure限制容器的重启次数
运行容器时要限制cpu,内存,io的使用上限
尽量下载官方镜像或者自己构建镜像从私有仓库中下载
docker对硬件损伤较大,docker
Docker是利用Cgroup实现资源限制的,只能限制资源消耗的最大值,而不能隔绝其他程序占用自己的资源。如果其他应用过渡占用物理机资源,将会影响容器里 MySQL 的读写效率。
http 80 明文传输
https 443 加密传输 证书加密 ca证书(官方权威认证证书)和私钥
https
使用证书访问的工作流程:
1)客户端发起https请求,连接到服务443端口
2)服务器必须要先申请一套数字证书(证书内容有公钥,证书颁发机构,失效日期等)
3)服务器将自己的数字证书发送给个客户端(公钥在证书里面,私钥由服务器持有)。
4)客户端收到数字证书之后,会先验证证书的合法性。如果证书验证通过,就会使用伪随机数生成器(/dev/random)随机生成一个【对称密钥】,使用证书的公钥加密这个【对称密钥】。
5)客户端将公钥加密后的【对称密钥】发送到服务器。
6)服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的【对称密钥】,然后用客户端的【对称密钥】对返回数据进行加密,这样传输的数据都是密文了。
7)服务器将加密后的密文数据返回到客户端。
8)客户端收到后,用自己的【对称密钥】对其进行对称解密,得到服务器返回的数据。
过程总结:
服务端会事先通过cA生成证书和私钥
客户端发送https请求到服务端的443端口
服务端发送包含公钥,证书有效期及ca机构等信息的证书给客户端
客户端会先通过cA验证证书有效性
通过cA认证后,客户端会使用服务端发送过来的证书文件中的公钥,来加密自己使用的伪随机数生成的会话私钥,并将其发送给服务端。
服务端会用私钥解密得到会话密钥,之后双方即可使用会话密钥通信
证书的创建 ssl证书获取,各大云服务商,申请免费证书或者工具拆功能创建,mkcert 域名 一键创建,openssl certinfo
openssl、mkcert、let's encrypt自签证书