我考虑在docker上部署一些应用程序(aws beanstalk是提供者)。通过各种资源,我发现它建议使用基本图像,在我的例子中是official golang图像,但我想知道你为什么需要安装运行时(即Golang) )在容器上。你不应该在docker容器上部署二进制文件吗?
答案 0 :(得分:1)
我不是一个码头爱好者,但一般来说,Go运行时被编译成你的二进制文件,除此之外你不需要任何东西。 Go图像包含SDK,而不是运行时。它仅在您想要在容器中构建应用程序时才有用。否则你不需要它。
从该图片的文档:The most straightforward way to use this image is to use a Go container as both the build and runtime environment.
所以也许这是一个Docker模式,只是在图像上构建你的源代码,或者它只是一些人从解释语言中获得的习惯。就个人而言,当我部署Go应用程序(而不是通过docker)时,我在CI机器上构建了一个工件,这就是我正在部署的,而不是源代码。
答案 1 :(得分:0)
我更喜欢静态编译,然后构建一个只有你需要的用户空间的最小容器,这里是an example。
我个人喜欢在官方容器内部构建,然后将二进制文件复制到我的部署容器中,我将docker注入到我的构建容器中,类似这样
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):$(which docker)
这样我在构建容器中构建了docker容器,只需添加带有Dockerfile ADD的二进制文件