商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Ubuntu下如何用Golang打包Docker镜像

Ubuntu下如何用Golang打包Docker镜像

  发布于2026-07-16 阅读(0)

扫一扫,手机访问

想在 Ubuntu 上把 Golang 应用打包成 Docker 镜像?这活儿其实不复杂,几步就能走通。下面就把整个流程拆开来讲,从工具准备到最终跑起来,每一步都配上了命令和说明,跟着操作就行。

Ubuntu下如何用Golang打包Docker镜像

1. 安装必要的工具

先把基础工具备齐。你需要三样东西:Go 用来写代码和编译,Docker 用来构建和管理镜像,Docker Compose 属于可选但推荐——尤其在涉及多容器时会让事情简单很多。

具体怎么装?看下面这串命令,一条一条执行就好:

# 更新包列表
sudo apt update

# 安装Go
sudo apt install golang-go

# 设置Go环境变量(如果尚未设置)
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.bashrc
source ~/.bashrc

# 安装Docker
sudo apt install docker.io

# 启动并启用Docker服务
sudo systemctl start docker
sudo systemctl enable docker

# 安装Docker Compose(可选)
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2. 编写Go代码

接下来写个简单的HTTP服务器,功能就是返回一句"Hello, World!"。最经典的入门示例,却也足够演示整个打包流程。

// main.go
package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    http.HandleFunc("/", handler)
    fmt.Println("Server is running on port 8080...")
    http.ListenAndServe(":8080", nil)
}

3. 创建Dockerfile

在同一目录下,新建一个名为 Dockerfile 的文件(注意大小写),内容如下。这里采用了多阶段构建:第一阶段用官方 Go 镜像编译,第二阶段用 scratch 作为基础镜像,只拷贝最终二进制,这样镜像体积会非常小。

# 使用官方Go镜像作为基础镜像
FROM golang:1.17-alpine AS builder

# 设置工作目录
WORKDIR /app

# 复制Go模块依赖文件
COPY go.mod go.sum ./

# 下载依赖
RUN go mod download

# 复制源代码
COPY . .

# 构建Go应用程序
RUN go build -o main .

# 使用scratch作为最终镜像
FROM scratch

# 从builder阶段复制构建好的二进制文件
COPY --from=builder /app/main .

# 暴露端口8080
EXPOSE 8080

# 运行应用程序
CMD ["./main"]

4. 构建Docker镜像

在包含 Dockerfile 的目录中执行下面这条命令,镜像就会开始构建。别忘了最后的那个点,它表示构建上下文路径。

docker build -t my-golang-app .

5. 运行Docker容器

镜像构建完成后,用 docker run 启动容器,并把宿主机的8080端口映射到容器内的8080端口:

docker run -p 8080:8080 my-golang-app

现在打开浏览器,访问 http://localhost:8080,就能看到那句经典的 "Hello, World!" 了。

总结

从安装工具到编写 Go 代码,再到写出多阶段构建的 Dockerfile,最后构建镜像并运行容器——整个过程环环相扣,没有什么多余的步骤。这套流程也是日常开发中打包 Go 应用的标准做法,熟练之后完全可以当作开箱即用的模板。

本文转载于:https://www.yisu.com/ask/28225668.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注