1、Docker
1.1、docker的物理隔离如何实现的
1.2、docker的命令
重启
docker restart $(docker ps -a -q)
进入镜像
进入Docker容器比较常见的几种做法如下:
1.使用docker attach
2.使用SSH
3.使用nsenter
4.使用exec
目前最为常用的是第四种,exec
查看镜像
docker images
2、linux系统
2.1、Liunx的常用命令
2.2、查询摸一个文件下的摸个字符
grep
2.3、liunx查看进程之间的关系
pstree
2.4、如何确定那个模块占用的进程比较高
3、虚拟机和容器的区别
容器和虚拟机之间的主要区别在于虚拟化层的位置和操作系统资源的使用方式。
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。每个虚拟机都有独立的CMOS、硬盘和操作系统,可以像使用实体机一样对虚拟机进行操作。
容器技术可以理解为操作系统虚拟化技术,它是一种轻量级的,没有类似虚拟机的VMM层,而是通过内核创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程(容器),不同的实例相互隔离,相互之间完全无感知。可以简单地理解为容器就是一个进程沙盒,来提供进程级的隔离。
4、docker如何实现文件隔离和网络隔离?
docker可以隔离资源。
docker容器的本质是宿主机上的一个进程。
**Docker通过namespace实现了资源隔离,通过cgroups实现了资源限制,通过写时复制机制(copy-on-write)实现了高效的文件操作。
namespace 机制提供一种资源隔离方案。
PID,IPC,Network等系统资源不再试全局性的,而是属于某个特定的Namespace.
每个namespace下的资源对于其他的namespace下的资源是透明的,不可见的。
Linux 内核实现namespace的一个主要目的就是实现轻量级虚拟化(容器)服务,在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知,以达到独立和隔离的目的。
namespace(命名空间)可以隔离哪些:
文件系统需要是被隔离的
网络也是需要被隔离的
进程间的通信也要被隔离
针对权限,用户和用户组也需要隔离
进程内的PID也需要与宿主机中的PID进行隔离
容器也要有自己的主机名
有了以上的隔离,我们认为一个容器可以与宿主机和其他容器是隔离开的。
恰巧Linux 的namespace可以做到这些。
写时复制:
写入时复制(Copy-On-Write):当docker第一次启动一个容器时,初始的读写层是空的,当文件系统发送变化时,这些变化都会应用到这一层上,比如,如果想修改一个文件,这个文件首先会从该读写层下面的只读层复制到该读写层。该文件的只读版本依然存在,但是已经被读写层中的文件副本所应隐藏。 所有运行的容器可以先共享一个基本文件系统镜像,一旦需要向文件系统写数据,就引导它写到与该容器相关的另一个特定文件系统中。这样的机制避免了一个容器看到另一个容器的数据,而且容器也无法通过修改文件系统的内容来影响其他容器。