COPY与ADD的区别: COPY:直接拷贝; ADD:拷贝+解压功
能
a.二者都是只复制目录中的文件,而不包含目录本身。
b.COPY能干的事ADD都能干,甚至还有附加功能。
c.ADD可以支持拷贝的时候顺带解压缩文件,以及添加远程文件(不在本宿主机上的文件),COPY的只能是
本地文件
d.只是文件拷贝的话可以用COPY,有额外操作可以用ADD代替。
e.docker官方建议当要从远程复制文件时,尽量用curl/wget命令来代替ADD。因为用ADD的时候会创建
更多的镜像层。镜像层的size也大。
Namespace
Linux 里面的 Namespace 机制。而 Namespace 的使用方式也非常有意思:它其实只是 Linux 创
建新进程的一个可选参数。我们知道,在 Linux 系统中创建线程的系统调用是 clone(),
而当我们用 clone() 系统调用创建一个新进程时,就可以在参数中指定 CLONE_NEWPID 参数
这时,新创建的这个进程将会“看到”一个全新的进程空间,在这个进程空间里,它的 PID 是 1。之
所以说“看到”,是因为这只是一个“障眼法”,在宿主机真实的进程空间里,这个进程的 PID 还是真实的数
值,比如 100。
Mount Namespace,用于让被隔离进程只看到当前 Namespace 里的挂载点信息;
Network Namespace,用于让被隔离进程看到当前 Namespace 里的网络设备和配置。
进程隔离:pid namespace
网络隔离:net namespace
挂载点隔离:mount namespace
进程间通信隔离:ipc namespace
独立的用户、用户组:user namespace
独立的hostname、domain name:uts namespace
Cgroups
Linux Cgroups 的设计还是比较易用的,简单粗暴地理解呢,它就是一个子系统目录加上一组资源
限制文件的组合。而对于 Docker 等 Linux 容器项目来说,它们只需要在每个子系统下面,为每个容器
创建一个控制组(即创建一个新目录),然后在启动容器进程之后,把这个进程的 PID 填写到对应控制
组的 tasks 文件中就可以了。
/sys/fs/cgroups
除 CPU 子系统外,Cgroups 的每一个子系统都有其独有的资源限制能力,比如:
blkio,为块设备设定I/O 限制,一般用于磁盘等设备;
cpuset,为进程分配单独的 CPU 核和对应的内存节点;
memory,为进程设定内存使用的限制。