走进容器的心里——理解Docker

目录

前言

什么是Docker

Docker的使用场景

Docker引擎(Docker Engine)

/p>

Docker的架构(docker architecture)

                Docker原理

nbsp; 

         使用Docker的意义/优势

名称空间(NameSpaces)

                 Docker Engine在Linux上使用名称空间

                container和vm的区别

控制组(Container groups)

部署docker

                 设置镜像加速

                络优化

                docker的一些简单命令

运行 

总结


前言

        企业中,开发——》运维整体流程

1、首先由开发进行代码研发,研发好之后进行编译、打包(一般会使用maven工具打war包或者jar包)

2、打完包之后,放置对应地运行时环境中,进行试运行

3、中间会加上一些测试过程,测试代码的有效性、可用性和可执行性

4、以上测试完成之后,运维会将这个软件包拉过来,运行在实际生产的运行环境中。

        此时我们会想到一个问题,在以上第2点中,不同的开发语言的运行环境混淆在一起运行会有很大的隐患,以及不便。

传统中,所谓的运行环境,例如tomcat、PHP等

容器中,所谓的运行环境,指的时“容器”内部

在此之前,容器——》是一个运行的环境,构成容器的组件时images镜像(一个运行时的环境模板)

Docker就是在容器中脱颖而出的一个开源应用容器引擎。

什么是Docker

        docker是一个用于开发、交付和运行应用程序的开放平台。docker使我们能够将应用程序与基础架构分开,从而可以快速交付软件。是一个开源的应用容器引擎,让开发者可以打包大门的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

        沙箱(sandbox):在计算机安全领域,沙箱是一种程序的隔离运行机制,Docker从2013年开始“一炮而红”,直到现在做到“build once,run anywhere(一次构建,多个地方执行)”可以将同一个构建版本用于开发、测试、预发布、生产等环境中,并且做到了与底层操作系统的解耦。在此基础上还进一步发展出cass(容器即服务)技术、

Docker的使用场景

K8s image镜像+ container容器的方式
war jar—》github gitlab私有仓库(代码仓库)—》jenkins(测试)(应用程序封装/构建镜像)—》运维下载,使用容器技术进行运行/发布

        打包应用程序解部署,可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦)例如:服务器从腾讯云迁移到阿里云,持续集成和持续交付(CI/CD)开发测试发布,部署微服务,提供PAAS(平台及服务)产品{OpenStack的云主机类似于阿里云的ECS、属于IAAS,Docker(K8S)属于PAAS}

IAAS:基础设施及服务

SAAS:应用即服务

PAAS:平台及服务

Docker引擎(Docker Engine)

        Docker Engine是具有以下主要组件的客户端——服务器应用程序

服务器是一种长期运行的程序,称为守护程序进程(dockerd命令)。

        RESI API,它指定程序可以用来守护程序进行通信并指示其操作的接口

命令行界面(cli) 客户端(docker命令)

Docker的架构(docker architecture)

        Docker使用客户端——服务器架构,Docker客户端与Docker守护进程进行对话,该守护进程完成了构建、运行和分发Docker容器的繁重工作

        Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快

Docker Client:客户端时许多Docker用户于Docker交互的主要方式。当使用诸如之类的命令对docker run,客户端会将这些命令发送到dockerd,以执行执行命令,该docker命令使用Docker API。Docker客户端可以与多个守护进行通信

Docker daemon:守护进程侦听Docker API请求并管理Docker对象,例如图像、容器、 络和卷。守护程序还可以与其他守护程序通信以管理Docker服务

Docker三大组件

Docker images(镜像):一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板,比如 Centos系统。

Docker Container(容器):容器是独立运行的一个或一组应用,基于镜像的一种运行时状态。是镜像运行时的实体。

Dcoker Registry(镜像仓库):Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库

仓库大类:1、公共仓库—》docker hub 2、私有仓库registryharbor
docker镜像
docker hub公共仓库
docker-harbor 上传下载方便、安全

                Docker原理

借用 上的背景图,做了一些注释。图片如有侵权,联系删除 

         使用Docker的意义/优势

三个统一:①封装的模式image ②运行时环境container  统一的平台engine

1、docker引擎统一了基础设施环境——docker容器环境引擎

2、docker引擎统一了程序打包(装箱/封装) 方式——docker镜像

3、docker引擎统一了程序部署(运行)方式——docker容器

实现了一次构建、多次、多处使用

镜像————》封装的某一时刻的服务/应用状态

容器————》应用跑起来的状态(正常提供服务的状态,运行时)

名称空间(NameSpaces)

        Docker使用一种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一组名称空间。

        这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。

容器隔离了6个名称空间(namespaces资源隔离——用容器化技术封装)

cgroup资源控制与namespaces 结合控制管理了6个名称空间资源(以下)
mount :文件系统,挂载点——》一个文件系统内,不能重复挂载一个指定的目录,例如/mnt

user:操作进程的用户和组

pid:进程编

uts:主机名和主机域

ipc:信 量、消息队列、共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)

net: 络设备、 络协议栈、端口等

                 Docker Engine在Linux上使用名称空间

该pid命名空间:进程隔离(PID:进程id)

该net命名空间:管理 络接口(NET: 络)

该ipc命名空间:管理访问ipc资源(ipc:进程间通信)

该mnt命名空间:管理文件系统挂载点(MNT:mount)

该uts命名空间:隔离内核和版本标识符(UTS:Unix时间共享系统)

PS:

Cgroups:是Linux内核态中资源管理的模块,管理一些系统资源

                container和vm的区别

container vm
启动速度 秒级(进程控制) 分钟级(来宾操作系统管理)
运行性能 接近原生(直接在内核中运行90%) 50%左右损失
磁盘占用 MB GB(操作系统镜像(2GB))
数量 成百上千(进程) 一般几十台
隔离性 进程级别 系统级别(更彻底)
操作系统 主要支持Linux(只需要支持引擎) 几乎所有
封装程度 只打包项目代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机隔离

Docker主要处理了vm的环境孤岛的一个问题

控制组(Container groups)

        Linux上的Docker引擎还依赖于另一种称为控制组(Cgroups)的技术。Cgroups将应用程序限制为一组特定的资源,控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如:可以限制特定容器可用地内存

部署docker

首先安装docker所需的依赖包

 设置阿里云镜像源

可以查看docker-ce.repo这个镜像 ,是docker-ce源的一些信息

 安装doceker-ce( 区版)

开启docker

                 设置镜像加速

阿里云镜像加速的官

因为我在之前启动过了,会有data目录,设置完成之后会自动生成daemon.json (守护进程的配置文件),没启动要重载守护进程

systemctl daemon-reload

systemctl restart docker

                络优化

为什么要做优化

因为docker 桥默认的IP地址是172.17.0.1,意味着我们需要跨 段,所有要有一个地址转发

刷新

                docker的一些简单命令

docker向客户端发送images请求,查看容器中有几个镜像

 查看有多少个容器ps、ps-a查看所有状态的容器

 查看版本

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年1月8日
下一篇 2022年1月8日

相关推荐