V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
binbinyouliiii
V2EX  ›  问与答

想问一下, WSL 和 Docker 的原理是不是把原有系统的 API"翻译"过来?

  •  
  •   binbinyouliiii · 2018-04-14 20:52:47 +08:00 · 4093 次点击
    这是一个创建于 2419 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在看 Docker,以前以为 Docker 是虚拟机,但是看了一下并不是,想了解一下是什么原理,但是找了一顿感觉都讲的很虚,什么集装箱啊,码头的,感觉讲不到点上,特来请教一下。

    21 条回复    2019-09-10 09:14:05 +08:00
    precisi0nux
        1
    precisi0nux  
       2018-04-14 21:03:22 +08:00 via iPhone   ❤️ 1
    chroot,讲完了。
    sundev
        2
    sundev  
       2018-04-14 21:04:16 +08:00   ❤️ 1
    个人愚见,可以从 chroot 命令来理解 docker。
    可以手动实现一下,理解会更深刻!
    ZSeptember
        3
    ZSeptember  
       2018-04-14 21:04:36 +08:00 via Android   ❤️ 1
    wsl 是,docker 不是。
    Luckyray
        4
    Luckyray  
       2018-04-14 21:22:26 +08:00   ❤️ 1
    cgroup 了解一哈,另外与虚拟机的区别这个图很清晰了,虚拟机是系统上面再来一层系统,Docker 是做资源隔离。另外 Windows 和 Mac 上的 Docker 似乎还是用 Linux 虚拟机实现的
    ![docker]( https://pic2.zhimg.com/20006deca0fccda0d536edd626835e9e_r.jpg)
    des
        5
    des  
       2018-04-14 21:22:57 +08:00 via Android   ❤️ 1
    @ZSeptember 很遗憾 wsl 并不是虚拟机

    docker 的话,可以去了解下 chroot、namespace,简单来说就是资源隔离
    硬要相比的话和 windows 上面的 sandboxie 像一点
    Luckyray
        6
    Luckyray  
       2018-04-14 21:23:55 +08:00
    咦,知乎的图片外链不行呀,我是指这个回答 https://www.zhihu.com/question/48174633/answer/109868326 的第一张图
    ech0x
        7
    ech0x  
       2018-04-14 21:32:22 +08:00 via iPhone   ❤️ 1
    docker 是容器技术。你可以理解成内核提供的资源隔离,所以 docker 是强依赖 Linux 的。
    WSL 应该是微软 Clean room 实现的一个 Linux 内核,是直接在 .NT 内核里实现的。
    个人理解
    cyspy
        8
    cyspy  
       2018-04-14 21:39:43 +08:00 via Android   ❤️ 1
    WSL 和 wine 类似,是翻译系统调用
    roychan
        9
    roychan  
       2018-04-14 21:41:08 +08:00   ❤️ 1
    WSL 是个兼容层,Docker 是个容器。
    20has
        10
    20has  
       2018-04-14 21:44:47 +08:00 via Android
    内核空间 kernel
    用户空间 rootfs
    老铁,你这了解也太浅了吧,学 docker 至少得接触下 k8s 才算了解,嘿嘿😁
    binbinyouliiii
        11
    binbinyouliiii  
    OP
       2018-04-14 21:49:01 +08:00
    @20has #10 老哥,我又不开发 Docker,久仰 Docker 大名然后了解一下而已啊
    mritd
        12
    mritd  
       2018-04-15 00:16:26 +08:00
    目前国内容器领域的书没几本靠谱的,最简单的办法就是实践,撸文档
    ryd994
        13
    ryd994  
       2018-04-15 02:21:14 +08:00 via Android
    @ech0x wsl 不是内核,脱离 Windows 无法工作。wsl 是把 Linux 的 syscall 翻译到 Windows 下执行。确实不能偷看 Linux,但是也不需要。因为这是翻译又不是真内核。
    按微软的人的脾性,怕是真能看也不屑于去看。

    docker 的核心在于隔离:namespace 和 chroot 都是为了隔离。但是隔离的只有用户态的各种。内核是同一个内核在跑。
    LosLord
        14
    LosLord  
       2018-04-15 10:00:11 +08:00 via Android
    @ryd994 话说 Docker 容器里面的“系统”升级了内核也跟主系统不影响吗?
    DT27
        15
    DT27  
       2018-04-15 10:44:35 +08:00
    当成虚拟机就行了。
    gnaggnoyil
        16
    gnaggnoyil  
       2018-04-15 18:33:21 +08:00
    @ZSeptember WSL 不是.Linux 子系统和 Win32 子系统是并列的,不存在谁用来实现谁的关系
    ryd994
        17
    ryd994  
       2018-04-17 16:26:16 +08:00 via Android
    @LosLord 除非你知道怎么 kpatch,否则都是重启才加载新内核。而宿主机重启又不管容器内的。那些个内核包,装了也是没用的文件。因为没可能加载他们。
    ryd994
        18
    ryd994  
       2018-04-17 16:28:20 +08:00 via Android
    @gnaggnoyil 既然你说是并列,那麻烦解释一下 subsystem 是什么意思?
    WSL provides a Linux-compatible kernel interface developed by Microsoft (containing no Linux kernel code[1]), which can then run a GNU userland on top of it,

    @DT27 虚拟化和容器化差别大了去了
    DT27
        19
    DT27  
       2018-04-17 16:56:05 +08:00
    @ryd994 #18 作为用户,我不管它具体是怎么实现的,用起来确实跟虚拟机一样。。。
    曾试过 win 版的 docker,确实是建了个虚拟机啊= =、
    gnaggnoyil
        20
    gnaggnoyil  
       2018-04-19 08:43:04 +08:00
    @ryd994 我说的就是子系统啊……
    Rimifon
        21
    Rimifon  
       2019-09-10 09:14:05 +08:00
    WSL 应该是基于 docker 的灵感。想想一个 alpine 才 5M,却能跑起一个 docker 服务。因此,WSL 只需要做好这 5M 的系统能干的活,就能像 docker 一样跑起 Linux。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1078 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 19:30 · PVG 03:30 · LAX 11:30 · JFK 14:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.