温馨提示×

ubuntu golang容器化部署方法

小樊
39
2025-10-08 02:45:44
栏目: 编程语言

Ubuntu下Golang容器化部署步骤(基于Docker)

1. 准备工作:安装Docker

在Ubuntu系统上,首先需要安装Docker引擎。打开终端,执行以下命令:

sudo apt update && sudo apt install docker.io -y sudo systemctl start docker && sudo systemctl enable docker 

安装完成后,通过docker --version验证是否安装成功(输出Docker版本信息则表示成功)。

2. 创建Golang应用

在本地创建一个简单的Golang项目目录(如my-golang-app),并编写一个基础的HTTP服务代码(main.go):

package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) {	fmt.Fprintf(w, "Hello from Golang in Docker!") } func main() {	http.HandleFunc("/", handler)	fmt.Println("Server started on :8080")	http.ListenAndServe(":8080", nil) } 

保存后,在项目目录下执行go run main.go,确认应用能在本地正常运行(访问http://localhost:8080应看到响应信息)。

3. 编写Dockerfile

在项目根目录(与main.go同级)创建名为Dockerfile的文件(无扩展名),内容如下:

# 第一阶段:构建(使用官方Golang镜像) FROM golang:1.23-alpine AS builder WORKDIR /app COPY go.mod go.sum ./ # 仅复制依赖文件,利用Docker缓存加速构建 RUN go mod download COPY . . # 复制全部源码 RUN CGO_ENABLED=0 GOOS=linux go build -o /app/main . # 编译为静态链接的可执行文件(适配alpine基础镜像) # 第二阶段:运行(使用轻量级alpine镜像) FROM alpine:latest WORKDIR /app COPY --from=builder /app/main . # 从构建阶段复制编译后的二进制文件 EXPOSE 8080 # 声明容器监听的端口 CMD ["/app/main"] # 容器启动时执行的命令 

说明

  • 采用多阶段构建:第一阶段用golang:1.23-alpine(包含Go编译环境)编译代码,第二阶段用alpine(轻量级Linux镜像,大小约5MB)仅运行编译后的二进制文件,大幅减少最终镜像大小(通常从几GB压缩到几十MB)。
  • CGO_ENABLED=0:禁用CGO,生成纯静态链接的可执行文件,避免依赖libc等库(alpine镜像无libc,静态链接可解决兼容性问题)。
  • EXPOSE:仅声明容器内部端口,实际端口映射需通过docker run命令实现。

4. 构建Docker镜像

在项目目录下执行以下命令,构建Docker镜像(-t指定镜像名称及标签,.表示Dockerfile所在目录):

docker build -t my-golang-app:1.0 . 

构建过程中,Docker会依次执行Dockerfile中的指令:拉取基础镜像、设置工作目录、复制文件、编译代码、复制二进制文件等。构建完成后,通过docker images查看镜像列表,应存在my-golang-app:1.0镜像。

5. 运行Docker容器

使用构建好的镜像启动容器,执行以下命令:

docker run -d -p 8080:8080 --name my-golang-container my-golang-app:1.0 

参数说明

  • -d:后台运行容器(守护进程模式)。
  • -p 8080:8080:将容器的8080端口映射到主机的8080端口(主机端口:容器端口)。
  • --name:为容器指定名称(便于后续管理)。
  • my-golang-app:1.0:使用的镜像名称及标签。

6. 验证部署

通过浏览器或curl命令访问http://localhost:8080,应看到页面显示Hello from Golang in Docker!',或终端输出类似以下信息:

$ curl http://localhost:8080 Hello from Golang in Docker! 

表示Golang应用已成功在Docker容器中运行。

7. 可选优化:使用.dockerignore文件

为避免将不必要的文件(如node_modules.git、临时文件)复制到镜像中(增加构建时间和镜像大小),可在项目根目录创建.dockerignore文件,内容如下:

.git node_modules *.log *.tmp .DS_Store 

这样,docker build命令会自动忽略这些文件。

通过以上步骤,即可完成Golang应用在Ubuntu系统上的Docker容器化部署。多阶段构建是关键优化点,能有效减少生产环境镜像大小,提升部署效率。

0