首页 > 其他分享 >第一周

第一周

时间:2023-07-08 12:56:50浏览次数:23  
标签:容器 第一周 宿主机 Namespace Linux 进程 镜像

1. 总结namespace的类型及功能

namespace 是 Linux 系统的底层概念,在内核层实现。容器只是运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核。容器的本质就是一种特殊的进程,通过namespace实现容器运行空间的相互隔离后,再通过Linux Cgroups 实现资源的限制。

1.1 MNT Namespace(mount)

提供磁盘挂载点和文件系统的隔离能力 ,Linux 2.4.19开始支持。每个容器都要有独立的根文件系统有独立的用户空间,以实现在容器里面启动服务并且使用容器的运行环境,即一个宿主机是 ubuntu 的服务器,可以在里面启动一个 centos 运行环境的容器并且在容器里面启动一个 Nginx 服务,此 Nginx 运行时使用的运行环境就是 centos 系统目录的运行环境,但是在容器里面是不能访问宿主机的资源,宿主机是使用了 chroot 技术把容器锁定到一个指定的运行目录里面。

1.2 IPC Namespace(Inter-Process Communication)

提供进程间通信的隔离能力,linux2.6.9开始支持。一个容器内的进程间通信,允许一个容器内的不同进程的(内存、缓存等)数据访问,但是不能夸容器访问其他容器的数据。

1.3 UTS Namespace(UNIX Timesharing System)

提供主机名隔离能力,linux2.6.9开始支持。UTS namespace(UNIX Timesharing System 包含了运行内核的名称、版本、 底层体系结构类型等信息)用于系统标识,其中包含了 hostname 和域名 domainname ,它使得一个容器拥有属于自己 hostname 标识,这个主机名标识独立于宿主机系统和其上的其他容器。

1.4 PID Namespace(Process Identification)

提供进程隔离能力 Linux 2.6.24。Linux 系统中,有一个 PID 为 1 的进程(init/systemd)是其他所有进程的父进程,那么在每个容器内 也要有一个父进程来管理其下属的子进程,那么多个容器的进程通过 PID namespace 进程隔离(比如 PID 编号重复、容器内的主进程生成与回收子进程等)。

1.5 Net Namespace(network)

提供网络隔离能力 Linux 2.6.29。每一个容器都类似于虚拟机一样有自己的网卡、监听端口、TCP/IP 协议栈等, Docker 使用 network namespace 启动一个 vethX 接口,这样你的容器将拥有它自己的桥接 ip 地址,通常是 docker0,而 docker0 实质就是 Linux 的虚拟网桥, 网桥是在 OSI 七层模型的数据链路层的网络设备,通过 mac 地址对网络进行划分,并且在不同网络直接传递数据。

1.6 User Namespace(user)

提供用户隔离能力 Linux 3.8。User Namespace 允许在各个宿主机的各个容器空间内创建相同的用户名以及相同的用户 UID 和 GID,只是会把用户的作用范围限制在每个容器内,即 A 容 器和 B 容器可以有相同的用户名称和 ID 的账户,但是此用户的有效范围仅是当前容器内,不能访问另外一个容器内的文件系统,即相互隔离、互补影响、永不相见。

1.7 Control group (cgroup) Namespace

提供进程所属的控制组的身份隔离,Linux 4.6 支持。在一个容器,如果不对其做任何资源限制,则宿主机会允许其占用无限大的内存空间,有时候会因为代码 bug 程序会一直申请内存,直到把宿主机内存占完, 为了避免此类的问题出现,宿主机有必要对容器进行资源分配限制,比如 CPU、 内存等,Linux Cgroups 的全称是 Linux Control Groups,它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。此外,还能够对进程进行优先级设置,以及将进程挂起和恢复等操作。

2. 总结docker的命令使用(镜像管理、容器管理)

2.1镜像管理

# docker image --help
Usage: docker image COMMAND
Manage images
Commands:
build      #从Docker文件构建新的镜像
history     #查询镜像的构建历史
import     #从本地或远程的压缩包等导入镜像,可以指定导入后的镜像名称
inspect     #显示一个或多个镜像的详细信息
load      #从一个tar包或标准输入导入镜像
ls       #列出本地的所有镜像
prune      #删除本地未使用的镜像
pull      #从镜像仓库下载镜像到本地
push      #从本地上传镜像到镜像仓库
rmi       #删除一个或者多个本地镜像
save      #保存一个或者多个镜像到一个tar包(默认保存到当前终端的标准输出)
tag       #对镜像打一个新的标签

标签:容器,第一周,宿主机,Namespace,Linux,进程,镜像
From: https://www.cnblogs.com/rootnat/p/17537041.html

相关文章

  • 暑假第一周
    暑假的第一周处于算法与数据结构小学期内,在这期间完成了算法与数据结构小学期的内容,每天上午八点半到十一点半,或者两点到三点是上课时间,在这个小学期内我请假回家了五天左右,原因是亲人去世。这五天期间没有写东西。返校后验收了算法与数据结构小学期第二阶段的内容。......
  • 第一周
    1、图文并茂解释开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别?1.GPL(GNU通用公共许可证):GPL是最为严格的开源许可证之一,要求任何基于GPL许可证的软件都必须以GPL许可证发布,这意味着任何使用该软件的代码都必须以GPL许可证发布。因此,GPL许可证可以确保开源软件在任何情况......
  • 第一周随笔
    第一周作业1.图文并茂解释开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别?GPL(GNUGeneralPublicLicense)是一种开源许可证,它要求任何使用、修改或分发被授权软件的人必须将其代码开源,并且任何以GPL许可证发布的软件都必须使用相同的许可证。这意味着GPL许可证下的软件......
  • Java第一周学习
    6.25周天事项:开始着手java的初步学习计划,跟随B站博主韩顺平0基础开始学习问题:Java作为一门新入手的语言不同于c/c++的学习方式,起初理解不容易6.26周一事项:开始进入正常java课程的学习,预计完成Java语言编程和操作环境在本机上的安装问题:安装环境相对c/c++较为复杂,hellow......
  • 第一周打卡
    6月25日:星期天:早上起来去考科目一,然后顺利通过了;吃完中饭后睡了个午觉,玩了两个小时游戏,然后开始通过视频了解了如何安装jdk,并手工用javac编译HelloWorld.java成功,然后下载了也在Eclipse中编译HelloWorld.java,并开始找寻相关学习java的视频,晚上吃完饭后看电视,最后睡觉,明天准备开......
  • 第一周
    6.25周日:先是了解Java,然后安装jdk和eclipse,完成简单的helloworld编程,然后就去了解《大道至简》以及《构建之法》这两本书,决定看《大道至简》这本书,再就是上黑马训练营选择合适的Java学习视频。6.26周一:今天睡懒觉,早上10:00起床,简单洗漱之后,吃了点东西,就开始打pta,写了3道题之......
  • 第一周
    6月25日周一今天将科目一题库题刷完了,配置了环境变量,手工编译了HelloWorld做了一些基本准备工作明天准备下载Eclipse在上面编写代码6月26日周二今天下载了Elipse,看了半个小时黑马程序员明天准备进一步学习java遇到的问题:不会用Elipse,准备在进一步的学习中找到解决办法......
  • 第一周汇报总结进度
    6月26日,星期一在餐饮店打工的第七天,身心疲惫,每天并没有什么时间去系统的学习。6月27日,星期二在餐饮店打工的第八天,开始打算学习Java,在哔哩哔哩观看黑马训练营的视频。了解到Java的基本历史。6月28日,星期三在餐饮店打工的第九天,阅读《大道至简》,对我们软件工程的工程有了初步......
  • 第一周
    6.26在家上午安装了JDK11.0.18并配置了环境变量。一开始按照教程安装了JDK,但不是11.0.18,后来和我一样选软工的好朋友咨询我相关问题,她找到的教程十分全面,故我删除了原来下载的,按详细教程下载了JDK并配置了环境变量。下午从哔哩哔哩上找到了从0到1学Java视频,学习了一小时。6.27......
  • 第一周
    6.25在B站上根据教程安装Java开发环境,下载安装了jdk并配置了环境变量,学习了常见的cmd命令,环境变量。6.26根据课程内容,按照教程用Javac编译了HelloWord.java,但自己还不会写,只会抄。jdk,jdk,jre,jvm;java跨平台的原理。6.27学习了关键字和注释,单行注释,多行注释,程序从main方法开始运......