1
F7TsdQL45E0jmoiG 332 天前
明显他的 image 比你的小
|
2
nilai 332 天前
这没什么问题啊, 通过目录挂载进去的执行的, 其实 docker 中运行的进程在宿主机的进程列表中都能看到, 你可以把 docker 想像为加上了一些资源隔离机制的进程。
|
3
harry890829 332 天前 1
本身没有不一样,Linux 都是通过明明空间分隔的,最后其实都是执行了一个二进制,你学的也没有问题,但是应该是实践不多,如果是容器编译环境的话,一般是会使用一个`FROM golang:1.18 as builder`进行容器的编译,然后将编译结果和依赖文件复制到一个新的镜像中,要不然我发布一个 docker image 一定要带着我源码给出去嘛
|
5
rower OP @harry890829 ok ,这个我知道了,源码在新的镜像中,便于分发
|
6
leonshaw 332 天前
应该是不想每次更新版本的时候重发 image
|
7
senhtry 332 天前 2
没有问题的。golang 这些程序是 static 的,不依赖 glibc ,容器里面和外面运行都没有影响。
如果是 c ,rust 这些需要 glibc 的,在外面编译的,不一定在容器里面能运行,glibc 版本不一定对。 容器里面运行的程序,如果没有 privileged ,相同的 syscall 权限是有限制的,比如创建异步线程啥的之类。 |
8
boris1993Jr 332 天前 via iPhone
@rower #5 不是源码在镜像里,而是编译出来的二进制在镜像里
比如我的这个 dockerfile ,可以看到里面有 4 个 FROM ,但是最后发布出去的只有最后那个"final"容器里面的东西,"build"和"publish"都只是分层构建的中间产物 https://github.com/boris1993/tiantang-auto-harvest/blob/master/tiantang-auto-harvest/Dockerfile |
9
julyclyde 322 天前
这可执行文件并不是镜像的一部分啊
相当于只提供了运行时隔离,没有提供文件系统的发行 |