在Docker上安装运行时是否有意义?

我正在考虑在Docker上部署一些应用程序(aws beanstalk是提供程序)。 通过各种资源,我发现它build议使用一个基本的图像,在我的情况下官方 golang图像,但我想知道为什么你需要在容器上安装运行时(即Golang)。 是不是你应该在docker集装箱上部署的二进制文件?

我不是一个docker爱好者,但一般来说,Go运行时被编译到你的二进制文件中,除此之外你不需要任何东西。 Go图像包含SDK,而不是运行时。 只有当你想在容器中构build应用程序时才有用。 否则,你不需要它。

从该图像的文档: The most straightforward way to use this image is to use a Go container as both the build and runtime environment.

所以,也许Docker模式只是在图像上构build源代码,或者这只是一些人从解释语言中获得的习惯。 就个人而言,当我部署Go应用程序(不是通过docker)时,我在CI机器上构build了一个工件,这就是我正在部署的工具,而不是源代码。

我宁愿静态编译,然后只用你需要的用户空间构build一个最小的容器,下面是一个例子 。

我个人喜欢在官方的容器内部构build,然后将二进制文件复制到我的部署容器中,然后使用这样的东西将docker注入到构build容器中

 docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):$(which docker) 

这样我在我的构build容器中构build我的docker容器,只需添加一个Dockerfile ADD的二进制文件