热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

docker(一)架构概述及安装

一、初识Docker1.Docker概述官网:www.docker.comdocker官方镜像仓库:hub.docker.comDocker是一个开源的应用容器引擎,让
一、初识 Docker

1.Docker 概述

  • 官网:www.docker.com

  • docker官方镜像仓库:hub.docker.com

mark

  • Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口

1.为什么会有docker出现?

  • 以linux而言,linux操作系统会有一个主进程pid=1,派生出其他进程来控制不同服务
    例如:pid=2—python
       pid=3—java
       pid=4—php
    三个服务可能会相互影响
  • 使用者期望讲这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本,一次延伸出 能否将这三种服务分别封装起来,所以就有了kvm虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境,而随着技术发展,虚拟化技术开销较大(例如:只要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)由此,延伸出了容器技术

2.docker是啥

  • docker是基于容器技术的轻量级虚拟化解决方案;
  • docker是容器技术,把linux的cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行cli、api等)c/s

3.使用docker有什么意义

  • docker引擎统一了基础设施环境-docker环境―—》image —》封装一个简易的操作系统
  • docker引擎统一了程序打包(装箱/封装-类比于集装箱)方式-docker镜像—》images
  • docker引擎统一了程序部署(运行)方式-docker容器——》基于镜像-》运行为容器(可运行的环境)
  • 实现了一次构建、多次、多处使用
  • 需要内核在3.8以上

4.docker与VM区别

不同点 container VM
启动速度 秒级(进程控制) 分钟级(来宾操作系统管理)
运行性能 接近原生(共享内核) 50%左右损失
磁盘占用 MB GB (操作系统镜像2G)
数量 成百上千(进程) 一般几十台(操作系统级别)
隔离性 进程级别 系统级别(更彻底)
操作系统 主要支持Linux(只需要支持引擎) 几乎所有(吃宿主机操作系统的支持)
封装程度 只打包项目代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机I隔离
  • docker解决了vm的一个环境孤岛的问题
  • docker可以自定义传参(创建-创建镜像/容器、启动(基于镜像启动)之前)
二、docker的使用场景
  • K8s image镜像+ container容器的方式
  • war iar —》aithub aitlab 私有仓库(代码仓库)—》jenkins(测试)
  • (应用程序封装/构建镜像)—》运维下载,使用容器技术进行运行/发布
  • 打包应用程序简单部署
  • 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
  • 持续集成和持续交付(CI/CD) :开发到测试发布
  • 部署微服务
  • 提供PAAS产品(平台即服务){OpenStack的云主机类似于阿里云的Ecs,属于IAAS、Docker (K8s) 属于PAAS}

docker三要素

  • 镜像:模板
  • 容器:基于镜像,运行状态/运行时状态
  • 仓库:存放镜像模板
三、Docker引擎(Docker Engine)
  • Docker Engine是具有以下主要组件的c/s客户端-服务器应用程序:
  • server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)
  • CLIENT端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口
  • 命令行界面(CLI)客户端( docker命令)。

docker run docker start docker rm 四、docker的架构

  • Docker使用客户端-服务器架构。Docker 客户端与Docker守护进程进行对话,该守护进程完成了构建,运行和分发nocker容器的繁重工作。
  • Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快
  • Docker Cclient: 客户端/提供一个与用户交互,展示的平台+管理、控制docker服务端(功能)的工具 docker
  • Docker客户端(docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令时docker run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用pocker APT。Docker客户端可以与多个守护程序通信。
  • Docker daemon:守护进程
  • Docker守护程序( dockerd)侦听Docker
  • API请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理pocker服务。
  • Docker images:镜像
  • cgroups namespace
  • 容器可以被打包成镜像
  • Docker container:容器
  • Docker registry:镜像仓库(yum仓库)
小结

docker三大组件
①镜像:一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板
②容器:基于镜像的一种运行时状态
③仓库:存放image镜像,仓库大类:1、公共仓库—》docker hub
                 2、私有仓库registry harbor


五、名称空间
  • Docker使用一种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一组名称空间。
  • 这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。
  • Docker Engine在Linux上使用以下名称空间:
名称空间 描述
mount 文件系统,挂载点—》》一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域
ipc 信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
net 网络设备、网络协议栈、端口等
  • 该pid命名空间:进程隔离(PID:进程ID) 。
  • 该net命名空间:管理网络接口(NET:网络)。
  • 该ipc命名空间:管理访问IPc资源( IPC:进程间通信)。
  • 该mnt命名空间:管理文件系统挂载点(MNT::mount ) 。
  • 该uts命名空间:隔离内核和版本标识符。(UTS:Unix时间共享系统)。
六、控制组
  • Linux上的Docker引擎还依赖于另一种称为控制组(cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。
七、安装docker

1.安装需要的依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

2. 配置阿里docker镜像源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.本地索引缓存

yum makecache fast

 4.安装docker

yum install docker-ce -y #启动docker systemctl start docker #查看是否安装成功 docker version

5.阿里云镜像加速

5.1 登陆阿里云找到容器服务,找到镜像加速器

在这里插入图片描述

 5.2 配置使用

mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https:加速地址"] } EOF systemctl daemon-reload systemctl restart docker

  • 生产经验

#docker-server端配置文件daemon . json { "graph" : " / data/docker" , #数据目录/var/ lib/docker "storage-driver" : "overlay2" , #存储引擎,早期的时候存储引擎使用的是aufs,现在是overlay2 "insecure-registries": [ "registry.access.redhat.com" , "quary.io"] #私有仓库 "registry-mirrors" :[ "https :/lq"] #镜像加速 "bip": "172.7.5.1/24", #docker网络 "exec-opts" : [ "native.cgroupdriver=systemd" ], #启动时候的额外参数(驱动,k8s使用) " live-restore" : true #当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离) } 以上是建议的配置项 docker容器网络生产经验 docker 的网络建议和宿主机的工P"对照” 比如宿主机 10.2.5.6容器的地址就可以修改为172.5.6.1,这样方便在故障发生时,更容易定位故障节点位置

6.网络优化

vim /etc/sysctl.conf net.ipv4.ip_forward=1 sysctl -p systemctl restart network systemctl restart docker

7.测试docker

docker run hello-world

请添加图片描述

  • 运行成功
  • docker images可以看到刚才下载的hello-world

请添加图片描述

 8.run的运行流程图

请添加图片描述

 总结
  • docker底层原理
    由cgroup和namespaces两者构成了docker底层原理
    cgroup资源控制与namespaces结合,控制管理的6个名称空间资源
名称空间 描述
mount 资源控制与namespaces结合控制管理了6个名称空间资源(以下)
user 文件系统,挂载点—》》一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
pid 进程编号
uts 主机名和主机域
ipc 信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
net 网络设备、网络协议栈、端口等
  • docker三要素
    镜像:模板
    容器:基于镜像,运行状态/运行时状态
    仓库:存放镜像模板

推荐阅读
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • 用LGWR WORKER的例子介绍strace分析Oracle数据库行为的方法
    可观测性能力是IT运维的强有力的支撑。日志告警、指标是两种在运维中很常用的可观测性指标。 ... [详细]
  • k8s进阶之搭建私有镜像仓库
    企业级私有镜像仓 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 智慧博物馆信息系统建设方案
    3.信息化系统建设3.1博物馆RFID藏品管理系统3.1.1系统概述博物馆藏品保管是一项十分复杂又繁琐的工作。从事保管工作除了经常、及时地进行藏品的登记、分类、编目、保养和修 ... [详细]
author-avatar
老黑_微笑
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有