【Docker】Docker基本概念

Docker基本概念

  • 1.Docker概述
    • [1.1 Docker是什么?](#1.1 Docker是什么?)
    • [1.2 Docker的宗旨](#1.2 Docker的宗旨)
    • [1.3 容器的优点](#1.3 容器的优点)
    • [1.4 Docker与虚拟机的区别](#1.4 Docker与虚拟机的区别)
    • [1.5 容器在内核中支持的两种技术](#1.5 容器在内核中支持的两种技术)
    • [1.6 namespace的六大类型](#1.6 namespace的六大类型)
  • 2.Docker核心概念
    • [2.1 镜像](#2.1 镜像)
    • [2.2 容器](#2.2 容器)
    • [2.3 仓库](#2.3 仓库)
  • [3. 知识点总结](#3. 知识点总结)
    • [3.1 Docker是什么?](#3.1 Docker是什么?)
    • [3.2 容器和虚拟机的区别](#3.2 容器和虚拟机的区别)
    • [3.3 6种命名空间(Namesapce)](#3.3 6种命名空间(Namesapce))

1.Docker概述

1.1 Docker是什么?

  • 是一个开源的应用容器引擎,基于go语言开发并遵循apache2.0协议开源
  • 是在Linux容器里运行应用的开源工具
  • 是一种轻量级的 "虚拟机"
  • Docker的容器技术,可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器
  • Docker的Logo设计为蓝色鲸鱼,拖着许多集装箱

鲸鱼可以看作宿主机,集装箱可理解为相互隔离的容器,每个集装箱中都包含自己的应用程序

1.2 Docker的宗旨

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

1.3 容器的优点

  • 灵活:即使是最复杂的应用也可以集装箱化
  • 轻量级:容器利用并共享主机内核
  • 可互换:可以及时部署更新和升级
  • 便携式:可以在本地构建,部署到云,并在任何地方运行
  • 可扩展: 可以增加并自动分发容器副本
  • 可堆叠:可以垂直和即时堆叠服务
  • 容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
  • 虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

1.4 Docker与虚拟机的区别


1.5 容器在内核中支持的两种技术

Docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制 ,通过写时复制技术(copy-on-write)实现高效文件操作 (类似于虚拟机的磁盘,比如分配500g并不是实际占用物理磁盘500g,只有当需要修改时才复制一份数据)

1.6 namespace的六大类型

2.Docker核心概念

2.1 镜像

Docker的镜像是创建容器的基础,类似于虚拟机的快照,可以理解为一个面向docker引擎的只读模板.
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包括代码、运行时间、库、环境变量和配置文件。
docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统.因为大部分的镜像都是基于某个操作系统来构建,所以很轻松的就可以构建本地和远端一样的环境,这也是docker镜像的精髓。

2.2 容器

docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看作是一个简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等) 和运行在其中的应用程序

2.3 仓库

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

Docker的镜像 、容器、日志等内容全部都默认存储在 /var/lib/docker

3. 知识点总结

3.1 Docker是什么?

sql 复制代码
docker是一个go语言开发的应用容器引擎,用来运行容器里的应用。docker是用来管理容器和镜像的一种工具。

容器引擎:docker containerd  podman  rocket

3.2 容器和虚拟机的区别

容器 虚拟机
所有容器共享宿主机的内核 每个虚拟机都有独立的操作系统和内核
使用namesapce隔离资源,使用cgroup限制资源的最大使用量 完全隔离,每个虚拟机都有独立的硬件资源
秒级启动速度 分钟级启动速度
容器相当于宿主机的进程,性能几乎没有损耗 需要hyervisor(虚拟机管理程序)对宿主机资源寻访问,至少有20%~50%资源损耗
单机容量能够支持成百上千个容器 单机容量只能支持最多几十个虚拟机

3.3 6种命名空间(Namesapce)

序号 命名空间类型 功能说明
No.1 MNT Namespace 提供磁盘挂载点和文件系统的隔离能力,使得每个进程只能看到自己的文件系统挂载点和文件系统层次结构。
No.2 IPC Namespace 提供进程间通信的隔离能力,:使得每个进程只能看到自己和同一命名空间中的进程的进程间通信(IPC)机制。
No.3 Net Namespace 提供网络隔离能力,使得每个进程只能看到自己的网络接口和路由表,从而实现网络隔离。
No.4 UTS Namespace 提供主机名隔离能力,使得每个进程只能看到自己的主机名和域名。
No.5 PID Namespace 提供进程隔离能力,使得每个进程只能看到自己及其子进程的进程树。
No.6 User Namespace 提供用户隔离能力,使得每个进程只能看到自己和同一命名空间中的进程的用户和用户组。
相关推荐
C++忠实粉丝9 分钟前
计算机网络socket编程(3)_UDP网络编程实现简单聊天室
linux·网络·c++·网络协议·计算机网络·udp
淡水猫.15 分钟前
Fakelocation Server服务器/专业版 ubuntu
运维·服务器·ubuntu
wenyue112121 分钟前
Ease Monitor 会把基础层,中间件层的监控数据和服务的监控数据打通,从总体的视角提供监控分析
运维·中间件·监控
量子网络28 分钟前
debian 如何进入root
linux·服务器·debian
时光の尘31 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
我们的五年35 分钟前
【Linux课程学习】:进程描述---PCB(Process Control Block)
linux·运维·c++
灼烧的疯狂1 小时前
K8S + Jenkins 做CICD
容器·kubernetes·jenkins
运维老司机1 小时前
Jenkins修改LOGO
运维·自动化·jenkins
D-海漠1 小时前
基础自动化系统的特点
运维·自动化
我言秋日胜春朝★1 小时前
【Linux】进程地址空间
linux·运维·服务器