xbet星投

一篇把docker基础说的很透彻的文章

xbet官网手机版

Docker简介

Docker的目标

1.提供一种简单轻便的模型建模方法

2.责任的逻辑分离

3.快速高效的开发生命周期

4.鼓励使用面向服务的架构

Docker使用场景

1.使用dockers容器开发,测试和部署服务

2.创建隔离的运行时环境

3.构建测试环境

4.构建多用户平台即服务(PaaS)基础架构

5.提供软件即服务(SaaS)应用程序

6.高性能,非常大规模的主机部署

Docker基本构成

1. Docker客户端客户端

2. Docker守护程序守护程序

3. Docker镜像

4. Docker Container Container

5. Docker Registry Warehouse

Docker容器实现简介

Docker依赖的Linux内核功能

命名空间(命名空间)

在编程语言中,引入名称空间的概念是重用变量名称或服务例程。在不同的命名空间中使用相同的变量不会产生冲突。在Linux系统中引入名称空间也有类似的效果。例如,在没有操作级虚拟化的Linux系统中,从数字(PID)的开头引入用户空间进程。在心脏虚拟化操作之后,不同的容器具有不同的PID命名空间。每个容器中的进程可以从1开始而没有冲突

目前,Linux中有6种类型的命名空间,对应于操作系统管理的6种资源。

挂载点CLONE_NEWNS

进程(PID)CLONE_NEWPID

网络(网络)CLONE_NEWNET

进程间通信(ipc)CLONE_NEWIPC

主机名(uts)CLONE_NEWUTS

用户(uid)CLONE_NEWUSER

对照组(Cgroup)

命名空间与命名和编号的角度是隔离的,而控制组则是对进程进行分组并真正限制和隔离每组进程的计算机资源。控制组是一种内核机制,允许您处理组,跟踪和限制它们使用的计算资源

对于每种类型的计算资源,控制组由所谓的子系统[

]控制

cpusets:用于将一组cpu分配给指定的cgroup,cgroup中的进程只计划在CPU集上执行

blkio:限制cgroup中的块IO

cpuacct:用于计算cgroup中的cpu使用情况

设备:用于控制cgroup可以在黑名单和白名单中创建和使用的设备节点

冰箱:用于暂停指定的cgroup,或唤醒暂停的cgroup

Hugetlb:用于限制在cgroups中使用hugetlb

内存:用于跟踪受限内存和交换分区的使用

net_cls:用于根据发送方的cgroup标记数据包。流量控制器根据这些标签分配优先级。

Net_prio:用于配置cgroup的网络通信优先级

cpu:用于在cgroup中设置cpu调度参数

Perf_event:用于监视cgroup的cpu性能

与命名空间不同,控制组不会增加系统调用,而是实现文件系统以通过文件和目录操作来管理控制组

Docker和虚拟机之间的区别

了解虚拟机

当虚拟机运行多个隔离的应用程序时,如下所示

6c6b0294466b421c855097e481532907

从下到上,了解上面的图片:

基础设施。它可以是您的PC,数据中心服务器或云主机。

主机操作系统。在PC上,它可能是MacOS,Windows或Linux发行版。

虚拟机管理系统(Hypervisor)。使用虚拟机管理程序,您可以在主操作系统之上运行多个不同的从属操作系统。 Type 1 Hypervisor具有适用于MacOS的HyperKit,适用于Windows的Hyper-V和适用于Linux的KVM。 Type 2 Hypervisors是VirtualBox和VMWare。

类型I:虚拟机直接在系统硬件上运行,并创建一个称为“裸机”类型的完整硬件模拟实例。

类型II:虚拟机在传统操作系统上运行。它还创建了一个名为“托管(主机)”类型的完整硬件模拟实例。

来自操作系统(客户操作系统)。假设您需要运行三个独立的应用程序,则需要使用虚拟机管理程序启动三个从属操作系统,即三个虚拟机。这些虚拟机非常大,可能是700MB,这意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们也消耗了大量的CPU和内存。

各种依赖。每个操作系统都需要安装许多依赖项。如果您的应用程序需要连接到PostgreSQL,则需要安装libpq-dev;如果你使用Ruby,你应该安装宝石;如果您使用其他编程语言,例如Python或Node.js,则需要安装相应的依赖项。

申请。安装依赖项后,您可以从每个操作系统单独运行应用程序,以便应用程序彼此隔离

了解Docker容器

当Docker容器运行多个独立的应用程序时,如下所示:

fd1c6ba9ae524c7eba8cc0efc30d1be1

从下到上,了解上面的图片:

基础设施(基础设施)

主机操作系统。 Docker可以在所有主要的Linux发行版上运行。对于MacOS和Windows,还有“运行”Docker的方法。

Docker守护程序(Docker守护程序)。 Docker守护程序取代了Hypervisor,Hypervisor是在操作系统之上运行的后台进程,负责管理Docker容器。

各种依赖。对于Docker,应用程序的所有依赖项都打包在Docker镜像中,Docker容器是基于Docker镜像创建的。

申请。应用程序的源代码及其依赖项打包在Docker镜像中。不同的应用需要不同的Docker镜像。不同的应用程序在不同的Docker容器中运行,这些容器彼此隔离。

将虚拟机与Docker进行比较

Docker守护程序可以直接与主操作系统通信,以便为各个Docker容器分配资源;它还可以将容器与主操作系统隔离,并将每个容器彼此隔离。虚拟机需要几分钟才能启动,Docker容器可以在几毫秒内启动。由于没有臃肿的从属操作系统,Docker可以节省大量的磁盘空间和其他系统资源。说了这么多Dockers的优点后,没有必要完全否定虚拟机技术,因为这两者有不同的使用场景。虚拟机可以更好地完全隔离整个操作环境。例如,云服务提供商通常使用虚拟机技术来隔离不同的用户。 Docker通常用于隔离不同的应用程序,例如前端,后端和数据库。

Docker网络简介

Docker拥有四种网络工作方式,以及一些自定义网络模式

桥接模式

主机模式

集装箱模式

无模式

主机模式介绍

相当于VMware中的桥接模式,主机位于同一网络中,启动容器时使用主机模式,然后容器将不会获得单独的网络命名空间,而是与主机共享网络命名空间。容器不会虚拟化自己的网卡,配置自己的IP等,而是使用主机的IP和端口。

创建命令

1.docker run --name host --network host --rm -it busybox

容器模式简介

指定新创建的容器与现有容器共享网络命名空间,而不是与主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,但会与指定的容器共享IP,端口范围等。类似地,除了网络之外,两个容器是隔离的,例如文件系统,进程列表等。两个容器的进程可以通过lo NIC设备进行通信。

创建命令

1.创建容器

2. docker run -it --name web1 httpd

3.为容器模式创建容器

4.docker run --name web2 --network container: web1 --rm -it httpd

无模式简介

此模式将容器放在其自己的网络堆栈上,但不执行任何配置。实际上,此模式会关闭容器的网络功能,

创建命令

1.docker run --name none -it --network none --rm httpd

桥接模式简介

该容器与VMware中的Nat模式等效,使用单独的网络名称空间并连接到docker0虚拟NIC(默认模式)。通过docker0网桥和Iptables nat表配置与主机通信;桥接模式是Docker的默认网络设置,它为每个容器分配网络命名空间,IP等,并将主机上的Docker容器连接到虚拟机。在桥上。

创建命令

1.docker run --name web -it --rm httpd

Docker镜像简介

图像介绍

docker镜像包含启动容器所需的文件系统及其内容,因此它用于创建和启动docker容器。分层构建机制,底层是bootfs,即rootfs

Bootfs:用于系统引导的文件系统,包装引导加载程序和内核,在引导容器后将被卸载以节省内存资源

Rootfs:在靴子上方,充当docker容器的根文件系统

在传统模式下,当系统启动时,内核挂载rootfs将首先进入“只读”模式,然后在完整性自检完成后将其重新附加到读写模式

在docker中,rootfs由内核作为“只读”模式安装,然后通过“联合”安装技术另外安装“可写”层。

5d6b4532eba2492b84369a006a433129

图像层

下层的图像称为父图像,底层称为基本图像。顶层是“读写”层,底层是“只读”层。

6624de08571c4642ad7612931f6c3892

Docker文件系统

高级多层统一文件系统:高级多层统一文件系统

用于实现linux文件系统的“联合挂载”

aufs是以前Unionfs的重新实现

Docker最初使用aufs作为容器文件系统层,他仍然支持它作为存储后端之一

Docker的分层图像,除了aufs,docker还拥有btrfs,devicemapper和vfs等。在ubuntun系统下,dockr默认为ubuntu aufs,而在centos7上,使用devicemapper,较新的docker使用overlay

使用overlay2进行联合安装的多层实现存储驱动程序: overlay2#抽象辅助文件系统需要构建在本地文件系统之上Backing Filesystem: xfs #Backend本地文件系统

Docker Volumes简介

Docker镜像由多个只读层叠加。启动容器时,Docker会加载只读镜像层,并在镜像堆栈的顶部添加读写层。如果正在运行的容器修改现有的现有文件,则该文件将从读写层下面的只读层复制到读写层。该文件的只读版本仍然存在,但它已被读写层中的文件副本隐藏。这是写时复制。 (COW)机制关闭并重新启动容器,其数据不受影响;但是,如果删除Docker容器,则所有更改都将丢失。

存储在联合文件系统中,不容易主机访问

容器之间的数据共享不方便

删除容器,其数据将丢失

因此,导出了音量

卷是容器上的一个或多个“目录”,它绕过联合文件系统并“绑定”到主机上的目录

Docker有两种类型的卷

绑定卷

docker run -name t1 -it -rm -v/data/volumes/t1:/data busybox#指定主机的固定目录

Dokcer管理的卷

docker run -name t1 -it -v/data busybox#/var/lib/docker /生成目录查看挂载条件

1.docker inspect -f {{。Mounts}} t1

2.docker inspect -f {{.Mounts.Destination}} t1

多个容器卷使用相同的主机目录

1.docker run --name t1 --rm -it -v/data/volumes/t1 /:/data busybox

2.docker run --name t2 --rm -it -v/data/volumes/t1:/data busybox

复制使用其他容器的卷

1.docker run --name t1 --rm -it -v/data/volumes/t1 /:/data busybox

2.docker run --name t2 --rm -it --network container: t1 --volumes-from t1 busybox

Docker安装数据卷的默认权限是读写,用户也可以通过: ro指定只读

1.docker run --name t1 --rm -it -v/data/volumes/t1 /:/data: ro busybox

Docker Registry简介

启动容器时,docker守护程序将尝试在本地获取相关图像。本地图像不存在。它将下载到捆绑软件寄存器中的映像保存到本地注册表以保存docker镜像,包括镜像层次结构和元数据。构建注册表,您还可以使用官方Docker Hub

Docker注册表分类

赞助商注册管理机构:供客户和码头工具社区使用的第三方注册管理机构

镜像注册表:供客户使用的第三方注册表

供应商注册:由发布Docker镜像的供应商提供的注册表

私人注册局:由具有防火墙和附加安全层的私人实体提供的注册表

注册表(存储库和索引)

存储库:

镜像仓库,包含特定泊坞窗图像的所有迭代版本

多个存储库可以存储在单个注册表中

存储库可分为“顶级仓库”和“用户仓库”

用户存储库名称格式为“用户名/仓库名称”

每个仓库可以包含多个标签,每个图像一个

索引:

维护用户帐户,图像验证和公共命名空间信息

相当于Registry提供了一个搜索界面来完成用户身份验证和其他功能