• Geek_6ef93d 置顶
    2018-09-08
    有读者反映,咱们重新挂载/tmp目录的实验执行完成后,在宿主机上居然可以看到这个挂载信息。。这是怎么回事呢?实际上,大家自己装的虚拟机,或者云上的虚拟机的根目录,很多都是以share方式的挂载的。这时候,你在容器里做mount也会继承share方式。这样就会把容器内挂载传播到宿主机上。解决这个问题,你可以在重新挂载/tmp之前,在容器内先执行一句:mount(“”, “/“, NULL, MS_PRIVATE, “”) 这样,容器内的根目录就是private挂载的了。
     2
     63
  • Cloud*
    2018-09-07
    1. 上面的读写层通常也称为容器层,下面的只读层称为镜像层,所有的增删查改操作都只会作用在容器层,相同的文件上层会覆盖掉下层。知道这一点,就不难理解镜像文件的修改,比如修改一个文件的时候,首先会从上到下查找有没有这个文件,找到,就复制到容器层中,修改,修改的结果就会作用到下层的文件,这种方式也被称为copy-on-write。

    2. 查了一下,包括但不限于以下这几种:aufs, device mapper, btrfs, overlayfs, vfs, zfs。aufs是ubuntu 常用的,device mapper 是 centos,btrfs 是 SUSE,overlayfs ubuntu 和 centos 都会使用,现在最新的 docker 版本中默认两个系统都是使用的 overlayfs,vfs 和 zfs 常用在 solaris 系统。

    欢迎补充和指正。
    展开

    作者回复: 课代表又出现啦

    
     218
  • Jeff.W
    2018-09-13
    继Namespace构建了四周的围墙(进程隔离),Cgroups构建了受控的天空优先使用阳光雨露(资源限制),Mount namespace与rootfs构建了脚下的大地,这片土地是你熟悉和喜欢的,不管你走到哪里,都可以带着它,就好像你从未离开过家乡,没有丝毫的陌生感(容器的一致性)~

    作者回复: 于是,你就做了一句诗

     1
     111
  • 栖枝
    2018-09-07
    whiteout,这就是我每次想把之前不需要的东西删了,但是镜像也没变小的原因啊,手动捂脸
    
     67
  • asdf100
    2018-09-07
    目录联合挂载时,如果A和B目录里的x文件内容不一样,这时如何处理?

    作者回复: 好问题。aufs是一层一层往上盖的,所以我给的例子里,A里面的x会覆盖B里面的x。

     2
     48
  • oddrock
    2018-09-07
    请问老师,听了您今天的课,认识到容器使用的内核是和宿主机内核一致的,但如果容器需要不同的内核怎么办?

    作者回复: 没!办!法!所以我去年一直在搞katacontainers,这种基于虚拟化的容器是有独立内核的。

     1
     38
  • 汤尼房
    2018-09-10
    老师你好,很好奇dockerhub上关于系统镜像的制作过程,比如对于centos7.4的镜像,首先能想到的是应该依据centos官方发布的centos7.4的系统镜像,然后将此镜像中的内核给去掉,仅保留剩下的文件、配置和目录或者是保留必要的文件、配置和目录;但通过查看centos7.4的Dockerfile之后发现其依赖的base image是scratch,然后在scratch的基础上添加centos-7.4.1708-docker.tar.xz,后来查看ubuntu镜像发现其base image也是scratch,老师能简单说下scratch基础镜像吗(镜像文件的制作过程等),猜想scratch应该是包含了多个系统之间共同的东西,否则为啥多个版本的系统镜像以及不同版本的系统镜像的基础镜像都用的是scratch,所以对scratch基础镜像很好奇,望老师指点一下

    作者回复: 很简单啊,因为scratch本身就是个空镜像。你想想,假如你是centos公司,你在发布centos镜像的时候总得FROM吧?所以docker公司就给你做了个scratch:万能的base镜像。

     1
     30
  • A-
    2018-09-07
    女朋友1 3 5追电视剧,我1 3 5追k8s。

    作者回复: 女朋友应该很开心😃

    
     28
  • Hans
    2018-11-21
    我使用的ubuntu系统使用docker时没有/var/lib/docker/aufs目录,只有/var/lib/docker/overlay2目录,通过docker inspect命令可以查看到镜像在该目录下生成的各种目录文件,
    LowerDir:指向镜像层;
    UpperDir:指向容器层,在容器中创建文件后,文件出现在此目录;
    MergedDir:容器挂载点 ,lowerdir和upperdir整合起来提供统一的视图给容器,作为根文件系统;
    WorkDir:用于实现copy_up操作。
    展开
    
     22
  • snakorse
    2018-09-07
    精彩到炸裂!!!
    
     21
  • ╯梦深处゛
    2018-09-27
    喜欢这种从出现到发展、由浅入深、由一小段代码讲述某种实现的讲述,既容易理解,也深入了解了原理。娓娓道来,很有条理,就像身临当时docker的实现场景!

    作者回复: 我一向反对源码分析。那是偷懒的态度。

    
     13
  • 吕
    2018-09-07
    请教一个低级的问题,我现在用docker部署,在多次部署以后,会导致磁盘占用空间急剧的增大,老是需要扩容,虽然对不使用的镜像定时做了删除,但还是会出现这样的问题,产生的文件也不敢在生产环境随便进行删除,只能清理镜像和容器。

    作者回复: 用kubernetes ,打开GC功能,定时清理

    
     11
  • silencedoctor
    2018-09-07
    老师你好我想请问一下 我的系统是Ubuntu16.04.4 docker是18.06.0 /var/lib/docker下并没有aufs这个文件夹 执行docker image他又确实分了层这是什么原因呢
     1
     10
  • 武坤
    2018-09-07
    在容器中修改文件时,Docker会从上到下依次在各镜像层中查找比文件。找到后,会把此文件复制到容器层(可读写层),然后修改。这就是 Copy on Write.
    
     10
  • shupian418
    2018-09-10
    ns.c 启动失败
    Parent - start a container
    Parent - container stopped

    作者回复: 得看看报错,八成是依赖之类的

     2
     9
  • Hunsbiously
    2018-09-09
    你好,这个视频是我看到的一个很好的视频,希望老师能够找机会,详细分析下.
    https://m.youtube.com/watch?v=90kZRyPcRZw#fauxfullscreen

    作者回复: 好

    
     9
  • long904
    2018-09-07
    请教老师,以我理解容器镜像依赖宿主机内核。那么如果镜像是基于Linux的系统制作而成(线上运行环境就是Linux),那么如果在Windows系统上它是不能运行这个镜像了,对吗?甚至目标机器如果内核跟镜像制作不同(比如centos5和centos7)如果是,请问该怎么理解容器跨平台部署一说?谢谢。

    作者回复: 如果你的应用依赖内核版本,那果断跨不了平台,除非再创建对应的虚拟机出来做宿主。说跨平台其实是因为大多数应用没有内核依赖。windows系统会给容器外面套一个vm,所以也能运行linux容器。

    
     7
  • 从一路
    2018-09-11
    同样遇到 ./ns 启动失败
    Parent - start a container
    Parent - container stopped

    我切换到root用户就好了
    
     6
  • Kaer
    2018-09-09
    老师你好,如果依赖了内核运行的应用,必须得重新在跟宿主机相同内核下重新打包镜像才行吗?有没有完美解决方案:比如在镜像打包的时候,打一个兼容内核的补丁。

    作者回复: 重新打包也解决不了问题,你的宿主机必须跟开发环境一致才行。linuxkit这个工具就是干这个的。

    
     6
  • 王由华
    2018-09-13
    被whiteout遮挡的文件会被清除吗?用什么命令清除的?否则镜像不是就膨胀了。

    作者回复: 哈哈,是会膨胀啦。可以压缩镜像,做法网上可以搜到。

    
     5
我们在线,来聊聊吧