1.Docker概述
Docker简介
Docker是一个轻量级的“虚拟机”
在Linux容器中运行应用的开源工具
Docker应用场景
- 打包应用程序简化部署
- 可脱离底层硬件任意迁移,例如:从腾讯云迁到阿里云
- 自动化测试和持续集成持续发布
- 在服务型环境中部署和调整数据库或其他后台应用
- 从头编译或者扩展现有的Oenshift或cloud Foundry平台来搭建自己的Paas环境
Docker优点
Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。
- 快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。 - 响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。 - 在同一硬件上运行更多工作负载
Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
Docker核心概念
1. 镜像:一个面向Docker容器引擎的只读模板
docker镜像就是一个只读模板,比如,一个镜像可以包含一个完整的centos,里面仅安装apache或用户的其他应用,镜像可以用来创建docker容器,另外docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用
2. 容器:从镜像创建的运行实例
docker利用容器来运行应用,容器是从镜像创建的运行实例,它可以被启动,开始、停止、删除、每个容器都是互相隔离的,保证安全的平台,可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行再其中的应用程序
3. 仓库:集中保存镜像的地方
仓库是集中存储镜像文件的沧桑,registry是仓库主从服务器,实际上参考注册服务器上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)
仓库分为两种,公有参考,和私有仓库,最大的公开仓库是docker Hub,存放了数量庞大的镜像供用户下周,国内的docker pool,这里仓库的概念与Git类似,registry可以理解为github这样的托管服务。
容器与虚拟机的区别
不同点 | container | VM |
---|---|---|
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生(直接在内核中运行) | 5%左右损失 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级别 | 系统级别(更彻底) |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
名称空间
应用A与应用B必备的隔离条件(namespace名称空间隔离):
容器隔离了6个名称空间(namespace资源隔离-用容器化技术封装)
- mount:文件系统,挂载点
- user:操作进程的用户和用户组(进程跑起来需要依赖一个用户:root,普通用户,其他用户,所以需要以用户层面进行隔离)
- pid:进程编号
- uts:主机名和主机域
- ipc:信号量,消息队列,共享内存(同一个操作系统上,进程之间的通讯,可以共享内存,共享操作系统队列消息,使用隔离可以将让不同的进程在写入数据时,不会写入在同一个内存空间中)
- net:网络设备,网络协议栈,端口等
只有实现了以上6种隔离,我们才能认为使用容器进行了封装。
Docker网络模式
Docker四种网络模式:
- host
- none
- bridge
- container
host模式
该模式将禁用Docker容器的网络隔离。因为容器共享了宿主机的网络命名空间,直接暴露在公共网络中。因此,你需要通过端口映射(port mapping)来进行协调。
none模式
none 模式就是container 没有任何的网络,不给它创建网络,我们可以自己去实现自己想要的网络模式。
bridge模式
此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat表配置与宿主机通信。
container模式
先会有一个容器使用的是nat模式,相当于这有一个ip会连接到docker0上,然后通过eth1转发出去。nat模式直接使用的是宿主机的模式,container 启动一个容器,会使用另外一个容器的网络,它们会共享空间,新的容器,它们的网络容器是一模一样的,那么这个容器,是通过host容器出去的。
Docker安装
// 安装依赖包
// 设置docker仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
// 配置阿里在线源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
// 安装docker-ce
yum install docker-ce -y
systemctl start docker
// 配置镜像加速
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://pvcqqjhi.mirror.aliyuncs.com"]
}
// 配置路由转发
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
systemctl daemon-reload
systemctl restart docker