在CentOS系统上部署Golang容器前,需先安装Docker(容器化运行环境)。以下是详细步骤:
sudo yum update -y,确保系统软件包为最新版本。sudo yum install -y yum-utils device-mapper-persistent-data lvm2,安装Docker所需的依赖工具。sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo命令,添加Docker官方镜像仓库。sudo yum install -y docker-ce docker-ce-cli containerd.io,安装Docker社区版(CE)及核心组件。sudo systemctl start docker启动Docker服务,sudo systemctl enable docker设置开机自动启动。docker --version,若输出Docker版本信息(如Docker version 24.xx.xx),则说明安装成功。Dockerfile是容器化的核心配置文件,用于定义Golang应用的构建流程。以下是推荐的高效Dockerfile模板(适用于大多数Golang项目):
# 1. 使用官方Golang镜像作为基础(选择与项目匹配的版本,如1.21)
FROM golang:1.21 AS builder
# 2. 设置工作目录(容器内的项目路径)
WORKDIR /app
# 3. 复制依赖文件(go.mod/go.sum),提前下载依赖(缓存层,减少重复构建时间)
COPY go.mod go.sum ./
RUN go mod download
# 4. 复制项目源代码
COPY . .
# 5. 编译Golang程序(生成静态二进制文件,无需依赖运行时)
RUN CGO_ENABLED=0 GOOS=linux go build -o /app/main .
# 6. 使用轻量级Alpine镜像作为运行时(减小镜像体积)
FROM alpine:latest
WORKDIR /root/
# 7. 从builder阶段复制编译好的二进制文件
COPY --from=builder /app/main .
# 8. 暴露应用端口(需与代码中Listen的端口一致,如8080)
EXPOSE 8080
# 9. 定义容器启动命令
CMD ["/root/main"]
关键说明:
builder阶段编译代码,最终使用alpine镜像运行,大幅减小最终镜像体积(从几GB降至几百MB)。glibc),提升兼容性。http.ListenAndServe(":8080", nil)的端口一致(示例中为8080)。在项目根目录(包含Dockerfile的目录)下,执行以下命令构建镜像:
docker build -t my-golang-app:latest .
参数说明:
-t my-golang-app:latest:为镜像指定名称(my-golang-app)和标签(latest,代表最新版本)。.:表示Dockerfile所在目录(当前目录)。docker images,若看到my-golang-app镜像(如REPOSITORY: my-golang-app TAG: latest IMAGE ID: xxxxx),则说明构建成功。通过以下命令启动容器,将容器内的8080端口映射到主机的8080端口:
docker run -d -p 8080:8080 --name my-golang-container my-golang-app:latest
参数说明:
-d:后台运行容器(detached模式)。-p 8080:8080:将主机的8080端口映射到容器的8080端口(格式:主机端口:容器端口)。--name my-golang-container:为容器指定名称(便于后续管理)。docker logs -f my-golang-container(-f表示实时跟踪日志)。curl http://localhost:8080,若看到应用输出(如Hello, World!”),则说明部署成功。若项目包含多个服务(如Golang应用+MySQL数据库+Redis缓存),可使用Docker Compose简化部署。以下是docker-compose.yml示例:
version: '3.8'
services:
app:
build: .
ports:
- "8080:8080"
depends_on:
- db
- redis
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: mydb
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:7.0
ports:
- "6379:6379"
volumes:
mysql_data:
使用步骤:
docker-compose.yml(与Dockerfile同级目录)。docker-compose up -d,启动所有服务(-d表示后台运行)。docker-compose ps(查看服务状态),docker-compose logs -f app(查看Golang应用日志)。golang、alpine),修复已知漏洞。--memory(内存限制)、--cpus(CPU限制)参数限制容器资源,避免占用过多主机资源(如docker run -d -p 8080:8080 --memory="512m" --cpus="1" my-golang-app:latest)。docker logs或日志收集工具(如ELK、Fluentd)管理容器日志,避免日志文件过大。volumes挂载宿主机目录(如docker run -v /host/data:/container/data),避免容器删除后数据丢失。