Docker容器基础

前言

Docker的概述

  • Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱
  • 鲸鱼可看作为宿主机,集装箱可理解为相互隔离的容器 ,每个集装箱中都包含了自己的应用程序
    在这里插入图片描述

一、Docker与虚拟机区别

特性Docker容器(一个进程控制)虚拟机虚拟化(完整的操作系统)
启动速度秒级分钟级
运行性能接近原生(直接在内核运行)10%-20%左右的损失50%左右损失(全虚拟化类型)
磁盘占用50-100MB3-5G
数量成百上千,每个进程可控制一个容器几十个
隔离性进程级别系统级别(更彻底)
操作系统主要支持Linux几乎所有
封装程度只封装目标代码和依赖关系,共享宿主机内核完整的操作系统,与宿主机隔离

二、虚拟化简介

2.1 虚拟化概述

虚拟化: 将应用程序和系统内核资源进行解耦,以操作系统进行隔离,目的是提高资源利用率

2.2 虚拟化类型

  • 全虚拟化: 将物理硬件资源全部通过软件的方式抽象化,最后进行调用
  • 半虚拟化: 需要修改操作系统
  • 直通: 直接调用硬件实现虚拟化功能

2.3 虚拟化功能

  1. 在一个操作系统内,模拟多个操作系统
  2. 以软件的方式模拟物理设备的功能

三、Docker容器简介

3.1 Docker概述

  • Docker是一个开源的应用容器引擎,基于go语言开发并遵循apache2.0协议开源
  • 是在Linnux容器里运行应用的开源工具
  • 一种轻量级的“虚拟机”
  • Docker的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植、自给自足的容器
  • Docker设计宗旨:Build,Ship and Run Any App,Anywhere (一次封装,到处运行)

即通过对应组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的"一次封装,到处运行"的目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。

3.2 Docker使用场景

  • 打包应用程序简化部署
  • 可脱离底层硬件任意迁移
  • 适合做微服务的部署
  • 适合持续集成和持续交付(CI/CD):开发到测试发布

3.3 使用Docker的意义

把容器化技术做成了标准平台

  • Docker 引擎统一基础设施环境—— docker 容器环境(引擎)
  • Docker 引擎统一程序打包(装箱)方式 —— docker 镜像
  • Docker 引擎统一程序部署(运行)方式 —— docker 容器

3.4 Docker三要素(核心组件)

三要素概念
Image(镜像)一个面向Docker容器引擎的只读模板
Container(容器)从镜像创建的运行实例
Repository(仓库)集中保留镜像的地方,分为共有仓库和私有仓库

镜像是Docker运行容器的前提,仓库是存放镜像的场所,可见镜像更是Docker的核心

Image(镜像)

Docker 镜像可以看作是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

Container(容器)

容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。

Repository(仓库)

Docker仓库是用来集中保存镜像的地方 ,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public) 或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

仓库分为:

  • 公有仓库:Docker官方仓库
  • 私有仓库:个人化、私有化的仓库

3.5 容器特性

特性——》性能损耗10-20%

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:可以即时部署更新和升级。
  • 便携式:可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:可以增加并自动分发容器副本。
  • 可堆叠:可以垂直和即时堆叠服务。

四、 名称空间(namespace)

Docker使用namespaces提供容器的隔离工作区的技术;运行容器时,Docker为该容器创建一组名称空间。这些名称空间提供了一层隔离,容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。

容器完美的实现了6个名称空间隔离(namespace资源隔离-用容器化技术封装):

mount 文件系统,挂载点
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域
ipc 信号量、消息队列,共享内存(理解,不同的应用调用的时候应该使用不同的内存空间)
net 网络设备、网络协议栈、端口等

Docker Engine 在 Linux 上使用以下名称空间:

  • 该pid命名空间:进程隔离(PID:进程ID)
  • 该net命名空间:管理网络接口(NET:网络)
  • 该ipc命名空间:管理访问IPC资源(IPC:进程间通信)
  • 该mnt命名空间:管理文件系统挂载点(MNT:mount)
  • 该uts命名空间:隔离内核和版本标识符。(UTS:Unix时间共享系统)

五、 控制组(Control Groups)

  • 六种名称空间是由cgroups管理的
  • 最后一种centos的cgroups管理版本是3.8版本,3.6和3.5用不了
  • cgroups 管理linux内核态中资源管理的模块
  • cgroups 管理一些系统资源
  • 不是docker原生的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值