V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
rower
V2EX  ›  Docker

在容器中执行容器中的二进制和在容器中执行宿主机的二进制有什么区别

  •  
  •   rower · 2023-12-22 15:48:35 +08:00 · 1239 次点击
    这是一个创建于 368 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我嘞个豆,事情是这样的,我有个朋友。
    他的二进制文件比如叫 dollar ,使用 docker-compose 运行
    docker-compose 如下

    dollar:
    image: alpine:xxx
    volumes:
    - /opt:/opt
    working_dir: /opt/dollar
    command: ["./dollar"]

    他没有把 dollar 这个二进制放到容器中,而是在宿主机上,使用挂载卷的方式在容器中能直接访问宿主机上的文件,然后启动的。

    感觉这个和我学的不一样啊,我学的都是在容器中构建二进制,然后在容器中直接启动了,这两种方式有啥不一样吗
    9 条回复    2024-01-01 21:27:20 +08:00
    F7TsdQL45E0jmoiG
        1
    F7TsdQL45E0jmoiG  
       2023-12-22 15:54:22 +08:00
    明显他的 image 比你的小
    nilai
        2
    nilai  
       2023-12-22 15:55:19 +08:00
    这没什么问题啊, 通过目录挂载进去的执行的, 其实 docker 中运行的进程在宿主机的进程列表中都能看到, 你可以把 docker 想像为加上了一些资源隔离机制的进程。
    harry890829
        3
    harry890829  
       2023-12-22 15:55:21 +08:00   ❤️ 1
    本身没有不一样,Linux 都是通过明明空间分隔的,最后其实都是执行了一个二进制,你学的也没有问题,但是应该是实践不多,如果是容器编译环境的话,一般是会使用一个`FROM golang:1.18 as builder`进行容器的编译,然后将编译结果和依赖文件复制到一个新的镜像中,要不然我发布一个 docker image 一定要带着我源码给出去嘛
    rower
        4
    rower  
    OP
       2023-12-22 15:57:20 +08:00
    @morenacl 没毛病
    rower
        5
    rower  
    OP
       2023-12-22 16:11:54 +08:00
    @harry890829 ok ,这个我知道了,源码在新的镜像中,便于分发
    leonshaw
        6
    leonshaw  
       2023-12-22 16:16:56 +08:00
    应该是不想每次更新版本的时候重发 image
    senhtry
        7
    senhtry  
       2023-12-22 16:34:29 +08:00   ❤️ 2
    没有问题的。golang 这些程序是 static 的,不依赖 glibc ,容器里面和外面运行都没有影响。
    如果是 c ,rust 这些需要 glibc 的,在外面编译的,不一定在容器里面能运行,glibc 版本不一定对。
    容器里面运行的程序,如果没有 privileged ,相同的 syscall 权限是有限制的,比如创建异步线程啥的之类。
    boris1993Jr
        8
    boris1993Jr  
       2023-12-22 17:57:12 +08:00 via iPhone
    @rower #5 不是源码在镜像里,而是编译出来的二进制在镜像里
    比如我的这个 dockerfile ,可以看到里面有 4 个 FROM ,但是最后发布出去的只有最后那个"final"容器里面的东西,"build"和"publish"都只是分层构建的中间产物
    https://github.com/boris1993/tiantang-auto-harvest/blob/master/tiantang-auto-harvest/Dockerfile
    julyclyde
        9
    julyclyde  
       358 天前
    这可执行文件并不是镜像的一部分啊
    相当于只提供了运行时隔离,没有提供文件系统的发行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5648 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:07 · PVG 14:07 · LAX 22:07 · JFK 01:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.