Linux系统下Go应用容器化部署指南(以CentOS为例)
在Linux系统(如CentOS)上部署Go应用容器前,需先安装Docker。以下是CentOS的安装步骤:
sudo yum update -ysudo yum install -y yum-utils device-mapper-persistent-data lvm2sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.reposudo yum install -y docker-ce docker-ce-cli containerd.iosudo systemctl start docker && sudo systemctl enable docker安装完成后,可通过docker --version验证是否成功。
若已有Go应用,可跳过此步骤。否则,创建一个简单的HTTP服务作为示例:
go mod init my-go-app(将my-go-app替换为你的项目名称)package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello from Go in Docker!")
})
fmt.Println("Server started on port 8080")
http.ListenAndServe(":8080", nil)
}
go run main.go,然后在浏览器访问http://localhost:8080,确认输出Hello from Go in Docker!。Dockerfile是容器化的核心配置文件,用于定义镜像构建流程。以下是优化后的多阶段构建Dockerfile(推荐):
# 第一阶段:构建阶段(使用官方Golang镜像)
FROM golang:1.23-alpine AS builder
WORKDIR /app
# 复制依赖文件(避免每次复制全部代码)
COPY go.mod go.sum ./
# 下载依赖(缓存机制,减少重复下载)
RUN go mod download
# 复制源码
COPY . .
# 静态编译(CGO_ENABLED=0),适配Alpine等轻量级镜像
RUN CGO_ENABLED=0 GOOS=linux go build -o my-go-app .
# 第二阶段:运行阶段(使用Alpine镜像,减小体积)
FROM alpine:latest
WORKDIR /root/
# 从构建阶段复制二进制文件
COPY --from=builder /app/my-go-app .
# 暴露端口(与Go应用监听端口一致)
EXPOSE 8080
# 容器启动命令
CMD ["./my-go-app"]
关键说明:
golang镜像构建,第二阶段用alpine(轻量级)镜像运行,最终镜像大小可控制在10MB以内;CGO_ENABLED=0确保二进制文件不依赖系统库,适配Alpine等无glibc的镜像;go.mod/go.sum并下载依赖,后续修改源码时不会重复下载依赖。在包含Dockerfile的Go项目根目录下,运行以下命令构建镜像:
docker build -t my-go-app:latest .
-t my-go-app:latest:指定镜像名称(my-go-app)和标签(latest);.:表示Dockerfile位于当前目录。docker images查看镜像列表。使用构建好的镜像启动容器:
docker run -d -p 8080:8080 --name my-go-container my-go-app:latest
-d:后台运行容器;-p 8080:8080:将容器的8080端口映射到主机的8080端口;--name my-go-container:指定容器名称(便于管理)。docker ps查看容器状态,确认容器处于Up状态。在浏览器或终端访问http://localhost:8080,若看到Hello from Go in Docker!'的输出,说明部署成功。
也可通过以下命令查看容器日志:
docker logs -f my-go-container
应显示Server started on port 8080的启动信息。
docker psdocker ps -adocker stop my-go-container(替换为你的容器名称)docker rm my-go-containerdocker rmi my-go-app:latestdocker exec -it my-go-container /bin/sh。.dockerignore文件:在项目根目录创建.dockerignore,排除不必要的文件(如node_modules/、.git/、*.log),减少构建上下文大小,加快构建速度。ENV指令在Dockerfile中设置环境变量(如ENV PORT=8080),或在运行容器时通过-e传递(如docker run -e PORT=9090 ...),提高灵活性。HEALTHCHECK指令,定期检查应用状态(如HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://localhost:8080 || exit 1)。