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