背景
Beego 是一个基于 Go 语言的开源 Web 应用框架,它具有强大的功能和易于使用的特性。使用 Docker 部署 Go 项目,尤其是 Beego 框架,可以让项目的部署过程变得更加简便和一致。通过容器化技术,我们能够轻松地在各种环境中部署、测试和运行 Go 项目。
目标
本文将介绍如何使用 Docker 部署一个基于 Beego 框架的 Go 项目。整个过程包括:
- 准备 Beego 项目代码
- 编写 Dockerfile
- 构建 Docker 镜像
- 运行 Docker 容器
1. 准备 Beego 项目代码
首先,创建一个简单的 Beego 项目,假设我们已经安装了 Go 语言和 Beego 框架。如果你还没有安装,可以按照以下步骤进行安装:
bash
bash
# 安装 Beego 框架
go get github.com/astaxie/beego
# 安装 Beego 的工具 b
go get github.com/beego/bee
接下来,创建一个新的 Beego 项目:
创建webapi目录
创建/wwwroot/myproject,将web api程序文件存放在此目录下
bash
mkdir -p /wwwroot/myproject
开放webapi端口
web api预使用8001端口,需要对外开放8001端口,端口配置步骤如下:
防火墙相关命令
centos
bash
# 查看防火墙状态
systemctl status firewalld
# 启动防火墙
systemctl start firewalld
# 重新启动防火墙
firewall-cmd --reload
# 关闭防火墙命令:
systemctl stop firewalld
ubuntu
bash
# 查看防火墙状态
sudo ufw status
# 安装防火墙
sudo sudo apt-get install ufw
# 启动防火墙
sudo ufw enable
# 重新启动防火墙
sudo ufw reload
# 关闭防火墙命令:
sudo ufw disable
查看防火墙状态

系统提示: "Status: inactive"状态:不活跃,上面提示表示没有开启防火墙,并不是没有安装防火墙
启动防火墙提示

注意:Command may disrupt existing ssh connections. Proceed with operation (y|n)?
表示:命令可能会中断现有的ssh连接。继续操作(y|n)?
端口设置
centos
csharp
# web api预用端口
firewall-cmd --zone=public --add-port=8001/tcp --permanent
# 建议同时设置开放portainer的8090端口
firewall-cmd --zone=public --add-port=8090/tcp --permanent
- 命令含义:
-- zone #作用域
-- add-port=1935/tcp #添加端口,格式为:端口/通讯协议
-- permanent #永久生效,没有此参数重启后失效
ubuntu
yaml
# web api预用端口
sudo ufw allow 8081
# 建议同时设置开放portainer的8090端口
sudo ufw allow 8090
重启防火墙
centos
css
firewall-cmd --reload
ubuntu
sudo ufw reload
查看端口状态
centos
ini
firewall-cmd --query-port=8001/tcp

yes 表示已开启 no表示未开启
ubuntu
perl
sudo netstat -tunlp | grep 8001
配置好开放的端口后,建议重新关闭并停止防火墙服务。
centos
arduino
systemctl stop firewalld
ubuntu
bash
sudo ufw disable
关闭端口
ubuntu
arduino
sudo ufw delete allow 8001
web 项目
项目目录
使用beego创建一个web 项目,目录结构如下:

编译运行
arduino
bee run
访问curl http://localhost:8081/或者浏览器打开http://localhost:8081/

查看环境变量
bash
go env
编译
win环境编译win包
bash
go env
如果GOOS不是windows,GOARCH不是amd64
ini
$env:GOOS = "windows"
$env:GOARCH = "amd64"
go
go build -o beego_demo
将beego_demo上传到linux服务器
bash
chmod +x ./beego_demo
bash
./beego_demo
win环境编译linux包
Win下编译Linux平台64位可执行程序,在终端输入以下命令
ini
$env:GOOS = "linux"
$env:GOARCH = "amd64"
go
go build -o beego_demo
linux环境编译
ini
GOOS=linux GOARCH=amd64 go build -o beego_demo
bash
chmod +x ./beego_demo
bash
./beego_demo
Dockerfile
Dockerfile的go版本要与项目的go.mod版本保持一致.
先手工go build后,再docker build
ini
# 基础镜像
FROM golang:1.19
ENV GO111MODULE=on \
TZ=Asia/Shanghai \
CGO_ENABLE=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY="https://goproxy.cn,direct"
# 维护者
MAINTAINER longfc
# docker build 时执行命令 - 创建目录
RUN mkdir -p "/data/app"
# 工作目录
WORKDIR "/data/app"
# 拷贝
COPY ./ /data/app
EXPOSE 8081
# docker run 时执行命令
ENTRYPOINT ["./beego_demo"]
或者先go build后与docker build执行
ini
# 基础镜像
FROM golang:1.19 AS builder
ENV GO111MODULE=on \
TZ=Asia/Shanghai \
CGO_ENABLE=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY="https://goproxy.cn,direct"
WORKDIR /build
ADD go.mod .
COPY . .
RUN go build -o beego_demo main.go
FROM golang:1.19
ENV GO111MODULE=on \
TZ=Asia/Shanghai \
CGO_ENABLE=0 \
GOOS=linux \
GOARCH=amd64 \
GOPROXY="https://goproxy.cn,direct"
WORKDIR /build
COPY --from=builder /build/ /build/
EXPOSE 8081
# docker run 时执行命令
CMD ["./beego_demo"]
docker build
erlang
docker build -t beego.demo:v1.0.0 .
docker run
css
docker run --name beego.demo -d -p 8081:8081 beego.demo:v1.0.0

5. 访问应用
容器启动后,你可以通过浏览器访问 Beego 应用:
arduino
http://localhost:8080
如果一切顺利,你应该会看到 Beego 默认页面,表示应用已成功运行在 Docker 容器中。
6. 管理 Docker 容器
-
查看容器日志:
bash docker logs mybeegoapp
-
停止容器:
arduinobash docker stop mybeegoapp
-
删除容器:
bashbash docker rm mybeegoapp
-
删除镜像:
bash docker rmi mybeegoapp
总结
本文介绍了如何使用 Docker 部署一个基于 Beego 框架的 Go 项目。通过 Docker 的多阶段构建,我们能够将构建环境与运行环境分离,确保应用部署的高效与简洁。Docker 的使用使得开发、测试、生产环境的部署变得统一和可靠。
你可以根据自己的需求进一步优化 Dockerfile,调整环境变量、配置文件等,来适应不同的部署需求。