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

docker-compose 那个单文件是怎么编译出来的。不是 golang!

  •  
  •   julyclyde ·
    julyclyde · 2023-02-15 09:05:33 +08:00 · 2359 次点击
    这是一个创建于 680 天前的主题,其中的信息可能已经有所发展或是发生改变。

    旧版 docker-compose 我一直以为是 python 写的,包括我手头的 rpm 版本和听说过的 pip 版本

    直到有一天在某台机器上发现一个“单个文件”的,并且 ldd 它基本上没有什么外部依赖 我还以为是 golang 那个新版本,但是版本号很旧啊才 1.5.0rc1

    用 strings 命令读了一下那个文件,发现里边有 libpython.so 之类的字样,应该是从 python 编译出来的单个可执行文件 https://github.com/docker/compose/releases/tag/1.5.0rc1

    这种文件是怎么编译出来的呢?

    16 条回复    2023-03-02 14:49:28 +08:00
    sarices
        1
    sarices  
       2023-02-15 09:13:50 +08:00
    Languages
    Go
    95.4%

    Dockerfile
    2.9%

    Makefile
    0.7%

    Gherkin
    0.5%

    HCL
    0.3%

    Shell
    0.1%

    HTML
    0.1%
    StarUDream
        2
    StarUDream  
       2023-02-15 09:14:02 +08:00
    pyinstaller
    julyclyde
        3
    julyclyde  
    OP
       2023-02-15 09:15:53 +08:00
    @sarices 你用什么不靠谱的软件对这个文件进行鉴定了吗?
    julyclyde
        4
    julyclyde  
    OP
       2023-02-15 09:16:14 +08:00
    @StarUDream pyinstaller 生成的文件,里面有什么痕迹吗?
    sarices
        6
    sarices  
       2023-02-15 09:26:35 +08:00
    @julyclyde github 仓库页面右下角就有写着
    sarices
        7
    sarices  
       2023-02-15 09:29:27 +08:00
    我明白了,旧版本是 python 新版本是 go 仓库统计的是当前主版本
    @julyclyde
    yaoyao1128
        8
    yaoyao1128  
       2023-02-15 09:34:11 +08:00 via iPhone   ❤️ 1
    pyinstaller
    直接 objdump 一下就出来了……
    .text 里面 pyi 开头的一堆
    julyclyde
        9
    julyclyde  
    OP
       2023-02-15 09:41:23 +08:00
    @sarices “不是 golang”这句话我可是写在标题里的
    julyclyde
        10
    julyclyde  
    OP
       2023-02-15 09:41:57 +08:00
    谢谢各位
    我去看看那个 build 脚本
    sherlockwhite
        11
    sherlockwhite  
       2023-02-15 10:12:40 +08:00
    还有一个问题,我发现从 docker-compose 转到了 docker compose ,没研究怎么实现的,是通过 alias 类似的手段吗,
    julyclyde
        12
    julyclyde  
    OP
       2023-02-15 10:15:16 +08:00
    @sherlockwhite
    $ rpm -ql docker-compose-plugin
    /usr/libexec/docker/cli-plugins/docker-compose
    /usr/share/doc/docker-compose-plugin
    /usr/share/doc/docker-compose-plugin/LICENSE
    /usr/share/doc/docker-compose-plugin/MAINTAINERS
    /usr/share/doc/docker-compose-plugin/NOTICE
    /usr/share/doc/docker-compose-plugin/README.md
    /usr/share/licenses/docker-compose-plugin
    /usr/share/licenses/docker-compose-plugin/LICENSE
    /usr/share/licenses/docker-compose-plugin/NOTICE

    看起来是把 compose 放到了 docker cli 的 plugin 目录里?
    sherlockwhite
        13
    sherlockwhite  
       2023-02-15 11:55:55 +08:00
    @julyclyde 不纠结这个了,还有就是为啥这个 compose 是 py 写的,golang 代码占比那么高
    wheeler
        14
    wheeler  
       2023-02-15 12:16:50 +08:00 via iPhone
    compose v2 用 go 重写的。
    julyclyde
        15
    julyclyde  
    OP
       2023-02-15 12:34:26 +08:00
    @sherlockwhite 新版 compose 是 go 的;旧版是 py
    qq296015668
        16
    qq296015668  
       2023-03-02 14:49:28 +08:00
    v1 打包 pyinstaller docker-compose.spec
    v2 打包 go build -trimpath -tags "$BUILD_TAGS" -ldflags "$(cat /tmp/.ldflags) -w -s" -o dist/docker-compose ./cmd
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5460 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 08:41 · PVG 16:41 · LAX 00:41 · JFK 03:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.