旧版 docker-compose 我一直以为是 python 写的,包括我手头的 rpm 版本和听说过的 pip 版本
直到有一天在某台机器上发现一个“单个文件”的,并且 ldd 它基本上没有什么外部依赖 我还以为是 golang 那个新版本,但是版本号很旧啊才 1.5.0rc1
用 strings 命令读了一下那个文件,发现里边有 libpython.so 之类的字样,应该是从 python 编译出来的单个可执行文件 https://github.com/docker/compose/releases/tag/1.5.0rc1
这种文件是怎么编译出来的呢?
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% |
2
StarUDream 2023-02-15 09:14:02 +08:00
pyinstaller
|
4
julyclyde OP @StarUDream pyinstaller 生成的文件,里面有什么痕迹吗?
|
5
0312birdzhang 2023-02-15 09:23:56 +08:00 2
|
8
yaoyao1128 2023-02-15 09:34:11 +08:00 via iPhone 1
pyinstaller
直接 objdump 一下就出来了…… .text 里面 pyi 开头的一堆 |
10
julyclyde OP 谢谢各位
我去看看那个 build 脚本 |
11
sherlockwhite 2023-02-15 10:12:40 +08:00
还有一个问题,我发现从 docker-compose 转到了 docker compose ,没研究怎么实现的,是通过 alias 类似的手段吗,
|
12
julyclyde OP @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 目录里? |
13
sherlockwhite 2023-02-15 11:55:55 +08:00
@julyclyde 不纠结这个了,还有就是为啥这个 compose 是 py 写的,golang 代码占比那么高
|
14
wheeler 2023-02-15 12:16:50 +08:00 via iPhone
compose v2 用 go 重写的。
|
15
julyclyde OP @sherlockwhite 新版 compose 是 go 的;旧版是 py
|
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 |