为 运行 编译的 go 代码构建小型容器
Building small container for running compiled go code
来自
https://docs.docker.com/articles/baseimages/
我正在尝试为 运行 编译的 go 代码构建一个基础映像,来自:
https://github.com/tianon/dockerfiles/tree/master/true
- 我试图复制到docker true.go
然后:执行:“/true”:权限被拒绝
- 也试过bash进去,然后:"bash"
然后:在$PATH 中找不到可执行文件
- 还尝试使用 debootstrap raring raring > /dev/null
然后:"bash":在 $PATH 中找不到可执行文件
你是怎么做到的?
谢谢
我不确定我是否完全理解。
链接项目中的 Dockerfile 构建了一个映像,其中除了可执行文件之外什么都没有——没有 shell 或编译器,因此 运行ning bash 将是不可能的。它通过使用特殊的 scratch
基本映像来实现这一点,它只是一个完全空的文件系统。
如果您克隆存储库并使用 Dockerfile (docker build -t go-image .
) 构建映像,它只会将可执行文件直接复制到映像中(注意 Dockerfile 复制可执行文件 true-asm
,而不是源代码 true.go
)。如果您随后使用 docker run
启动图像,它将 运行 它 (docker run go-image
).
这有意义吗?代码在本地(或由另一个容器)编译,编译后的独立可执行文件会自行放入映像中。
通常,您不想这样做,刚开始时绝对不会这样做 - 使用包含基本工具的 golang
或 debian
图像会更容易例如 shell.
来自 https://docs.docker.com/articles/baseimages/
我正在尝试为 运行 编译的 go 代码构建一个基础映像,来自: https://github.com/tianon/dockerfiles/tree/master/true
- 我试图复制到docker true.go
然后:执行:“/true”:权限被拒绝 - 也试过bash进去,然后:"bash"
然后:在$PATH 中找不到可执行文件
- 还尝试使用 debootstrap raring raring > /dev/null
然后:"bash":在 $PATH 中找不到可执行文件
你是怎么做到的?
谢谢
我不确定我是否完全理解。
链接项目中的 Dockerfile 构建了一个映像,其中除了可执行文件之外什么都没有——没有 shell 或编译器,因此 运行ning bash 将是不可能的。它通过使用特殊的 scratch
基本映像来实现这一点,它只是一个完全空的文件系统。
如果您克隆存储库并使用 Dockerfile (docker build -t go-image .
) 构建映像,它只会将可执行文件直接复制到映像中(注意 Dockerfile 复制可执行文件 true-asm
,而不是源代码 true.go
)。如果您随后使用 docker run
启动图像,它将 运行 它 (docker run go-image
).
这有意义吗?代码在本地(或由另一个容器)编译,编译后的独立可执行文件会自行放入映像中。
通常,您不想这样做,刚开始时绝对不会这样做 - 使用包含基本工具的 golang
或 debian
图像会更容易例如 shell.