Go(又称Golang)是由Google开发的编程语言。它是一种静态类型语言,语法大致源自C,但增加了垃圾回收、类型安全、一些动态类型能力、额外的内置类型(如变长数组和键值映射)以及大型标准库。
***.org/wiki/Go_(programming_language)
!https://raw.githubusercontent.com/docker-library/docs/01c***b2fe592c1f93a13b4e289ada0e3a1/golang/logo.png
使用此镜像最直接的方式是将Go容器同时用作构建和运行环境。在您的Dockerfile中,编写如下内容可以编译并运行项目:
dockerfileFROM clefos/golang
此镜像包含多个ONBUILD触发器,可覆盖大多数应用场景。构建过程会COPY . /go/src/app、RUN go get -d -v和RUN go install -v。
此镜像还包含CMD ["app"]指令,这是运行镜像时不带参数的默认命令。
然后您可以构建并运行Docker镜像:
console$ docker build -t my-golang-app . $ docker run -it --rm --name my-running-app my-golang-app
注意: golang:onbuild中的默认命令实际上是go-wrapper run,其中包含set -x,因此应用启动时会将二进制名称打印到stderr。如果不希望此行为,可以添加CMD ["app"](如果使用Go自定义导入路径,则为CMD ["myapp"]),直接运行构建的二进制文件以消除此输出。
有时可能不适合在容器内运行应用。要在Docker实例内编译而非运行应用,可以编写如下命令:
console$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang go build -v
这会将当前目录作为卷添加到容器,将工作目录设置为该卷,并运行go build命令,该命令会编译工作目录中的项目并将可执行文件输出为myapp。或者,如果您有Makefile,可以在容器内运行make命令:
console$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang bash -c make
如果需要为linux/amd64以外的平台(如windows/386)编译应用,可以使用提供的cross标签轻松实现:
console$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp -e GOOS=windows -e GOARCH=386 golang:1.3-cross go build -v
或者,您可以一次为多个平台构建:
console$ docker run --rm -it -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.3-cross bash $ for GOOS in darwin linux; do > for GOARCH in 386 amd64; do > go build -v -o myapp-$GOOS-$GOARCH > done > done
golang镜像有多种版本,每种版本设计用于特定场景。
golang:<version>这是默认镜像。如果不确定需求,可能需要使用此版本。它设计为既可作为临时容器(挂载源代码并启动容器以运行应用),也可作为构建其他镜像的基础。此标签基于https://registry.hub.docker.com/_/buildpack-deps/%E3%80%82%60buildpack-deps%60%E4%B8%93%E4%B8%BA%E6%8B%A5%E6%9C%89%E5%A4%9A%E4%B8%AA%E9%95%9C%E5%83%8F%E7%9A%84%E6%99%AE%E9%80%9ADocker%E7%94%A8%E6%88%B7%E8%AE%BE%E8%AE%A1%EF%BC%8C%E5%8C%85%E5%90%AB%E5%A4%A7%E9%87%8F%E6%9E%81%E5%85%B6%E5%B8%B8%E8%A7%81%E7%9A%84Debian%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%8C%E5%87%8F%E5%B0%91%E6%B4%BE%E7%94%9F%E9%95%9C%E5%83%8F%E9%9C%80%E8%A6%81%E5%AE%89%E8%A3%85%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85%E6%95%B0%E9%87%8F%EF%BC%8C%E4%BB%8E%E8%80%8C%E5%87%8F%E5%B0%8F%E7%B3%BB%E7%BB%9F%E4%B8%8A%E6%89%80%E6%9C%89%E9%95%9C%E5%83%8F%E7%9A%84%E6%80%BB%E4%BD%93%E5%A4%A7%E5%B0%8F%E3%80%82
golang:alpine此镜像基于流行的Alpine Linux项目,可在https://hub.docker.com/_/alpine%E4%B8%AD%E8%8E%B7%E5%8F%96%E3%80%82Alpine Linux比大多数发行版基础镜像小得多(约5MB),因此通常会生成更精简的镜像。
当希望最终镜像大小尽可能小时,强烈推荐此变体。需要注意的是,它使用musl libc而非glibc及相关库,因此某些软件可能因libc需求深度而遇到问题。然而,大多数软件不会有此问题,因此此变体通常是非常安全的选择。有关可能出现的问题以及使用基于Alpine的镜像的优缺点比较,请参见此Hacker News评论线程。
为最小化镜像大小,基于Alpine的镜像通常不包含额外的相关工具(如git或bash)。以此镜像为基础,可在自己的Dockerfile中添加所需内容(如果不熟悉如何安装软件包,请参见https://hub.docker.com/_/alpine/%E4%B8%AD%E7%9A%84%E7%A4%BA%E4%BE%8B%EF%BC%89%E3%80%82
golang:onbuild此镜像使构建派生镜像更加容易。对于大多数用例,在项目目录的基础上创建包含FROM golang:onbuild行的Dockerfile,足以创建项目的独立镜像。
虽然onbuild变体对于“快速启动”(短时间内实现Docker化)非常有用,但由于无法控制ONBUILD触发器的触发时间,不建议在项目中长期使用(另请参见https://github.com/docker/docker/issues/5714%E3%80%81https://github.com/docker/docker/issues/8240%E3%80%81https://github.com/docker/docker/issues/***%EF%BC%89%E3%80%82
一旦熟悉项目在Docker中的运行方式,可能需要调整Dockerfile以继承非onbuild变体,并将onbuild变体Dockerfile中的命令(将ONBUILD行移至末尾并删除ONBUILD关键字)复制到自己的文件中,以便更好地控制这些命令,并让自己和查看Dockerfile的其他人更清楚其作用。这也便于随着时间的推移添加额外需求(例如在执行之前的ONBUILD步骤之前安装更多软件包)。
查看此镜像中包含的软件的许可证信息。
此镜像官方支持Docker版本1.10.1。
对旧版本(低至1.6)的支持基于尽力而为原则。
有关如何升级Docker守护程序的详细信息,请参见Docker安装文档。
此镜像的文档存储在https://github.com/docker-library/docs%E7%9A%84https://github.com/docker-library/docs/tree/master/golang%E4%B8%AD%E3%80%82%E5%9C%A8%E5%B0%9D%E8%AF%95%E6%8F%90%E4%BA%A4%E6%8B%89%E5%8F%96%E8%AF%B7%E6%B1%82%E4%B9%8B%E5%89%8D%EF%BC%8C%E8%AF%B7%E5%8A%A1%E5%BF%85%E7%86%9F%E6%82%89%E8%AF%A5%E4%BB%93%E5%BA%93%E7%9A%84https://github.com/docker-library/docs/blob/master/README.md%E3%80%82
如果对此镜像有任何问题或疑问,请通过https://github.com/docker-library/golang/issues%E4%B8%8E%E6%88%91%E4%BB%AC%E8%81%94%E7%B3%BB%E3%80%82
您也可以通过Freenode上的#docker-library IRC频道联系许多官方镜像维护者。
我们邀请您贡献新功能、修复或更新,无论大小;我们始终很高兴收到拉取请求,并会尽最大努力尽快处理。
在开始编码之前,建议通过https://github.com/docker-library/golang/issues%E8%AE%A8%E8%AE%BA%E6%82%A8%E7%9A%84%E8%AE%A1%E5%88%92%EF%BC%8C%E5%B0%A4%E5%85%B6%E6%98%AF%E5%AF%B9%E4%BA%8E%E6%9B%B4%E5%AE%8F%E5%A4%A7%E7%9A%84%E8%B4%A1%E7%8C%AE%E3%80%82%E8%BF%99%E4%BD%BF%E5%85%B6%E4%BB%96%E8%B4%A1%E7%8C%AE%E8%80%85%E6%9C%89%E6%9C%BA%E4%BC%9A%E4%B8%BA%E6%82%A8%E6%8C%87%E6%98%8E%E6%AD%A3%E7%A1%AE%E6%96%B9%E5%90%91%EF%BC%8C%E6%8F%90%E4%BE%9B%E8%AE%BE%E8%AE%A1%E5%8F%8D%E9%A6%88%EF%BC%8C%E5%B9%B6%E5%B8%AE%E5%8A%A9%E6%82%A8%E4%BA%86%E8%A7%A3%E6%98%AF%E5%90%A6%E6%9C%89%E5%85%B6%E4%BB%96%E4%BA%BA%E6%AD%A3%E5%9C%A8%E4%BB%8E%E4%BA%8B%E7%9B%B8%E5%90%8C%E7%9A%84%E5%B7%A5%E4%BD%9C%E3%80%82
以下是 clefos/golang 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务