前言
为什么使用容器?
从传统运维角度出发,来观察传统运维出现的弊端与困难
- 上线流程繁琐
- 资源利用率低
- 扩容/缩容不及时
- 服务器环境臃肿
- 环境不一致
容器与虚拟机的区别
虚拟机架构(左图):
硬件资源(Computer Hardware)->宿主机操作系统(Host OS)->虚拟化软件(Hypervisor)->虚拟机操作系统(Guest OS)->应用(App)
容器架构(右图):
硬件资源(Computer Hardware)->宿主机操作系统(Host OS)->Docker引擎(Docker Engine)->容器(Container)->应用(App)
从上面两个图来看,容器与虚拟机的最下两层都是一致,即物理资源(CPU,内存,磁盘等)与宿主机操作系统,但在往上一层就出现差别了。
虚拟机的第三层是Hypervisor,他是虚拟机的整个核心,负责为虚拟机提供虚拟的运行平台,管理虚拟机的操作系统运行。而容器的第三层就是Docker引擎,他是负责调度和隔离的。
从虚拟化的层面来看,传统虚拟化是虚拟了硬件资源,而容器虚拟化是进程的虚拟,从而提供了更轻量级的虚拟化,实现进程和资源的隔离。
从架构来看,容器虚拟化比传统虚拟化少了两层(hypervisor和GuestOS),从而变成为使用 Docker Engine 进行调度和隔离,所有应用(容器)共用主机操作系统的内核,因此在体量上,Docker较比虚拟机更轻量级,在性能上优于传统虚拟化,接近裸机性能。
从应用场景来看,传统虚拟化提供一个完全隔离的环境,而容器虚拟化提供一个基本的独立环境,实现容器隔离,资源限制。因此传统虚拟化与容器虚拟化有各自擅长的领域,在软件开发、测试场景和生产运维场景中各有优劣。
Docker应用场景
- 应用程序打包和发布
- 应用程序隔离
- 持续集成
- 部署微服务
- 快速搭建测试环境
- 提供PaaS产品(平台即服务)
一、系统环境
官方安装手册:https://docs.docker.com/engine/install/centos/
[root@master ~]# cat /etc/centos-release #查看系统版本
[root@master ~]# uname -a #查看系统详细信息
[root@master ~]# getenforce #查看selinux状态
[root@master ~]# systemctl status firewalld #查看firewall防火墙状态
[root@master ~]# yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine -y #卸载旧版本docker ce
[root@master ~]# rpm -qa | grep docker #查看系统是否安装了docker软件包
二、安装docker ce
2.1 安装阿里云 docker源
[root@master ~]# yum install -y yum-utils
[root@master ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装阿里云docker源
[root@master ~]# yum clean all && yum makecache #清理并重建缓存
[root@master ~]# yum list docker-ce --showduplicates | sort -r #查看可安装的docker ce版本
2.2 安装docker ce
[root@master ~]# yum install -y docker-ce #安装最新版本的docker-ce,如需安装特定版本的docker-ce跟上版本号
[root@master ~]# systemctl start docker #启动dokcer守护进程
[root@master ~]# systemctl enable docker #设置docker为自启动
[root@master ~]# docker version #查看docker版本信息
三、docker 镜像加速
[root@master ~]# mkdir -p /etc/docker
[root@master ~]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
EOF
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@master ~]# docker info #查看docker详细信息