VPS、ECS
VPS:虚拟专用服务器,可以理解为物理机上多个 Vmware/VirtualBox 虚拟机,但传统 VPS 不支持资源升降级,资源是固定的。
ECS:VPS+自主升降级就变成了 ECS。
docker
这里我以一个实际中可能遇到的例子讲解,比如我们有两台服务器,我需要在两台服务器上分别安装 vim 软件,那么步骤如下:
yum -y intstall vim
apt-get install vim
多个 ECS 之间可能底层操作系统不同,那么部署应用就会有各种环境问题,如果能让软件带着操作系统环境一起部署就可以了。
操作系统分为用户空间和内核空间,我们可以阉割操作系统只需要用到操作系统的用户空间部分,就可以构建应用所需的环境。我们将应用程序和操作系统的文件系统、依赖库打包成一个类似压缩包的文件,这其实就是基础镜像(basic image
)。
如果选择每台机器安装一个虚拟机可以解决,但是这样未免太重了,我们可以只打包软件和系统依赖库和配置,然后利用 Namespace 能力
让它看起来就像独立操作系统一样,然后通过 Cgroups
来限制它能使用的操作系统资源。
总的来说就是物理服务器上跑 ECS,ECS 上跑 Docker 容器,多个 Docker 容器共享一个 ECS,ECS 上跑多个 Docker 容器。
dockfile
现在有了容器镜像,但是我们可能还需要安装一些依赖,比如 yum -y install gcc
等,我们通过 dockerfile
脚本来完成。它列清楚了从操作系统到应用服务启动需要哪些事情的清单文件。
现在有了基础镜像和 dockerfile,我们就能一步步构建容器镜像,然后利用 docker build
指令,将环境+程序打包为类似压缩包的东西(容器镜像)。
现在将容器镜像传到任意一台服务器上面执行解压缩,我们就能同时拥有运行环境和程序了。
Registry
现在需要将容器镜像传输到多台服务器,我们可以模仿 Github 代码仓库的做法,就是 Registry。
通过 docker push xxx
将镜像推送到镜像仓库,通过 docker pull xxx
将镜像拉取到本地。
docker 和传统虚拟机的区别
传统虚拟机底层拥有一个完整的操作系统;
docker 底层并没有单独的操作系,而是添加了目标操作系统的文件系统、依赖库、配置文件。通过 Namespace
、Cgroup
实现视图隔离和资源限制。使得容器看起来像运行在单独的操作系统上一样。
docker-Compose、docker-Swarm
docker-Compose:部署多个容器,且对容器的部署顺序有要求。通过一个统一的 yaml 脚本,执行 dockercompose xxx.yaml up
一键启动;
docker-Swarm:docker
解决的是一个容器的部署,dockerCompose
解决的是一套服务的部署,dockerSwarm
解决的是一套服务在多个机器集群上服务部署的问题,如果某一台机器出现故障宕机,服务会自动迁移应用另一台机器,使服务具有高可用性。