【问题标题】:Can I use docker tmpfs in WSL2 for running docker containers on RAM?我可以在 WSL2 中使用 docker tmpfs 在 RAM 上运行 docker 容器吗?
【发布时间】:2020-10-17 09:56:26
【问题描述】:

docker tmpfs 正在开发 wsl2。
如果我在 WSL2 中运行它:

docker run -it --rm -e POSTGRES_PASSWORD=secret --tmpfs /var/lib/postgresql/data postgres:13-alpine sh

整个容器会在内存中运行吗?

【问题讨论】:

    标签: docker windows-subsystem-for-linux wsl-2 tmpfs


    【解决方案1】:

    [编辑] 正如@Nik 发现的那样,WSL 中的tmpfs 当前映射到文件系统。在命令行级别,它像在 RAM 中映射一样工作,但它实际上映射到文件系统。因此,请注意这一警告,直到它按照人们的假设实施。

    根据您的第一个问题:“docker tmpfs 是否在 wsl2 上工作?” 看来答案是肯定的。事实上,尝试运行这样的容器:

    $ docker run -it --name tmptest --mount type=tmpfs,destination=/mytmp busybox 
    

    如果您随后检查容器,您可以看到 /mytmp 正确安装为tmpfs:

    "Mounts": [
        {
            "Type": "tmpfs",
            "Source": "",
            "Destination": "/mytmp",
            "Mode": "",
            "RW": true,
            "Propagation": ""
        }
    ]
    

    关于第二个问题的一些说明“整个容器将在 RAM 中运行?”

    1. 它只是存储在 RAM 中的文件夹 /var/lib/postgresql/data 的内容, 不是“整个容器”,不管你怎么想。

    2. 在我看来,您不是在运行 db,而是在运行 shell。 所以,除非你从 shell 启动数据库,否则我猜你会有 在 RAM 中拥有/var/lib/postgresql/data 并没有什么特别的优势。

    3. 从技术上讲,任何程序都必须加载到 RAM 中 工作,或者至少是当前正在执行的部分。

    【讨论】:

    • 请注意,它确实有效,但在 WSL2 下,它似乎实际上不是 RAM 支持的。 reddit.com/r/bashonubuntuonwindows/comments/69zez8/…
    • 很好@Nik,我不知道。但是,您提到的帖子是三年前的。你知道它是否仍然适用?
    • 确实如此 - 我昨天在尝试优化 WSL 中的某些内容时发现了这一点。
    • @Nik 很伤心。我使用 WSL2 在 Windows 上使用 11ty 开发静态网站,并在 dev/watch 模式下使用tmpfs 作为输出文件夹,以使我的 SSD 免于大量写入。我的配置正在运行,但是 - 根据您的 cmets - 为此目的使用 tmpfs 是没有用的......您知道如何在 WSL2 中制作真正的 ramdisk 的任何想法/替代方案吗?
    • 我认为这并不容易,但您可以尝试查看另一种 tmpfs 实现。或者对于您的场景,甚至网络文件系统也可以为您工作(以性能为代价)
    猜你喜欢
    • 1970-01-01
    • 2020-12-06
    • 2017-07-17
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2022-01-03
    • 2020-11-12
    相关资源
    最近更新 更多