文章目录
一、docker容器
(一)、什么会是容器
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
(二)、容器的优点
1.灵活:即使是最复杂的应用也可以集装箱化。
2.轻量级:容器利用并共享主机内核。
3.可互换:可以即时部署更新和升级。
4.便携式:可以在本地构建,部署到云,并在任何地方运行。
5.可扩展:可以增加并自动分发容器副本。
6.可堆叠:可以垂直和即时堆叠服务。
(三)、docker与虚拟的区别
特性 | Docker容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算能力损耗 | 几乎无 | 损耗50%左右 |
性能 | 接近原生 | 弱于原生 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 资源隔离/限制 | 完全隔离 |
(四)、容器在内核中支持2种重要技术
docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。
(五)、namespace的六项隔离
namespace | 系统调用参数 | 隔离内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名与域名 |
IPC | CLONE_NEWWIPC | 信号量、消息队列和共享内存 |
PID | CLONE_NEWPID | 进程编号 |
NETWORK | CLONE_NEWNET | 网络设备、网络栈、端口等 |
MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支持) |
(六)、docker核心概念
1.镜像
Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。
Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是Docker镜像的精髓。
2.容器
Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看做是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。
3.仓库
Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker
二、docker安装
(一)、安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
#安装docker的依赖包,yum-utils:提供了 yum-config-manager 工具。
#device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
#evice mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#yum源配置为阿里云镜像
(二)、配置docker加速器
1、打开阿里云官网 阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台官网进行登陆
2.登陆后打开控制台
3.点击左侧菜单栏,搜索框输入容器镜像服务
4. 选择镜像工具—镜像加速器–复制命令配置即可配置完毕重新加载daemon然后重启docker
(三)、docker运行过程
1.检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
2.利用镜像创建并启动一个容器;
3.分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
4.从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
5.分配一个地址池中的 IP 地址给容器;
6.执行用户指定的应用程序,执行完毕后容器被终止运行。
(四)、docker 容器7个的生命周期
1.create:已创建还未运行的容器
2.running:正在运行中的容器
3.restarting:容器正在重启中
4.removing:容器正在迁移中
5.paused:容器已暂停的状态
6.exited:停止容器运行
7.dead:死亡,主要是操作系统出现异常或断点导致
暂停和停止状态的区别:
paused 命令挂起指定的容器中的所有进程为暂停,
stop:表示杀掉正在运行的docker容器进程,默认是10s后
三、docker网络
1、host模式
docker中的容器使用宿主机的ip地址但是端口号不同,Docker使用了Linux的Namespaces技术来进行资源隔离,如PID Namespace隔离进程,Mount Namespace隔离文件系统,Network Namespace隔离网络等。
一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、iptable规则等都与其他的Network Namespace隔离。 一个Docker容器一般会分配一个独立的Network Namespace。 但如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡、配置自己的IP等,而是使用宿主机的IP和端口。
配置:创建容器时添加使用 --net=host 指定容器为host模式
2.container模式
container模式则是docker容器中所有的容器共享一个Network Namespace而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过lo网卡设备通信。
配置:创建容器时添加使用 --net=container指定容器为host模式
3.none模式
none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。 也就是说,这个Docker容器没有网卡、IP、路由等信息。这种网络模式下容器只有lo回环网络,没有其他网卡。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
配置:创建容器时添加使用 --net=none指定容器为host模式
4.bridge模式
bridge模式为docker的默认模式,安装docker时就已经产出了一个docerk0的虚拟网卡,bridge模式容器使用独立network Namespace,并连接到docker0虚拟网卡。通过docker0网桥以及iptables nat表配置与宿主机通信,此模式会为每一个容器分配Network Namespace、设置IP等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上